История создания этого проекта весьма своеобразна. Некоторое время назад мне написал один из читателей нашего журнала, который также является любителем старинной аудиотехники. Он попросил помощи в поиске решения некоторой проблемы, которая заключалась в замене механического счетчика оборотов в старом магнитофоне на электронный. Представленная система была создана специально для этого.

Основные параметры:

  • используется для измерения числа оборотов соответствующего механического датчика;
  • поддерживает датчик в виде механического энкодера или в виде двух щелевых оптронов и правильно изготовленного поворотного диска;
  • диапазон измерения: 0…9999 оборотов;
  • напряжение питания: 4...9 В;
  • потребляемый ток: 7 мА (без учета тока нагрузки подключенных оптронов).

Похоже, старые катушечные магнитофоны, а особенно кассетные, сейчас переживают возрождение. Это хорошо видно по количеству предложений на популярных аукционных площадках. Цена на такие устройства значительно выросла за последний год. Оказывается, существует довольно большая группа энтузиастов этого вида оборудования, часть из которых подвергает его модернизациям, вынужденным из-за неэффективности или желания усовершенствовать устройство. Воодушевленный этой задачей, я решил построить очень простое и в то же время небольшое устройство, которое можно было бы адаптировать для вышеупомянутых целей, и в то же время оно было бы настолько универсальным, что его можно было бы использовать в других целях, например для намотки катушек, подсчете людей входящих/выходящих из помещения, подсчет предметов на конвейерной ленте и тому подобное.

Изготовление и эксплуатация

Принципиальная схема показана на рисунке 1. Была построена очень простая, даже тривиальная, микропроцессорная система, которая управляется небольшим микроконтроллером от Microchip (ранее Atmel) с маркировкой ATtiny84A.

Принципиальная схема счетчика

Рисунок 1. Принципиальная схема счетчика.

Источником синхронизации периферии микроконтроллера является внутренний RC-генератор с частотой 1 МГц.

Микроконтроллер выполняет 3 основные задачи:

  • управляет небольшим OLED дисплеем, с разрешением экрана 64х32 пикселей и диагональю 0,49 дюйма, благодаря программной реализации интерфейса I2C;
  • используя встроенный таймер/счетчик Timer1 отслеживает нажатие на 2 функциональные кнопки ПЛЮС и МИНУС, благодаря чему обработка этих кнопок не приостанавливает работу основной программы и позволяет различать короткое и длительное нажатие;
  • поддерживает датчики оборотов в виде механического энкодера или двух щелевых оптронов и правильно изготовленного поворотного диска.

Использование такого небольшого OLED дисплея обусловлено необходимостью минимизировать внешние габариты счетчика, поскольку, как было сказано в начале, он предназначен для замены механического счетчика. Конечно, чтобы подсчет оборотов вообще стал возможен, пользователь должен подготовить соответствующее решение в области механики, которое сводится к тому, чтобы приводной вал, обороты которого мы хотим подсчитать, должен быть сопряжен с механическим энкодером или, что гораздо предпочтительнее (из-за безотказности и долговечности конструкции), оборудовать вращающимся диском с прорезями и двумя расположенными рядом щелевыми датчиками, что позволит считать обороты и различать направления вращения.

Внимательный читатель заметит некоторую необычность реализации схемы питания самого контроллера, в котором задействованы диод Шоттки D1 и электролитический конденсатор С1. Для чего это решение? Как известно, наш счетчик должен заменить механические счетчики этого типа, поэтому он должен запоминать показания после отключения питания. Как это сделать? Проще всего сохранять каждое изменение его значения в EEPROM памяти микроконтроллера, но у такого типа решения есть серьезный недостаток.

Производитель микроконтроллера заявляет, что долговечность памяти EEPROM составляет примерно 100 000 циклов записи, а значит, мы достаточно быстро исчерпаем имеющиеся возможности. Как я решил эту тему? Я решил сохранить значение счетчика при отключении питания, отсюда и необходимость разделения и резервирования системы питания микроконтроллера в виде двух упомянутых элементов. Для определения момента отключения питания использовался АЦП, встроенный в микроконтроллер, работающий в режиме Free Running и контролирующий напряжение питания микроконтроллера (после сбоя питания диод D1 обеспечивает разделение питания микроконтроллера от остального устройства, а конденсатор C1 обеспечивает соответствующее время резервного питания).

Интересно, что на первый взгляд наше устройство никак не использует АЦП, так как ни один из входных каналов не используется им для этой цели. Правда, глядя на принципиальную схему и не имея в своем распоряжении текста программы, можно было сделать такой вывод. Однако это не так. Наш преобразователь АЦП измеряет специальное внутреннее напряжение VBG=1,1 V (значение для микроконтроллера ATtiny84A) из-за того, что внутренний аналоговый мультиплексор преобразователя может быть настроен таким образом. Опорное напряжение, в свою очередь, является напряжением питания микроконтроллера, то есть напряжением, подаваемым на вывод VCC. Падение этого напряжения при отключении питания увеличивает значение результата обработки по следующей формуле (используем 8-битное разрешение преобразователя):

VADC = (VBGx256)/VCC

