У меня есть друг, который говорит, что если посчитать количество часов потраченное на изготовление этого прибора, то дешевле купить самый дорогой. Я конечно с ним не согласен, но не буду долго останавливаться на этой провокационной теме. Скажу лишь, что по времени, разработка и изготовление этого прибора заняла около 30 часов. Я использовал детали которые были у меня в наличии, в том числе датчик влажности, был куплен только аккумулятор. Для меня подобные проекты нужны ещё за тем, чтобы прокачать навыки, узнать что-то новое, и получить прибор на свой вкус.
Прибор нужен был автономный, с временем автономной работы около 12 часов. Соответственно схема питания USB-> контроллер заряда -> повышающий преобразователь до +5 В. Питание выбрал 5 В, так как датчик влажности, имеющийся в наличии (HIH-4010-004), калиброван при питании 5 В. При покупке к датчику прилагалась распечатка, со всеми константами для расчета RH% по выходному напряжению, для достижения точности измерения влажности ±3.5%.
Тема датчиков влажности - это отдельная тема. Если коротко, оказалось, что они очень нежные. На HIH-4010-004 в datasheet есть запись, что долгая эксплуатация при влажности более 90% может привести к сдвигу показаний на 3% . А вот для более новых датчиков HDC2080 от TI указано, что рекомендуемый диапазон влажности для работы, от 20% до 80% при температуре воздуха от 0° до 60°. Если долго эксплуатировать датчик за пределами этого диапазона, то используемый в датчике полимер будет деградировать, и показания будут сдвигаться с долгим временем восстановления.
В 2014 году Cypress устроил промо, на микроконтроллеры. PSOC 4200 можно было купить за $1 с бесплатной доставкой, в том числе и в Россию. И я не устоял и прикупил пару десятков в QFP корпусе и десяток в SSOP.
Микроконтроллеры примечательны тем, что помимо Cortex-M0, 32KB EEPROM и 4K RAM, у них на борту присутствовало четыре UDB блока (вариант программируемой логики), в каждом из которых было два PLD (Programmable Logic Device) и 8 битное ALU с возможностью выполнять до 8 команд в цикле, работающее на тактовой частоте процессора 48 МГц. Так как в своих прошлых проектах часто надо было городить мелкую логику вокруг контроллера, тема UDB меня привлекла.
Также на борту микроконтроллера был необычный контроллер LCD, он позволяет управлять мультиплексными LCD индикаторами, не как обычно, используя для формирования напряжения смещения резистивные делители, а используя ШИМ. Для LCD с количеством разрядов до 4 есть еще более экономичный режим Цифровой Корреляции.
Как оказалось, изображение получается достаточно контрастным. В данном приборе применил регулировку контрастности в зависимости от температуры. Всего 3 ступени, меньше 0°, от 0° до 30° и больше 30°.
Схема и печатная плата разработаны с помощью программы Eagle. Плата разрабатывалась для изготовления дома, поэтому такие огромные переходные отверстия.
По программе, работа с датчиком DS18B20 организована через UART в прерывании, поэтому пришлось тактовую частоту микроконтроллера сделать 24 МГц, чтобы получить целые делители для скоростей 9600 и 115200. Разница в потреблении на 6 МГц и 24 МГц - 4 мА. Наверное можно было как то выкрутиться и сделать минимальную тактовую частоту, но я не стал возиться, так как для данного прибора не предполагалось долгой автономной работы.
Преобразование измеренного напряжения датчика влажности в RH% сделано в целых числах, с учетом напряжения питания и температурной компенсацией. В моем случае напряжение на выходе повышающего преобразователя оказалось 5.16 В. По этой причине, и по причине того, что у каждого датчика HIH-4010-004 свои калибровочные константы, прошивка для микроконтроллера на Git не размещена. Так как среда разработки PSOC Creator абсолютно бесплатная, а скомпилировать прошивку можно с помощью GCC компилятора, это не должно стать проблемой.
В приборе не предусмотрен тумблер включения питания, поэтому я старался предусмотреть все возможные отказы, в том числе замыкал пинцетом выход DS18B20 на землю. В программе сделал как обработку ошибок в прерывании, так и перезапуск UART по тайм ауту и естественно использовал Watch Dog таймер на случай непредвиденных зависаний самого микроконтроллера.
Напряжение батареи отображается угловым знаком подчеркивания под каждым разрядом, диапазон 3 - 4.2 вольта по 0.15 вольта на каждый сегмент.
Кнопка в приборе используется только для включения и выключения, думал сделать меню настроек, менять период автоотключения, контрастность, сделать контроль напряжения батареи цифрами. Но когда сделал регулировку контрастности по температуре, понял, что меню не особо и нужно, время отключения сделал фиксированное 60 минут.
При длительном нажатии единственной кнопки или спустя 60 минут после включения, микроконтроллер уходит в режим «STOP» . Микроконтроллер потребляет в режиме «STOP» всего 80 нА. Так как в режиме «STOP» у микроконтроллера выходы «замораживаются» , контроллер LCD заранее отключаем, а на выводе ENABLE импульсного стабилизатора устанавливаем 0, тем самым отключаем стабилизатор и датчики.
И немного техно обнаженки.
Сразу хочу сказать, что я чистюля, и мою платы в изопропиловом спирте по нескольку раз. Но с этой платой случай особый, во-первых стекляшка LCD не любит растворители, во вторых начитался про датчик влажности HDC2080, что ни в коем случае, ни в чем, нельзя отмывать плату после пайки. Только безотмывочные флюсы и паяльные пасты. Поэтому наблюдаются остатки флюса на плате после отладки. Один проводок на обратной стороне - это косяк в разводке платы (косяк устранен). Второй был припаян на момент отладки без датчика DS18B20, так как ножки датчика служили соединителями дорожек между слоями, да так и был оставлен.
Корпус датчика нарисован в Компас 3D и распечатан на 3D принтере. До сих пор не придумаю, как сделать нормальные защелки для соединения двух половинок корпуса, поэтому просто засверливаю с торцов и креплю маленькими шурупами.
Сверловка платы на CNC станке, программы для сверловки и фрезеровки сделаны в FlatCam из Gerber файлов, сгенерированных Eagle. Фотошаблон напечатан на лазерном принтере, выдержан в парах ацетона 20 минут, после чего стал достаточно чёрным для изготовления печатной платы с помощью фоторезиста.
Вообще тема домашнего изготовления сейчас не очень актуальна, но когда надо сделать одну не сложную плату, а ждать посылки из Китая не хочется, очень выручает данный навык. У меня способ отработан уже годами, делаю походя, занимаясь параллельно другими делами, если есть интерес, пишите в комментариях, напишу отдельную статью на эту тему.
Файлы вместе с исходниками на GitHub
McHummer1
Напишите статью про программирование под cyppress'овские чипы. Не нашел в интернете почти ничего на эту тему
Solgo Автор
Тема программирования чипов Cypress очень обширная. В планах была статья про создание компонента на UDB для реальной конструкции, так как в этом и есть их главная изюминка.