Диагностический контроллер
|
|
TriRozhka |
Дата: Вс, 26.02.2012, 17:53 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
7
Замечания:
±
На сайте с 06.02.2012
Статус:
Offline
|
Здравствуйте. Скажу сразу что программированием МК занимаюсь всего 3 недели, а вообще программирую на с++.
Пишу диплом по программированию диагностического МК. Внешние компоненты: 4 датчика DS18B20, 4 неизвестных аналоговых датчика вибрации, аналоговый датчик оборотов, аналоговый датчик тока. Внутренние компоненты: 18f4525, LM3229, 8x 24LC512, 3x DS2405, DS1307, RS232, клавиатура 3х3 Задача: Опрос датчиков, сравнение с заданными константами, периодическая запись в память, сигнализация.
Основная программа пока не готова, но все модули отлажены поодиночке. Единственной проблемой для меня стал датчик оборотов. Обороты на производстве варьируются в диапазоне от 30 до 3000 об/мин. Датчик представляет собой магнитный элемент закрепленный на валу и сам датчик, то есть сигнал импульсный. Проблема заключается в том что в такой конфигурации стандартные команды протона pulsein и counter сожрут прилично время цикла и не обеспечат необходимой точности. Единственным оптимальным решением в виду того что датчик оборотов заменить нельзя, было обрабатывать обороты прерыванием. Но и тут не все так просто... Может я плохо читал литературу, а может совсем нуб, но как я понял прерывание срабатывает либо по переполнению таймера, либо по прерыванию на порту rb.0 либо на любом rb.4-rb.7. Проблемой стала клавиатура 3 на 3 которая подключена на порт B. Так же читал что для работы с прерываниями внутренние подтягивающие резисторы на порту В надо отключать, не знаю так ли это.
В связи с тем что данный диагностический МК будет собираться в железе, хочу обратиться за помощью по 2 вопросам: 1. Проверить электронику на схеме на предмет забытых резисторов или нубского подключения. 2. Подсказать как реализовать обработку с датчика оборотов, чтобы погрешность измерения была не более 0.01% (желательно не более 0.001%), и на какой порт его повесить.
PS Условные обозначения: V1-V4 - датчики вибрации, DT - датчик тока, DN - датчик оборотов, OW - 1-wire шина Заранее благодарю всех откликнувшихся.
|
|
|
|
mikhail09p |
Дата: Вс, 26.02.2012, 20:46 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Quote (TriRozhka) Так же читал что для работы с прерываниями внутренние подтягивающие резисторы на порту В надо отключать, не знаю так ли это Странно, я такого не замечал в даташите.
|
|
|
|
ADMIN |
Дата: Пн, 27.02.2012, 04:50 | Сообщение # 3 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Я бы повешал измеритель оборотов на вход CCP1, настроил его на захват и в прерываниях получал значение периода следования импульсов. На главной странице сайта есть статья именно по этому вопросу. Хочу добавить - источников прерывания - много. Кроме перечисленного выше - есть еще по переполнению таймеров, по захвату, по окончанию преобразования АЦП, по приему и передаче по USART, по чтению/записи в EEPROM и. т. д. Для работы с прерываниями по порту Б он настраивается на вход. Если не вешать подтягивающих резисторов, то вход будет "плавать". Можно использовать внутреннюю подтяжку, но только к плюсу питания. А можно - внешнюю - как к плюсу, так и к минусу. R7-R9 - от 4.7к до 10к на DS18B20 также нужна отдельная подтяжка от 4.7к до 10к на плюс питания. На DS2405, не знаю, но скорее всего - тоже.
Клавиатуру можно организовать на одном входе АЦП. Вот статья об этом.
|
|
|
|
TriRozhka |
Дата: Вт, 28.02.2012, 01:49 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
7
Замечания:
±
На сайте с 06.02.2012
Статус:
Offline
|
Спасибо за советы с оборотами! Реализовал. Теперь непонятно другое... как при разрешении 10 или 12 бит ADIn возвращает 16 битный результат? На вход поступает синусоида +-5В.
|
|
|
|
ADMIN |
Дата: Вт, 28.02.2012, 02:27 | Сообщение # 5 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
А кто сазал, что он возвращает 16-битный результат? Результат и будет 10- или 8-разрядный. При 10-разрядном преобразовании результат хранится в двух регистрах - ADRESL(младшие 8 бит) и ADRESH(старшие 2 бита). Если вопрос касательно клавиатуры на АЦП - то здесь при считываении получается не код нажатой клавиши, а определенное напряжение, которое сопоставляется какой-либо клавише.
Синусоиду нужно масштабировать до диапазона 0..+5 В. Если переменное напряжение, то лучшим вариантом будет взять за ноль(в программе) уровень в 2,5 вольта.
|
|
|
|
TriRozhka |
Дата: Вт, 28.02.2012, 17:23 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
7
Замечания:
±
На сайте с 06.02.2012
Статус:
Offline
|
var1 = ADIn 0 В переменной var1 0x8000 ADRESL = 0x00 ADRESH = 0x80 Разве для 10 бит 0x3ff не предел ?
Расскажите по подробнее про масштабирование, а то в тех характеристике датчика вибрации как раз таки +- 5В, я надеялся что будет 0-5 но увы. Как лучше поступить: подтягивать аппаратно или же поставить MCP3301 на каждый датчик вибрации ? (Желательно конечно оптимальный вариант по цене так как все таки разрабатывается стационарное устройство и не хочется чтобы его цена превышала цену самого диагностируемого оборудования оборудования)
Сообщение отредактировал
TriRozhka - Вт, 28.02.2012, 21:05
|
|
|
|
ADMIN |
Дата: Ср, 29.02.2012, 07:22 | Сообщение # 7 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
В переменной var1 и будет 1023 при максимальном значении входного сигнала, где максимум определяется значением опорного напряжения. Откуда значение 0x8000? Вот один мой старый проект - там как раз измерение как положительного, так и отрицательного. Комментариев к программе, к сожалению, нет.
|
|
|
|
TriRozhka |
Дата: Чт, 01.03.2012, 02:16 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
7
Замечания:
±
На сайте с 06.02.2012
Статус:
Offline
|
Quote (ADMIN) В переменной var1 и будет 1023 при максимальном значении входного сигнала, где максимум определяется значением опорного напряжения. В таком случае протеус врёт =) Я использовал команду ADIn (у вас в коде она по сути реализована вручную, вы выставляете биты регистров инициируете замер и вынимаете результат), опорное напряжение были земля и +5 вольт. подавал сигнал импульсный 0/5В выдавало 0x0000 и 0x8000 Для наглядности выводил содержимое регистров и они совпадали с тем что выдала ADIn
|
|
|
|
ADMIN |
Дата: Чт, 01.03.2012, 07:14 | Сообщение # 9 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
А выравнивание по какому краю стоит? 0x8000 это 32768. Какое-то подозрительное число. А если напряжение уменьшать? А как мой пример?
|
|
|
|
TriRozhka |
Дата: Пт, 06.04.2012, 04:28 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
7
Замечания:
±
На сайте с 06.02.2012
Статус:
Offline
|
С АЦП пока отложил вопрос так как всплыла проблема подключения дисплея WG240128. Не можем оживить это чудо. В интернете не нашёл никаких схем правильного подключения питания. Вроде бы нашёл что то связанное с подтягиванием но там на таком языке общались что я ничего не понял. Если кто то имел дело с этим пожалуйста подскажите как надо подключить этот дисплей. Добавлено (06.04.2012, 04:28) --------------------------------------------- Монитор оживили. Теперь наболевшая проблема с русскими шрифтами которых нет. Так же как и нет никакой литературы по вопросам внешних шрифтов. Своими силами написал на пхп конвертер из кодировки SAMSUNG в TOSHIBA. Нашёл хитрую команду Toshiba_udg. Вроде кажется что все гладко но это только кажется: Нижние 4 строки дисплея, при выводе русского текста, забиты каким то хламом. Из 64 загруженных символов первые 32 (заглавные русские) записались 2 раза, так что когда хочешь от него маленькие буквы все равно лепит заглавные. Очень непонятно как правильно использовать эту команду так как нет никаких мануалов вообще. Почему то определение символов идёт уже после вывода текста хотя как такое может быть... Притом если поставить ее перед выводом текста то на экране будет пусто. Кто имеет опыт с контролерами тошиба подскажите как правильно реализовать вывод русских букв на экране дисплея.
PS Если что железо на руках.
Сообщение отредактировал
TriRozhka - Ср, 28.03.2012, 23:37
|
|
|
|
DAlexV |
Дата: Сб, 07.04.2012, 10:45 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Quote (TriRozhka) Кто имеет опыт с контролерами тошиба подскажите как правильно реализовать вывод русских букв на экране дисплея. Работал с разными GLCD? в том числе и с Toshiba. RA6963 используемый в WG240128 полный аналог T6963c. Внутренний программируемый знакогенератор не использовал, пользовался загружаемым(благо есть конвертор шрифтов). Вот пример http://www.sfcompiler.co.uk/forum....%2A128. Были небольшие проблемы с прорисовкой графических изображений в смысле кнопок (2D графика работает нормально), но пошаманив решил и это. Вот пример работы программы http://www.sfcompiler.co.uk/wiki/pmwiki.php?n=SwordfishUser.T6963c. Удачи
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
TriRozhka |
Дата: Сб, 07.04.2012, 15:37 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
7
Замечания:
±
На сайте с 06.02.2012
Статус:
Offline
|
Чуть чуть опоздали с ответом =) С 15 чтения даташита я наконец понял как оно устроено. Сумел таки прикрутить русский шрифт =) Жаль что примеров для протона нет и пришлось потратить 2 суток на изучение материала и опыты.
|
|
|
|