Измеритель индуктивности на микроконтроллере PIC16F1936
- Подробности
 - Категория: схемы на PIC
 - Опубликовано: 02.11.2018 00:11
 - Просмотров: 4280
 
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

