Схема тахометра на микроконтроллере
Рассматриваемый бесконтактный тахометр – это компактное устройство на микроконтроллере ATMega48 производства компании Atmel, позволяющее измерять высокие скорости вращения бесконтактным способом. Для измерения используется ИК сенсор (оптопара, ИК светодиод и ИК фотодиод в одном корпусе). Вывод данных осуществляется на двухстрочный символьный ЖК дисплей на базе контроллера HD44780.
Принцип работы
ИК сенсор (оптопара), представляющий собой миниатюрный компонент с ИК светодиодом и фотодиодом в одном корпусе, посылает ИК излучение на вращающийся механизм (вал, ротор двигателя), на котором должна быть небольшая отражающая наклейка.
Благодаря этой наклейке, каждый оборот вала вызывает появление отраженного импульса ИК излучения. Используемый сенсор производства компании Vishay Semiconductor имеет маркировку TCND-5000.
Данный сенсор был выбран после тестирования эквивалентных продуктов, так как его корпус обеспечивал оптическую изоляцию передающей и приемной части, а ИК светодиод выдерживает большие токи, что позволяет проводить измерения на больших расстояниях.
Таким образом, используя оптопару мы можем подсчитать время полного оборота вала, а далее, зная время (обозначим это время T в секундах), мы можем вычислит количество оборотов в минуту, используя простое выражение 60/T.
Получение данных от сенсора
Для снижения стоимости устройства и сложности сборки, а также для повышения гибкости системы, мы непосредственно подключим ИК сенсор к микроконтроллеру и программно реализуем всю обработку получаемого сигнала. Сразу стоит заметить, что это не так просто, так как получаемый с ИК фотодиода сигнал содержит шумы, а внешнее освещение постоянно оказывает на него влияние. Таким образом, проблема состоит в том, чтобы разработать устройство с автоматической адаптацией к внешней освещенности и расстоянию до объекта измерения.
На рисунке ниже изображена диаграмма аналогового сигнала от ИК сенсора (фотодиода)
Так как сигнал имеет шумы, при каждом определении наличия и отсутствия импульса (наличие импульса говорит о том, что вал вращается и сенсор «видит» отражающую наклейку), большое количество колебаний «вводит в заблуждение» микроконтроллер. Кроме того, эти факторы не позволяют использовать встроенный в микроконтроллер аналоговый компаратор, и нам необходимо ввести обработку аналогового сигнала перед каждой процедурой подсчета циклов.
Решение было найдено в оценке средней интенсивности, основанную на максимальном и минимальном значении интенсивности сигнала от сенсора, и включением гистерезиса в районе средней интенсивности. Гистерезис используется для предотвращения многократного счета циклов зашумленных импульсов. Рисунок ниже поясняет работу такого алгоритма.
Когда сигнал нарастает от низкого состояния (отсутствует отражение от наклейки на валу) к высокому (отражение ИК импульса), алгоритм возьмет в расчет этот импульс высокого уровня лишь после того, как он пересечет «возрастающий уровень» гистерезиса, и примет в расчет низкий уровень лишь после того, как сигнал пересечет «спадающий уровень» гистерезиса. Такой алгоритм позволяет избежать ошибок вычислений, вызываемых шумным сигналом.
Принципиальная схема устройства
Схемотехническое решение очень простое и компактное (благодаря использованию миниатюрного сенсора), не содержит дорогостоящих компонентов. Питание устройства осуществляется от трех батарей типа AAA.
Как вы, наверное, заметили, отсутствует потенциометр регулировки контрастности дисплея (что также позволяет уменьшить размер устройства). Это возможно благодаря программной реализации алгоритма автоматической подстройки контрастности в зависимости от уровня напряжения питания с применением ШИМ и фильтра низких частот на элементах R3, R4 и C2. Пользователи могут ознакомиться с текстом алгоритма в исходном коде ПО микроконтроллера во второй части статьи.
Разъем JP1 предназначен для внутрисхемного программирования микроконтроллера. Разъем JP2 предназначен для подключения дополнительного пользовательского датчика.
Список примененных компонентов
Обозначение в схеме | Наименование, номинал |
IC1 | Микроконтроллер ATmega48 |
Q1, Q2 | Транзистор BCW66G |
C1, C2 | 10 нФ |
C4, C5 | 33 пФ |
X1 | Кварцевый резонатор 20 МГц |
R1, R2, R7 | 470 Ом |
R3 | 1 кОм |
R4 | 1.5 кОм |
R5 | 1 МОм |
R6 | 110 Ом |
R8 | 70 Ом |
LED3 | Светодиод |
IR1 | Оптопара TCND-5000 |
B1 | Кнопка |
B2 | Выключатель питания |
JP1 | Разъем внутрисхемного программирования |
JP2 | Разъем расширения |
Демонстрация работы бесконтактного тахометра на микроконтроллере AVR
Во второй части статьи рассмотрим конструкцию прибора и основные моменты в программном обеспечении микроконтроллера, включая аналого-цифровое преобразование и организацию обмена данными с ЖК дисплеем.
Предлагаю вариант тахометра на AVR микроконтроллере с большими цифрами на символьном дисплее. Цифры выстраиваются из отдельных сегментов на всю высоту дисплея, что делает показания прибора более читабельными. Рассчитывался на диапазон измерения от 300 до 9999 оборотов в минуту. Но получилось так, что при более высоких (от 10000) об/мин, младший разряд сдвигается за пределы экрана и прибор показывает количество оборотов в минуту, делённое на 10, что тоже неплохо.
Схема построена на микроконтроллере ATmega8. Для вывода показаний тахометра используется распространённый дисплей WH1602 на базе контроллера HD44780 (KS0066).
Для более точного подсчета частоты вращения коленчатого вала, микроконтроллер тактируется от внешнего кварцевого резонатора на 8 MHz. Фьюзы выставляются соответствующие:
Если высокая точность измерения не сильно важна, то можно обойтись без внешнего кварца, при этом фьюзы нужно будет выставить на тактирование от внутреннего RC генератора на 8 МГц. Так как печатная плата разведена для МК в корпусе TQFP-32, на ней, для удобства, предусмотрен ISP разъём для внутрисхемного программирования. В прикрепленном архиве находятся несколько прошивок с различными временными интервалами обновления показаний тахометра на дисплее: 50, 100, 150, 200, 250, 333 и 500 мс (период указан в имени файла прошивки), а также для сигналов входа 1 импульс на оборот и 2 импульса на оборот. Также в архиве находятся файл печатной платы и проект Proteus. После сборки схемы и прошивки микроконтроллера получается такое вот устройство:
На видео показана работа тахометра с прошивкой 1 импульс на оборот и периодом обновления показаний дисплея 50 мс
Для тех, кто не знает, тахометр-прибор для измерения частоты вращения.В этой статье я расскажу, как сделать такой прибор на микроконтроллере AVR Attiny2313.Попутно мы разберем такие функции МК, как таймер/счетчик, прерывания по таймеру/счетчику, внешние прерывания и работа с LCD дисплеем и переменными.
Для начала оговорим принцип работы и необходимые для изготовления детали.Прежде всего, нужен собственно датчик, который будет считать обороты.Его я взял из старого принтера.Там он использовался для определения наличия бумаги.
Датчик работает так: внутри него находится оптопара, состоящая из инфракрасного светодиода и фоторезистора.Когда объект(желательно белого цвета для лучшего отражения) находится над оптопарой свет, излучаемый светодиодом, отражается от него и попадает на фототранзистор.Это то же самое, что и обычный транзистор, только база управляется не подаваемым на нее током, а светом.Следовательно транзистор открывается, передавая логическую единицу на МК.
Так выглядит датчик, который использовал я:
Транзистор нужно подключать к питанию с резистором 4,7кОм, можно взять другой номинал, но 4,7кОм оптимальный вариант по току:
Для того чтобы, мы могли считать информацию понадобится дисплей.У меня под руками был однострочный 16-символьный алфавитно-цифровой экземпляр.Для регулировки контрастности дисплея желательно прикрутить переменный резистор.Даташит моего дисплея(ROHM 2034R) гласит, что нужен резистор от 10 до 20 кОм, но традицию использовать не то, что надо, а то что есть никто не отменял, поэтому я откопал резистор от 0 до 33 кОм.Если не найдете нужный переменный резистор или просто не захотите его ставить, можно сделать простой делитель напряжения из двух резисторов.Контрастность у дисплея при этом регулироваться не будет, конечно.
На этом скромный список деталек заканчивается, приступаем к составлению схемы.
Дисплей подключается к микроконтроллеру так, как показано на схеме(в данном случае для порта В).
Аналогично для порта С:
Переменный резистор, как уже было сказано используется для регулировки контрастности, подключается к 3му выводу дисплея(обозначен, как LCD HEADER V0).
Схема вышла, в общем, несложная.В архиве выложу ее полностью в формате spl(SPLAN).
Подключаем 2 необходимые библиотеки:
После подключения библиотек объявляем переменные.int-целые числа от -32768 до 32767.Для числа оборотов в секунду этого хватит.
Порт D настраиваем на ввод и ставим единицы по умолчанию на все его биты.
Инициализируем дисплей.В скобках пишем число символов в строке.
Дальше надо настроить таймер.Он примечателен тем, что тикает даже во время выполнения программы.В этом его главное отличие от обычной задержки(команды delay).Эта задержка полностью остановит МК, но в данном случае это недопустимо, так как прибор должен считать обороты без остановок.Тут и приходит на помощь таймер/счетчик.
Смысл программы такой: по внешнему прерыванию(от датчика) запускается цикл, в котором прибавляется единица к переменной rps.Таймер в это время продолжает тикать.Как только он доходит до 1 секунды, стартует другое прерывание по таймеру/счетчику.В нем переменная rps выводится на дисплей и обнуляется.Таким образом, частота обновления показаний 1 секунда.
В Attiny2313 есть 2 таймера 8 и 16 разрядный.Мы воспользуемся 8-разрядным.Он обозначается, как таймер/счетчик 0. 8 разрядов таймера означает, что в нем 2 в 8 степени позиций = 256.
Настройка таймера начинается с регистра управления TCCR0:
Расчеты таймера основаны на тактовой частоте, а в этом регистре мы выбираем предделитель тактовой частоты, с которой будет тикать таймер.Это очень сильно облегчает расчеты.К примеру, если МК работает с частотой 8 мегагерц, поделив ее на 1024, мы получаем сравнительно небольшое число, работать с которым намного легче.
Программируем биты в соответствии с таблицей:
На этом этапе нужно определиться с начальным значением таймера.Оно следует из того, сколько раз должен переполниться таймер для достижения определенного времени в соответствии с тактовой частотой с предделителем.
Расчеты:
8000000/1024=7812,5 (делим тактовую частоту МК на выбранный предделитель)
7812,5/256=30,52 (считаем число переполнений)
Значит потребуется примерно 30 переполнений всего таймера(с 0) для достижения 1 секунды.
Ставим таймер в 0.
В регистр TIFR-флаг переполнения таймера.Когда таймер переполнен автоматически устанавливается 1.
Этот регистр нужно сбросить в 0:
TIMSK — регистр прерываний по таймеру.
Разрешаем прерывания по таймеру/счетчику 0.
Также нам понадобятся и прерывания по внешнему сигналу(в данном случае с датчика).
Они управляются регистром GIMSK.INT1(PD3)-выход микроконтроллера, к которому будем цеплять датчик.
Разрешаем прерывания по внешнему сигналу с порта INT1:
Регистр МCUCR управляет видом внешних прерываний.Для тахометра подойдет прерывание по спадающему фронту.Только в этом случае он будет показывать реальное число оборотов.
Программируем регистр в соответствии с таблицей:
Ассемблерной командой разрешаем все прерывания:
Чтобы программа никогда не завершалась добавляем бесконечный цикл:
Помимо главной программы в проекте присутствуют еще 2 подпрограммы прерываний-по таймеру и по внешнему сигналу.
По таймеру:
Обозначаем начало подпрограммы прерываний:
Нужно снова обнулить таймер, чтобы он начал отсчитывать новую секунду.
Мы посчитали, что для отсчета одной секунды надо, чтобы таймер переполнился 30 раз.
Поэтому, как только счетчик прерываний(отдельная переменная pr, объявленная вначале)станет равен 30, число оборотов в секунду выводится на дисплей, а обе переменные обнуляются.
С выводом переменной на экран пришлось повозиться отдельно.Как выяснилось, выводить напрямую переменную нельзя, нужно либо сделать из нее строку, либо преобразовать ее в последовательность номеров из таблицы символов(есть в даташите на любой дисплей):
Первый способ можно устроить с помощью функции sprintf, но она ест слишком много памяти, поэтому на тиньках корректно не работает.
Воспользуемся вторым способом.Будем выводить переменную посимвольно с помощью команды lcd_putchar('код символа в таблице ').Переходим от цифры к коду символа путем деления переменной с остатком на числа кратные 10 и прибавлением числа 48(для совпадения с табличным значением).В этой программе прописан вывод четырех символов, но можно изменить ее для любого другого числа.Недостаток метода-вместо чисел превышающих 9999 будут выводится левые знаки, но вряд ли что-то сможет крутиться с частотой 10 килогерц, да и датчик от принтера потянет максимум 1 килогерц, если верить даташиту.
Если таймер переполнился но, счетчик еще не достиг 30, просто прибавляем к нему 1 и ждем следующего переполнения.
Вот и вся программа.Шьем МК и испытываем девайс в действии.
В таком оформлении выглядит не очень красиво, но работает.Можно будет сделать что-нибудь покрасивее, как сделаю, обязательно выложу фотки.
Окончательное оформление. Добавлены 2 конденсатора на питание, кнопка и светодиод(для экспериментов), а также разъем под программатор Громова.
Наконец, видео.В качестве демонстрационного полигона пришлось соорудить из подручных средств «вентилятор»:
Еще испытал это изобретение на шуруповерте.Результат порадовал.Показал 4 оборота в секунду, производителем заявлено 250 об/мин.Из целых вариантов показаний 4 самый точный, который прибор мог вывести, т.к. 4*60=240, а 5*60 это уже 300 :).
В архиве: проект CVAVR под 8 мегагерц с исходниками, прошивка, схема(SPLAN), фьюзы для Attiny2313(8 мегагерц от встроенного тактового генератора).
Во втором архиве, на всякий случай, даташиты на дисплей и датчик.Мало ли что, может пригодятся…
Этот цифровой тахометр пригоден для подсчета количества оборотов практически любого типа двигателя внутреннего сгорания. Погрешность измерения тахометра составляет всего 50 оборотов/минуту. Для показа результата используется четырехразрядное светодиодное табло.
Для настройки режима работы необходимо использовать кнопку «Select». Первое нажатие выводит на табло текущий режим работы. Режимом работы по умолчанию является третий, когда датчик выдает два импульса за оборот маховика. Соответственно, на табло появится надпись Р-2,0.
Каждое последующее нажатие кнопки переключает режим работы тахометра на следующий. Всего их девять: 0.5, 1, 2, 3, 4, 5, 6, 7, 8 имп./оборот соответственно, они устанавливают количество импульсов выдаваемых датчиком за один оборот маховика. Чем выше количество импульсов, тем точнее производится измерение.
После выбора режима работы необходимо подождать 5-10 секунд. За это время тахометр произведет запись режима работы в память микроконтроллера и перейдет в рабочий режим. В дальнейшее тахометр будет сразу при подаче питания переходить в рабочий режим. Если возникает необходимость перенастроить тахометр, то надо нажать кнопку «Select» и произвести настройку тахометра еще раз.
Стоит обратить внимание на параметры и устройство входной цепи. Для конкретного типа зажигания возможны некоторые корректировки номиналов, из-за разных устройств зажигания в различных видах авто. Это необходимо, чтобы тахометр хорошо работал с основными гармониками и не реагировал на высшие гармоники. Без такой корректировки точная работа тахометра невозможна.
Обновленная версия прошивки включает в себя функцию проверки индикаторов. Это необходимо для проведения двухсекундного теста выявления неисправности датчиков.
Прикрепленные файлы:
Автор: Вадим Корнелюк. Москва.
А кто даст исходник? могу купить за деньги! Пишите в ВК //vk.com/redfern_89
Жаль, что исходников нету в этом архиве((
исходник прошивки контроллера)
Пожалуйста скиньте файл в Splan
можете пожалуйста скинуть схему в Splan. Заранее спасибо.
К сожалению нет схемы в Splan.
все равно спасибо. а как программа работает?
Надеюсь, не нужно объяснять работу самого тахометра, а в частности микропроцессоров PIC16F серии 62X. Всегда можно посмотреть даташит на эту микросхему (pic16f628a datasheet). Могу кратко сказать, что микроконтроллер по данной схеме работает в режиме многократного сброса с последующим отсчетом по встроенному таймеру.
Вас интересует работа в sPlan, хотя лично в этом планировщике не работал, но судя по интерфейсу в нем нет ничего сложного: перемещай готовые элементы с левой колонки на белый лист и соединяй их линиями-проводниками.
это то я все знаю) сам тахометр подключается к реле? и автоматически начинает считывать?
Электронному тахометру нужен сигнал низкого потенциала, чтобы открыть транзистор BT547 обратной проводимости. Обычно, замыкание на массу никто не использует. Подключают непосредственно к бесконтактному датчику Хола или к клемме катушки зажигания, соединенной с коммутатором зажигания. Не знаете точно к какой клемме подключать, проверьте экспериментально: на одной будет работать, на другой нет.
Здравствуйте .
Что то я не очень хорошо понял , из ваших слов следует что без разницы куда подключать , к датчику Холла или на клемму катушки зажигания , но датчик Холла выдаёт один импульс на оборот двигателя , а катушка два ??
Стандартно эти тахометры я подключаю к катушке или коммутатору. Ведь все равно он настраиваемый?.
Эт я сам немного недопонял смысл настройки .
Прошивку скачать не удаётся , ссылка что ли не рабочая ??
Ссылку исправил, Спасибо, что нашли баг.
Скачал прошивку , спасибо , буду пробовать собирать , потом отпишусь что получилось .
Конечно, отпишитесь. размещу ваши фотки на сайте. Может кто, и закажет Вам девайс
и еще, устройства?
и еще, есть фото устройства?
Работа тахометра
Отличная идея. Надо подумать.
Спасибо за мысль.
В архиве несколько прошивок,так какую из них зашивать?
день добрый всем, а случайно прошивки под общий катод нет у кого?
а для дизеля подходит? там подключается к клеме генератора.
данный тахометр работает в диапазоне от 0,5 до 8 импульсов на 1 оборот вала. Если передаточные число шкива генератора кратное этим параметрам тахометр будет работать.?
Конечно, можно не ставить индикатор 1 знака. Но тогда придется нарисовать, что ли, этот ноль. Как по мне, не очень информативно, когда высвечиваются обороты двигателя только с десятков оборотов в минуту, а ноль перед ними нужно додумывать. А любопытным прохожим или пассажирам, так и вовсе придется объяснять, что это тысячи оборотов, а не сотни в минуту, просто надо ноль добавлять в конце. Не нравится мне такая презентация своей самоделки, которой гордиться надо! Да и устройство без четвертого индикатора имеет незаконченный вид, как будто выгорел этот индикатор.
Собрал на ардуине ) с шкалой из 40 светодиодов, шкалой ускорителя (10 сегментов) и трехцифровым индикатором )
Как-то печатная плата в архиве не совпадает со схемой в том же архиве. Как это прикажете понимать?
Почему исчез предыдущий мой комментарий? Автор, будьте добры ответить на мой вопрос.
Здравствуйте Артем. Все комментарии проходят модерацию. Все ваши комменты опубликованы. Ничего никуда не пропало.
Добрый день.
Выношу на Ваше рассмотрение схему простенького цифрового тахометра на AVR ATtiny2313, КР514ИД2, и оптопаре спроектированного мною.
Сразу оговорюсь: аналогичных схем в интернете много. У каждой реализации свои плюсы и минусы. Возможно, кому-то мой вариант подойдет больше.
Начну, пожалуй, с тех. задания.
Задача: нужно сделать цифровой тахометр для контроля оборотов электрического двигателя станка.
Вводные условия: Есть готовый реперный диск на 20 отверстий от лазерного принтера. В наличии много оптопар от сломанных принтеров. Средние (рабочие) обороты 4 000-5 000 оборотов/минуту. Погрешность отображаемых результатов не должна превышать ± 100 оборотов.
Ограничение: питание для блока управление составляет 36В (тахометр будет установлен в один корпус с блоком управления – об этом ниже).
Маленькое лирическое отступление. Это станок моего друга. На станке установлен электромотор PIK-8, обороты которого контролируются согласно найденной в интернете и модифицированной схеме. По просьбе друга и был разработан простенький тахометр для станка.
Изначально в схеме планировалось применить ATMega16, но рассмотрев условия, решено было ограничиться ATtiny2313, работающего от внутреннего (RC) генератора на частоте 4 Мгц.
Общая схема выглядит следующим образом:
- Во первых – экономия места в памяти ATtiny2313 за счет уменьшения рабочего кода (т.к. процедура программного преобразования двоичного кода в семисегментный отсутствует в прошивке за ненадобностью).
- Во вторых: уменьшение нагрузки на выходы ATtiny2313, т.к. светодиоды «засвечивает» КР514ИД2 (при высвечивании цифры 8 максимальное потребление составит 20-30 мА (типичное для одного светодиода) * 7 = 140-210 мА что «много» для ATtini2313 с её полным паспортным максимальным (нагруженным) потреблением 200 мА).
- В третьих – уменьшено число «занятых» ног микроконтроллера, что дает нам возможность в будущем (при необходимости) модернизировать схему путём добавления новых возможностей.
Сборка устройства осуществлена на макетной плате. Для этого была разобрана завалявшаяся в закромах плата от нерабочей микроволновой печи. Цифровой светодиодный индикатор, ключевые транзисторы (VT1-VT4) и ограничительные резисторы (R1 – R12) были взяты комплектом и перенесены на новую плату. Все устройство собирается, при наличии необходимых компонентов, с перекурами за пол часа. Обращаю внимание: у микросхемы КР514ИД2 плюсовая ножка питания — 14, а минус — 6 (отмечены на схеме). Вместо КР514ИД2 можно применить любой другой дешифратор двоичного кода в семисегментный с питанием от 5В. Я взял то, что было под рукой.
Выводы «h» и «i» цифрового светодиодного индикатора отвечают за две точки по центру между цифрами, не подключены за ненадобностью.
После сборки и прошивки, при условии отсутствия ошибок монтажа, устройство начинает работать сразу после включения и в настройке не нуждается.
При необходимости внесения изменений в прошивку тахометра на плате предусмотрен разъем ISP.
На схеме подтягивающий резистор R12, номиналом 30 кОм, подобран опытным путём для конкретной оптопары. Как показывает практика – для разных оптопар он может отличаться, но среднее значение в 30 кОм должно обеспечить устойчивую работу для большинства принтерных оптопар. Согласно документации к ATtiny2313, величина внутреннего подтягивающего резистора составляет от 20 до 50 кОм в зависимости от реализации конкретной партии микроконтроллеров, (стр. 177 паспорта к ATtiny2313), что не совсем подходит. Если кто захочет повторить схему, может для начала включать внутренний подтягивающий резистор, возможно у Вас, для Вашей оптопары и вашего МК работать будет. У меня, для моего набора не заработало.
Так выглядит типичная оптопара от принтера.
Светодиод оптопары запитан через ограничивающий резистор на 1К, который я разместил непосредственно на плате с оптопарой.
Для фильтрации пульсаций напряжения на схеме два конденсатора, электролитический на 220 мкФ х 25В (что было под рукой) и керамический на 0,1 мкФ, (общая схема включения микроконтроллера взята из паспорта ATtiny2313).
Для защиты от пыли и грязи плата тахометра покрыта толстым слоем автомобильного лака.
Замена компонентов.
Можно применить любой светодиодный индикатор на четыре цифры, либо два сдвоенных, либо четыре поодиночных. На худой конец, собрать индикатор на отдельных светодиодах.
Вместо КР514ИД2 можно применить КР514ИД1 (которая содержит внутри токоограничивающие резисторы), либо 564ИД5, К155ПП5, К155ИД9 (при параллельном соединении между собой ножек одного сегмента), или любой другой преобразователь двоичного в семисегментный (при соответствующих изменениях подключения выводов микросхем).
Транзисторы VT1-VT4 – любые слаботочные, работающие в режиме ключа.
Принцип работы основан на подсчете количества импульсов полученных от оптопары за одну секунду и пересчет их для отображения количества оборотов в минуту. Для этого использован внутренний счетчик Timer/Counter1 работающий в режиме подсчета импульсов поступающих на вход Т1 (вывод PD5 ножка 9 МК). Для обеспечения стабильности работы, включен режим программного подавления дребезга. Отсчет секунд выполняет Timer/Counter0 плюс одна переменная.
Расчет оборотов, на чем хотелось бы остановиться, происходит по следующей формуле:
M = (N / 20) *60,
где M – расчетные обороты в минуту (60 секунд), N – количество импульсов от оптопары за одну секунду, 20 – число отверстий в реперном диске.
Итого, упростив формулу получаем:
M = N*3.
Но! В микроконтроллере ATtiny2313 отсутствует функция аппаратного умножения. Поэтому, было применено суммирование со смещением.
Для тех, кто не знает суть метода:
Число 3 можно разложить как
3 = 2+1 = 2 1 + 2 0 .
Если мы возьмем наше число N сдвинем его влево на 1 байт и приплюсуем еще одно N сдвинутое влево на 0 байт – получим наше число N умноженное на 3.
В прошивке код на AVR ASM для двухбайтной операции умножения выглядит следующим образом:
Mul2bytes3:
CLR LoCalcByte //очищаем рабочие регистры
CLR HiCalcByte
mov LoCalcByte,LoInByte //грузим значения полученные из Timer/Counter1
mov HiCalcByte,HiInByte
CLC //чистим быт переноса
ROL LoCalcByte //сдвигаем через бит переноса
ROL HiCalcByte
CLC
ADD LoCalcByte,LoInByte //суммируем с учетом бита переноса
ADC HiCalcByte,HiInByte
ret
Проверка работоспособности и замер точности проводился следующим образом. К вентилятору компьютерного куллера был приклеен картонный диск с двадцатью отверстиями. Обороты куллера мониторились через BIOS материнской платы и сравнивались с показателями тахометра. Отклонение составило порядка 20 оборотов на частоте 3200 оборотов/минуту, что составляет 0,6%.
Вполне возможно, что реальное расхождение составляет меньше 20 оборотов, т.к. измерения материнской платы округляются в пределах 5 оборотов (по личным наблюдениям для одной конкретной платы).
Верхний предел измерения 9 999 оборотов в минуту. Нижний предел измерения, теоретически от ±10 оборотов, но на практике не замерялся (один импульс от оптопары в секунду дает 3 оборота в минуту, что, учитывая погрешность, теоретически должно правильно измерять скорость от 4 оборотов в минуту и выше, но на практике данный показатель необходимо завысить как минимум вдвое).
Отдельно остановлюсь на вопросе питания.
Вся схема питается от источника 5В, расчетное потребление всего устройства не превышает 300 мА. Но, по условиям ТЗ, тахометр конструктивно должен находится внутри блока управления оборотами двигателя, а к блоку от ЛАТРа поступает постоянное напряжение 36В., чтобы не тянуть отдельный провод питания, внутри блока установлена LM317 в паспортном включении, в режиме понижения питания до 5В (с ограничивающим резистором и стабилитроном для защиты от случайного перенапряжения). Логичнее было бы использовать ШИМ-контроллер в режиме step-down конвертера, на подобии МС34063, но у нас в городе купить такие вещи проблематично, поэтому, применяли то, что смогли найти.
Фотографии платы тахометра и готового устройства.
К сожалению, сейчас нет возможности сфотографировать на станке.
После компоновки плат и первой пробной сборки, коробка с устройством отправилась на покраску.
Исходный код, на AVR ASM, файлы проекта AVR Studio4 и скомпилированный .HEX файл находятся здесь:http://djkiridza.org.ua/ldd/taho-v029.zip.
Зеркало здесь:http://fileobmen.org.ua/DJ_Kiridza/taho-v029.zip
В случае, если у Вас тахометр не заработал сразу после включения, при заведомо верном монтаже:
1) Проверить работу микроконтроллера, убедится, что он работает от внутреннего генератора. Если схема собранна правильно – на циферблате должно отображаться четыре нуля.
2) Проверить уровень импульсов от оптопары, при необходимости подобрать номинал резистора R12 или заменить схему подключения оптопары. Возможен вариант обратного подключения оптотранзистора с подтяжкой к минусу, с включенным или нет внутренним подтягивающим резистором МК. Также возможно применить транзистор в ключевом (инвертирующем) режиме работы.
Читайте также: