Измеритель индуктивности на микроконтроллере PIC16F1936

Рейтинг:  0 / 5

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

Lukas Fässler
Статья [1] с описанием простой конструкции цифрового прибора для измерения индуктивности, в основе которого была плата Arduino Uno. Этот вариант прибора, по отзывам пользователей, хорошо зарекомендовал себя в работе, но для повседневного использования, возможно, вы хотели бы иметь, нечто похожее на мультиметр. Поэтому было решено разработать новую версию прибора, которая питается от 9-вольтовой батареи и помещена в пластиковый корпус, напечатанный на 3D принтере (Рисунок 1).


Рисунок 1. Измеритель индуктивности на микроконтроллере PIC.
В статье мы рассмотрим конструкцию автономного измерителя индуктивности. Принцип измерения индуктивности остался прежним. Все проектные файлы доступны для скачивания в разделе загрузок.
Прибор выполнен на микроконтроллере (МК) Microchip PIC16F1936. Этот выбор не связан с какими-то особенностями данной модели, просто такие МК остались у автора от прошлых проектов. Была даже мысль использовать ATmega328 – тот самый МК, который установлен на плате Arduino Uno. Но для измерения частоты и управления ЖК-индикатором ATmega328 слишком избыточен. Кроме того, он несколько дороже микроконтроллера PIC. Поэтому, несмотря на то, что переход к совершенно другому МК означает написание программного кода с нуля, было принято решение использовать PIC16F1936.
Принципиальная схема измерителя индуктивности изображена на Рисунке 2. Как видите, входная часть прибора (LC-генератор, преобразователь синусоидального сигнала в прямоугольный, делитель частоты), а также схема управления, включая цепь подавления дребезга контактов кнопки, идентичны версии измерителя на Arduino, поэтому для понимания работы схемы и ее характеристик рекомендуется обратиться к статье [1]. Что касается питания, то в схему варианта на МК PIC введен дополнительный регулятор напряжения 5 В серии LM2931-5.0. Выходной сигнал SLOW_FREQ с делителя частоты поступает для обработки непосредственно в микроконтроллер (порт RB0).

Рисунок 2. Принципиальная схема автономного измерителя индуктивности на
микроконтроллере PIC16F1936.
Теперь о ЖК-индикаторе. В данном случае применен Midas MCCOG21605B6W-BNMLW – достаточно компактный символьный ЖК-индикатор, синий с белой подсветкой, имеющий две строки по 16 символов. Он управляется по интерфейсу I2C (порты МК RC3, RC4), но еще дополнительно используется вход сброса RST (порт RC2).
С точки зрения высокоуровневого программирования, программный код очень похож на скетч для версии прибора на Arduino. Но если взглянуть поближе, вы увидите несколько отличий, связанных с изменением аппаратной части:
    • Используется совершенно другой МК: PIC16F1936 вместо Atmega328.
    • Код написан на Си в компиляторе mikroC для микроконтроллеров PIC компании mikroElektronika, а не в стиле Arduino Си++.
    • Дисплей, используемый в этой версии прибора, имеет интерфейс I2C, а не обычный параллельный интерфейс контроллера Hitachi.
При написании кода, как и ожидалось, много времени ушло на реализацию управления ЖК индикатором, а точнее, его контроллером. Похоже, что интерфейс I2C реализован в нем как надстройка для основного Hitachi-совместимого контроллера. Сама по себе такая концепция была бы неплоха, если бы не одно «но» – техническое описание дисплея. И если бы не предыдущий опыт работы с другими графическими дисплеями Midas, совместимыми с Hitachi, автору пришлось бы отказаться от его использования в устройстве. Вот примеры недостатков технического описания, из-за которых возникли проблемы при написании части кода для управления ЖК-индикатором:
    • В документе нет нумерации страниц. Да, это незначительный недостаток, но вы когда-нибудь видели техническое описание с непронумерованными страницами?
    • Имеется вход сброса. Аналогично многим сигналам сброса различных контроллеров, активный уровень сигнала низкий. В техническом описании об этом не сказано ничего.

    • Очень подробно рассмотрены некоторые функции контроллера Hitachi, но ни слова о том, что эти функции недоступны через интерфейс I2C.
    • Как и всем дисплеями с контроллерами, совместимыми с Hitachi, ЖК-индикатору Midas требуется время на запуск и инициализацию. В противном случае вы просто не сможете с ним работать. Но прочитать об этом, опять же, вы не сможете.
Но, в конце концов, все заработало прекрасно. Для этого измерителя у МК более чем достаточно ОЗУ, Flash-памяти и вычислительной мощности, поэтому не стоит ожидать, что код будет каким-либо образом оптимизирован. Этого просто не нужно. Бóльшую часть математических операций он выполняет с плавающей точкой, что «раздувает» размер скомпилированного кода и очень тормозит его выполнение, но для нашей задачи этого вполне хватает и оставляет неиспользуемым порядка половины доступного объема Flash и ОЗУ.
а)
б)
Рисунок 3. Корпус измерителя индуктивности.
Корпус прибора был спроектирован в среде FreeCAD (Рисунок 3). Это, как следует из названия, бесплатный инструмент с отрытым кодом, простой и понятный в изучении.

Рисунок 4. Внешний вид печатной платы измерителя индуктивности
с установленными компонентами.
Двусторонняя печатная плата проектировалась в Eagle под микроконтроллер в корпусе SOIC (Рисунок 4). Проектные файлы также доступны для загрузки.
 Принципиальная схема (Eagle, PDF), проект печатной платы (Eagle, PDF), библиотека элементов для FreeCAD, Gerber-файлы для производства печатной платы, исходный код и прошивка
Журнал РАДИОЛОЦМАН, май 2018
Ссылки
1. Измеритель индуктивности на Arduino
2. Datasheet Microchip PIC16F1936

Комментарии  

#1 aron20132TT 14.11.2018 08:42
ура-ура.... аффтара сенкс!

Оставлять комментарии могут только зарегистрированные пользователи

Яндекс.Метрика Рейтинг@Mail.ru Счетчик тИЦ и PR