Радиолоцман Электроника en
расширенный поиск +
  

14-02-2011

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

Ibrahim Kamal (IKALOGIC)

Примечание. Выборки исходного кода, размещенные в тексте описания, использовать в своих проектах не рекомендуется. В конце описания имеется ссылка на архив с полным исходным кодом к проекту.

Часть 1. Схема и принцип работы

Внешний вид конструкции

Бесконтактный тахометр на AVR

Бесконтактный тахометр на AVR

Стоит отметить, что микроконтроллер, для решения поставленной задачи по измерению оборотов, инициализирует два своих таймера: один (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, исходный код снабжен подробными комментариями, что позволяет пользователям вникнуть в алгоритм работы микроконтроллера.

Загрузки

Исходный код - скачать

Перевод: Vadim по заказу РадиоЛоцман

На английском языке: Contactless Tachometer on AVR. Part 2. Firmware

Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения:Полный вариант обсуждения »
  • на чом луче собрать ету схему
Рекомендуемые публикации по теме:
Форум  »
Обсуждение: Бесконтактный тахометр на микроконтроллере AVR. Часть 1. Схема и принцип работы
Схемы  »
Бесконтактный тахометр на микроконтроллере AVR. Часть 1. Схема и принцип работы
Схемы  »
Бесконтактный тахометр на микроконтроллере PIC. Часть 2. Подключение датчика и дисплея к микроконтроллеру, ПО
Схемы  »
Бесконтактный тахометр на микроконтроллере PIC. Часть 1. Теория
Схемы  »
DDS генератор на микроконтроллере ATmega16. Часть 2. Программное обеспечение для микроконтроллера

При перепечатке материалов с сайта прямая ссылка на РадиоЛоцман обязательна.

Приглашаем авторов статей и переводов к публикации материалов на страницах сайта.

Срезы ↓
Датчики влажности и температуры ДВТ-03
Цена: от 3 168 руб.
Доставка: Россия и страны СНГ
DIY настольный 3D принтер
Цена: 163 $ (9500 руб.)
Промо-акция, последняя скидка
Очки с подсветкой и сменными окулярами
Цена: от 8 $ (477 руб.)
Бесплатная доставка: Весь мир
радиолоцман вконтакте радиолоцман одноклассники радиолоцман facebook радиолоцман twitter радиолоцман google плюс