Процедура обработки прерывания АЦП каждый раз проверяет, не было ли превышено предопределенное пороговое значение вычисления, и если это так, инициирует процесс сохранения значения счетчика во встроенную память EEPROM, а затем ждет, пока напряжение питания не упадет до уровеня сброса микроконтроллера, который предварительно настроен битом BOD (обычно 1,8 В). Упомянутый порог для механизма записи был установлен равным 2,8 В, а это значит, что время падения напряжения питания с 2,8 В до 1,8 В — это время, в течение которого микроконтроллер должен записать значение счетчика — всего 4 байта данных.

Как показали практические испытания, использование вышеуказанного аппаратного решения (диод D1 и конденсатор С1) и программных механизмов обеспечивает 100% эффективность записи данных с очень большим запасом времени. На рисунке 2 показан график зависимости напряжения питания микроконтроллера от времени при выключенном устройстве. Как видно, для прототипа конденсатора С1 емкостью 22 мкФ (емкость изменена на 47 мкФ) было достигнуто доступное время записи 7,6 мс, что почти вдвое превышает время, необходимое для записи памяти EEPROM микроконтроллера (4 мс).

График зависимости напряжения питания микроконтроллера от времени при выключении устройства

Рисунок 2. График зависимости напряжения питания микроконтроллера от времени при выключении устройства

Монтаж и наладка

Схема сборки показана на рисунке 3. Печатная плата небольшого размера была разработана с преобладанием компонентов поверхностного монтажа SMD, установленных с обеих сторон печатной платы.

Схема установки компонентов

Рисунок 3. Схема установки компонентов

Сборку устройства начинаем с нижней стороны, куда припаиваем все пассивные элементы и полупроводники. Затем мы переходим к верхнему слою, где сначала припаиваем микроконтроллер, затем пассивные элементы, затем OLED-дисплей с помощью разъема и, наконец, монтируем разъемы ENC и PWR, а также функциональные кнопки PLUS и MINUS.

Собранное устройство (верхняя сторона) непосредственно перед пайкой OLED-дисплея

Фото 1. Собранное устройство (верхняя сторона) непосредственно перед пайкой OLED-дисплея.

Правильно собранное устройство не требует настройки и должно работать после включения питания. На фото 1 показано устройство в собранном виде (с ВЕРХНЕЙ стороны) до пайки OLED-дисплея, а на фото 2 это же устройство с НИЖНЕЙ стороны. Также стоит упомянуть, что при использовании щелевых оптронов в качестве датчиков вращения не следует устанавливать элементы R3, R4, C6 и C7. Они необходимы только для механического энкодера.

 Собранное устройство (нижняя сторона)

Фото 2. Собранное устройство (нижняя сторона).

Последним этапом запуска устройства является подключение соответствующего датчика к разъему ENC. В случае механического энкодера мы используем 3 контакта разъема ENC: сигнальные, обозначенные цифрой 1 и 2, и общий, обозначенный цифрой 3. В случае щелевых датчиков мы дополнительно используем контакт номер 4, который подает питание для этих датчиков. Разумеется, выход каждого датчика подключается к разным сигнальным разъемам (1 или 2). Наконец, мы устанавливаем параметры устройства с помощью меню.

Настройка битов конфигурации:
CKSEL3...0: 0010
SUT1...0: 10
CKDIV8: 0
CKOUT: 1
DWEN: 1
EESAVE: 0
BODLEVEL2…0: 110

Работа устройства

Данная система используется для измерения числа оборотов связанного с ней механического элемента (с помощью соответствующего датчика), поэтому основной режим работы устройства заключается в отображении числа оборотов. Тем не менее, в связи с тем, что данное решение является достаточно универсальным, имеется соответствующее меню конфигурации, через которое мы задаем аппаратные параметры подключаемого датчика, а также другие значения конфигурации. Меню конфигурации счетчика показано на рисунке 4.

Меню конфигурации устройства

Рисунок 4. Меню конфигурации устройства

Как видите, мы установили следующие параметры:

Цифры – количество цифр, отображаемых на дисплее (3 или 4),
Импульсы - количество импульсов подключенного датчика за один оборот вала,
Наклон – тип фронта, который генерирует датчик (нарастающий, спадающий).

Дополнительным нерегулируемым пунктом в этом меню является пункт Тест. Он обеспечивает правильное взаимное расположение подключенных щелевых датчиков, так что каждый из них в заданном положении выставляет на выходе различное логическое состояние. Ожидаемые значения: LH или HL. Это необходимо для правильного подсчета и определения направления вращения двумя щелевыми датчиками, расположенными рядом друг с другом и управляемыми одним и тем же щелевым колесом. Возможно, потребуется модифицировать стандартное колесо с прорезями и его соответствующее положение по отношению к датчикам с прорезями, которое должно быть выбрано экспериментально. Способ работы с устройством и назначение отдельных функциональных кнопок показаны на рисунке 5.

Как использовать устройство

Рисунок 5. Как использовать устройство

При выходе из системы меню все параметры конфигурации сохраняются в энергонезависимой памяти EEPROM микроконтроллера. Также стоит подчеркнуть, что при обычной работе счетчика я ввел очень эффектный анимационный эффект, напоминающий работу старых механических счетчиков, где смена знака сопровождалась сдвигом одного знака вверх или вниз, а следующего символ, прыгающий на свое место (в случае со счетчиками это были, конечно, цифры). Должен признать, что выглядит это на удивление эффектно.

Автор: Robert Volgaev


Файлы к статье "Счетчик магнитной ленты на ATtiny84"
Описание:

Файл прошивки микроконтроллера

Размер файла: 4.64 KB Количество загрузок: 15 Скачать