DIY цифровой тахометр на AVR ATtiny2313, КР514ИД2 и оптопаре / Хабр
DIY цифровой тахометр на AVR ATtiny2313, КР514ИД2 и оптопаре
Добрый день.
Выношу на Ваше рассмотрение схему простенького цифрового тахометра на AVR ATtiny2313, КР514ИД2, и оптопаре спроектированного мною.
Сразу оговорюсь: аналогичных схем в интернете много. У каждой реализации свои плюсы и минусы. Возможно, кому-то мой вариант подойдет больше.
Начну, пожалуй, с тех. задания.
Задача: нужно сделать цифровой тахометр для контроля оборотов электрического двигателя станка.
Вводные условия: Есть готовый реперный диск на 20 отверстий от лазерного принтера. В наличии много оптопар от сломанных принтеров. Средние (рабочие) обороты 4 000-5 000 оборотов/минуту. Погрешность отображаемых результатов не должна превышать ± 100 оборотов.
Ограничение: питание для блока управление составляет 36В (тахометр будет установлен в один корпус с блоком управления – об этом ниже).
Маленькое лирическое отступление.
Изначально в схеме планировалось применить ATMega16, но рассмотрев условия, решено было ограничиться ATtiny2313, работающего от внутреннего (RC) генератора на частоте 4 Мгц.
Общая схема выглядит следующим образом:
Как видно, ничего сложного. Для преобразования двоичного кода в семисегментный, я применил дешифратор КР514ИД2, это дает сразу три плюса.
- Во первых – экономия места в памяти ATtiny2313 за счет уменьшения рабочего кода (т.к. процедура программного преобразования двоичного кода в семисегментный отсутствует в прошивке за ненадобностью).
- Во вторых: уменьшение нагрузки на выходы ATtiny2313, т.к. светодиоды «засвечивает» КР514ИД2 (при высвечивании цифры 8 максимальное потребление составит 20-30 мА (типичное для одного светодиода) * 7 = 140-210 мА что «много» для ATtini2313 с её полным паспортным максимальным (нагруженным) потреблением 200 мА).
- В третьих – уменьшено число «занятых» ног микроконтроллера, что дает нам возможность в будущем (при необходимости) модернизировать схему путём добавления новых возможностей.
Сборка устройства осуществлена на макетной плате. Для этого была разобрана завалявшаяся в закромах плата от нерабочей микроволновой печи. Цифровой светодиодный индикатор, ключевые транзисторы (VT1-VT4) и ограничительные резисторы (R1 – R12) были взяты комплектом и перенесены на новую плату. Все устройство собирается, при наличии необходимых компонентов, с перекурами за пол часа. Обращаю внимание: у микросхемы КР514ИД2 плюсовая ножка питания — 14, а минус — 6 (отмечены на схеме). Вместо КР514ИД2 можно применить любой другой дешифратор двоичного кода в семисегментный с питанием от 5В. Я взял то, что было под рукой.
После сборки и прошивки, при условии отсутствия ошибок монтажа, устройство начинает работать сразу после включения и в настройке не нуждается.
При необходимости внесения изменений в прошивку тахометра на плате предусмотрен разъем 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 (при параллельном соединении между собой ножек одного сегмента), или любой другой преобразователь двоичного в семисегментный (при соответствующих изменениях подключения выводов микросхем).
При условии правильного переноса монтажа на МК ATMega8/ATMega16 данная прошивка будет работать, как и на ATtiny2313, но нужно подправить код (изменить названия констант) и перекомпилировать. Для других МК AVR сравнение не проводилось.
Транзисторы 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 = 21 + 20.
Если мы возьмем наше число 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В (с ограничивающим резистором и стабилитроном для защиты от случайного перенапряжения).
Фотографии платы тахометра и готового устройства.
Еще фотографии
К сожалению, сейчас нет возможности сфотографировать на станке.
После компоновки плат и первой пробной сборки, коробка с устройством отправилась на покраску.
Исходный код, на 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 или заменить схему подключения оптопары. Возможен вариант обратного подключения оптотранзистора с подтяжкой к минусу, с включенным или нет внутренним подтягивающим резистором МК. Также возможно применить транзистор в ключевом (инвертирующем) режиме работы.
P.S. по желанию заказчика тахометр отображает не один ноль, а четыре при отсутствии импульсов от оптопары.
P.P.S. Тахометр оказался очень чувствителен к перепадам оборотов двигателя. Незначительные пульсации напряжения вызывают отклонение частоты вращения, что незамедлительно отображается на экране тахометра. В будущем планирую сделать обработку для округления отображаемых результатов в пределах ±50 оборотов, если это будет нужно заказчику.
Тахометр – простой измеритель оборотов на базе микроконтроллера ATtiny13A
Главная » Измерение и контроль, Микроконтроллеры » Тахометр — простой измеритель оборотов на базе микроконтроллера ATtiny13A
Данный тахометр позволяет измерять количество оборотов двигателя в минуту. Измерение основано на подсчете отраженного света от белой метки на валу двигателя.
Аппаратное обеспечение
ИК-светодиод излучает свет, который отражается вращающимся объектом и обнаруживается ИК-фотодиодом. Фотодиод меняет свою проводимость в зависимости от силы отраженного света. Если у вращающегося объекта есть только одна белая полоса, а вся остальная поверхность темная, то фотодиод изменяет свое сопротивление дважды за оборот.
Напряжение в точке соединения фотодиода и резистора сопротивлением 10 кОм поднимается один раз выше и снижается один раз ниже заданного порогового значения, которое задается переменным резистором.
Если вы хотите использовать для питания устройства «таблетку», помните, что в этом случае будет работать только литий-ионные аккумуляторные батареи типа LIR1220. Обычные батарейки CR1220 не смогут обеспечить достаточной мощности.
Программное обеспечение
ИК-фотодиод подключается к положительному входу внутреннего аналогового компаратора ATtiny13, а переменный резистор для калибровки подключается к отрицательному входу.
Прерывание запускается на каждом заднем фронте выхода компаратора, которое сохраняет текущее значение timer0 и перезапускает таймер. 8-битный таймер расширяется до 16-битного с помощью прерывания переполнения таймера.
Сохраненное значение таймера содержит количество отсчетов за один оборот. Количество оборотов рассчитывается с использованием следующего уравнения:
Полученное значение частоты вращения отображается на OLED-дисплее с шиной I²C. Реализация протокола I²C основана на простом методе передачи битов. Метод был специально разработан для ограниченных в ресурсах контроллеров ATtiny13 и ATtiny10.
Функции OLED адаптированы для модуля SSD1306 128×32 OLED, но их можно легко изменить для использования с другими модулями. В целях экономии ресурсов реализованы только основные функции, необходимые для этого устройства.
Тестер транзисторов / ESR-метр / генератор
Многофункциональный прибор для проверки транзисторов, диодов, тиристоров…
Подробнее
Компиляция и загрузка
Поскольку на плате нет разъема ICSP, вам необходимо запрограммировать ATtiny13 либо перед пайкой с помощью адаптера SOP, либо после пайки с помощью зажима EEPROM.
При использовании Arduino IDE
- Убедитесь, что вы установили MicroCore .
- Перейдите в Инструменты -> Плата -> MicroCore и выберите ATtiny13.
- Перейдите в Инструменты и установите следующие параметры платы:
- Clock: 1.2 MHz internal osc.
- BOD: BOD 2.7V
- Timing: Micros disabled
- Подключите ваш программатор к компьютеру и к ATtiny13.
- Перейдите в Инструменты -> Программатор и выберите ISP-программатор (например, USBasp ).
- Перейдите в Инструменты -> Записать загрузчик.
- Откройте Tacho.ino и нажмите Загрузить .
Диапазон измерения
Диапазон измерения зависит от:
- разрешения таймера / счетчика (здесь 16 бит)
- тактовой частоты таймера / счетчика (CPU clock / prescaler, здесь: 1,2MHz / 64 = 18,75 кГц)
В результате получается диапазон измерения от 17 до 62500 об/мин. Для увеличения диапазона измерения, с одной стороны, тактовая частота таймера должна быть увеличена путем уменьшения предварительного делителя и / или увеличения тактовой частоты процессора, с другой стороны, переменные счетчика и результата должны быть расширены до 32 бит.
Кроме того, процедура OLED_printW должна быть адаптирована так, чтобы 32-битные значения могли отображаться на OLED дисплее.
Точность измерения
Точность измерения существенно зависит от точности внутреннего RC-генератора ATtiny13. Согласно паспорту это +/- 10% при заводской калибровке. Но это можно улучшить до +/- 2% путем ручной калибровки.
Для получения еще лучших значений необходимо использовать точный внешний тактовый сигнал, но это выходит за рамки этого проекта. При высоких значениях числа оборотов в минуту необходимо также учитывать задержку процедуры обслуживания прерывания.
Резюме
Данное устройство задумывалось скорее как образовательный и развлекательный проект, оно дает правдоподобные показания, особенно с откалиброванным осциллятором.
В отличие от коммерческих продуктов, данный тахометр намного меньше по размеру и значительно дешевле. Если вам не нужны сверхточные значения с высоким разрешением, то это устройство для вас окажется полезным измерительным инструментом.
Скачать файлы проекта (42,5 KiB, скачано: 608)
Блок питания 0…30В/3A
Набор для сборки регулируемого блока питания…
Подробнее
Фан-тач-штык | Hackaday.io
Установленный внутри компьютера фототранзистор ATTiny улавливает импульсы вращения вентилятора графического процессора и на основе настраиваемой карты, хранящейся в EEPROM, отправляет ШИМ-сигнал через полевой МОП-транзистор для питания вентилятора корпуса. Последовательная связь обеспечивает мониторинг и настройку.
Детали
Предыстория:
Как и многие проекты, сделанные своими руками, этот начался с простого — с добавления корпусного вентилятора к настольному компьютеру малого форм-фактора (SFF). Причина добавления вентилятора заключалась в том, чтобы отводить дополнительное тепло от разогнанного графического процессора во время периодической большой нагрузки.
Компьютеры малого форм-фактора, как правило, компактны и не имеют дополнительных компонентов, таких как дополнительные разъемы для вентиляторов или место для добавления корпусного вентилятора. Тем не менее, сзади есть место, чтобы повесить 80-мм вентилятор, и после изготовления нескольких алюминиевых зажимов новый корпусный вентилятор плотно прилегает к неиспользуемым слотам.
Вентилятор корпуса легко запитывается от разъема питания вентилятора видеокарты тройником, а в качестве бонуса скорость вентилятора корпуса теперь контролируется видеокартой, что снижает шум вентилятора.
Это расположение отлично работало до недавнего обновления видеокарты. К сожалению, разъемы питания вентиляторов новой карты меньше и не очень доступны. Я должен был бы найти какие-то другие способы вращения вентилятора корпуса.
Покопавшись в ящике с запчастями, я обнаружил ручной контроллер вентилятора, но это означает, что нужно повернуть ручку или оставить вентилятор постоянно вращаться — не то, что я хотел.
Не имея под рукой решения (и не желая ничего покупать), я решил, что это требует карантинного самодельного проекта, в частности, с использованием ATTiny85 (у меня уже есть несколько микросхем) и среды Arduino.
Проект:
После нескольких фальстартов наиболее надежным вариантом является использование ИК-излучателя-детектора для считывания скорости вентилятора графического процессора и установки скорости вентилятора корпуса на основе настраиваемой карты. Для справки, есть довольно много проектов Arduino, использующих ИК-устройства и ограниченных теми частями, которые у меня есть, лучшим устройством в этом случае является ИК-фототранзистор и ИК-светодиод.
Датчик эмиттера-детектора смонтирован на небольшой перфорированной плате и расположен внутри корпуса компьютера с помощью небольшого магнита на холодильник так, чтобы они указывали на вентилятор графического процессора.
Вентилятор графического процессора имеет голографический логотип, который считывается датчиком, но чувствителен к его расположению, вероятно, из-за рассеяния света. К центру вентилятора приклеен более надежный шаблонный диск из белой почтовой этикетки, на ½ обтянутой алюминиевой лентой.
Сводка по эксплуатации:
Установленный внутри компьютера фототранзистор ATTiny улавливает импульсы вращения вентилятора графического процессора и на основе настраиваемой карты, хранящейся в EEPROM, отправляет ШИМ-сигнал через полевой МОП-транзистор для питания вентилятора корпуса. Последовательная связь обеспечивает мониторинг и настройку.
Датчик фототранзистора:
ATTiny pin PB1 подключается к коллектору фототранзистора, а также смещает его с помощью внутреннего подтягивающего резистора PB1. PB1 сконфигурирован как аналоговый компаратор AIN1 и сконфигурирован для запуска прерывания, когда AIN1 падает ниже внутреннего опорного напряжения 1,1 В. Для этой конфигурации полезна библиотека Arduino «analogComp».
Регулятор скорости вентилятора корпуса:
Контакт PB4 настроен как выход PWM OC1B на полевой МОП-транзистор. Используя стандартную Arduino «analogWrite()», можно регулировать скорость вращения вентилятора, но вам не понравится 49Тон 0 Гц, исходящий от вентилятора. Один из вариантов — поднять частоту ШИМ выше диапазона слышимости (20 кГц), но это добавит шум в распознавание AIN1. Лучший вариант снижает частоту ШИМ до 60 Гц. Однако при низкой скорости вращения вентилятора вы услышите «зубчатый» звук. Этот звук исчезает при добавлении конденсатора 100 мкФ для сглаживания ШИМ-сигнала. Как реализовано, частота ШИМ составляет 30 Гц. Полевой МОП-транзистор 2N7000 имеет встроенный обратный диод, который полезен при пульсации двигателей вентиляторов. Вентилятор работает ниже номинальной мощности MOSFET.
Мигающий светодиод:
Он нужен каждому проекту ATTiny, и этот не исключение. Этот светодиод помогает при позиционировании датчика, поскольку светодиод мигает при срабатывании датчика.
Serial Comm:
Библиотека SoftwareSerial предоставляет сервисное меню и отчеты, а также позволяет настраивать операции. Эта библиотека требует, чтобы ATTiny работал на частоте 8 МГц. Я использую адаптер 5V на RS232 на последовательном…
Подробнее »
Посмотреть все детали
fanctl_tiny.inoКод Arduino для проекта Fan-Tach-shtick.я не – 10,66 КБ – 30.06.2020 в 02:21 | Скачать | |
fanctl1.png Схематическое изображение для проекта Fan-Tach-shtick.Портативная сетевая графика (PNG) – 33,26 КБ – 30.06.2020 в 01:57 | Предварительный просмотр | Скачать |
- 1 × ATTiny85 Микропроцессоры, микроконтроллеры, DSP/ARM, микроконтроллеры на базе RISC
- 1 × крышка 100 мкФ
- 1 × 2N7000 Дискретные полупроводники / диодно-транзисторные модули
- 1 × Фототранзистор LTR-306
- 1 × ИК-светодиод
Посмотреть все 9компоненты
1
Конструкция:
Требуется питание 12 и 5 В. В SFF есть только силовые кабели SATA, и, конечно же, у меня нет разъемов SATA. Но у меня есть сломанный диск ноутбука, и я вырезал разъем SATA. Печатная плата настолько тонкая, что здесь подойдут обычные ножницы. Этот взломанный сокет приклеивается к перфорированной плате, а остальные компоненты подключаются вручную.
Плата донора нуждается в обрезке шурфовЭта перфокарта крепится к старому футляру для наушников и готова к установке в компьютер.
ИК-датчик имеет небольшую термоусадку поверх ИК-светодиода, что препятствует отражению света внутри корпуса компьютера. Перфорированная плата датчика крепится к сильному магниту с помощью куска стальной проволоки (подойдет скрепка).
Посмотреть все инструкции