Программа Сервисный Центр
0

Бесконтактный тахометр на микроконтроллере AVR. Часть 2. Программное обеспечение для микроконтроллера


Ibrahim Kamal (IKALOGIC) Примечание. Выборки исходного кода, размещенные в тексте описания, использовать в своих проектах не рекомендуется. В конце описания имеется ссылка на архив с полным исходным кодом к проекту. Внешний вид конструкции
Бесконтактный тахометр на микроконтроллере AVR. Часть 2. Программное обеспечение для микроконтроллера
Бесконтактный тахометр на микроконтроллере AVR. Часть 2. Программное обеспечение для микроконтроллера
Бесконтактный тахометр на микроконтроллере AVR. Часть 2. Программное обеспечение для микроконтроллера
Стоит отметить, что микроконтроллер, для решения поставленной задачи по измерению оборотов, инициализирует два своих таймера: один (Timer 0) настраивается в режим ШИМ для управления контрастностью, другой (Timer 1) для подсчета количества оборотов. Основным моментом в ПО является выполнение специального алгоритма, о котором говорилось в первой части статьи, по окончанию каждого аналого-цифрового преобразования. Данный алгоритм представлен ниже. Листинг ISR(ADC_vect){//Global variables used :// ir_value : contains the value of the intensity of IR reflection// ain_th_high : High threshold (rising hysteresis)// ain_th_low : Low threshold (falling hysteresis)// t_capture & t_postscale : reading of the time elapsed since last detected cycle// ir_history_b and ir_history_a: hold the last two values of ir_value// last_state : used to remember which hysteresis level to use ir_value = ADC>>2; if ((ir_value > ain_th_high) && (last_state==0)) //a cycle is detected { last_state = 1; //for next edge detection, use the falling hysteresis // for next detection t_capture=TCNT1;TCNT1 = 0; t_postscale=post_scaller; post_scaller=0; } if ((ir_value < ain_th_low) && (last_state==1)) //a low level is detected { last_state = 0; //for next edge detection, use the rising hysteresis for //next detection } if (delta(ir_history_a,ir_value) > 10) { //the values having more than 10 adc //quantums will be used to determine ir_history_b = ir_history_a; //average and hysteresis levels ir_history_a = ir_value; ir_avg = (ir_history_a+ir_history_b)/2; ain_th_high = ir_avg + 5; ain_th_low = ir_avg - 5; }} Дополнительно, микроконтроллер выполняет автоматическую подстройку контрастности, в зависимости от уровня напряжения питания, что является важным моментом при питании устройства от батареи. Как вы заметили, для решения этой задачи не используются какие-либо дополнительные компоненты. Измерение напряжения питания микроконтроллера построено по методике, рассмотренной в статье «AVR: мониторинг напряжения питания». Для решения задачи измерения напряжения питания без использования каких-либо внешних компонентов, AVR микроконтроллер имеет очень полезный встроенный узел, называемый внутренний Band Gap источник опорного напряжения (Band Gap Reference Voltage). Выходное напряжение этого источника около 1.1 В, и оно остается неизменным при изменении температуры и напряжения питания микроконтроллера. Это напряжение может подаваться на вход АЦП, как и любое внешнее напряжение, с единственным исключением, что делается это программно, без включения дополнительных внешних компонентов. Хотя данный узел не был разработан для нашей определенной цели, мы будем использовать его в нашей задаче по измерению напряжения питания микроконтроллера, а на основе полученных данных об уровне напряжения, будем регулировать уровень контрастности дисплея. ЖК индикатор подключен к микроконтроллеру по 4-битной шине. Программа для микроконтроллера написана на Си в среде AVR Studio с пользованием Си-компилятора WinAVR, исходный код снабжен подробными комментариями, что позволяет пользователям вникнуть в алгоритм работы микроконтроллера. Загрузки Исходный код - скачатьНа английском языке: Contactless Tachometer on AVR. Part 2. FirmwareПеревод: Vadim по заказу РадиоЛоцман

По материалам сайта www.rlocman.ru

Также рекомендуем:

 
 
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.
 
Обратная связь

Наши партнеры

 

Опросы

Есть ли справедливость в жизни?
Конечно есть, уверен!
Вроде как должна быть, но...
Затрудняюсь ответить...
Какая справедливость? О чем Вы?
Эх.., нет правды на свете!

 

Облако тегов

Требуется для просмотраFlash Player 9 или выше.

Показать все теги
 

Календарь публикаций

«    Декабрь 2016    »
ПнВтСрЧтПтСбВс
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
 

Архив новостей

Декабрь 2016 (15)
Ноябрь 2016 (42)
Октябрь 2016 (34)
Сентябрь 2016 (38)
Август 2016 (34)
Июль 2016 (36)
 
Наверх Сервисные мануалы Даташиты Ремонт LCD, ЖК телевизоров LG Samsung Скрипт программы "Сервисный центр"