Всем привет, после прототипирования клона термопро ик 1-10 кд про на ардуино и макетке из прошлых моих постов про контроллер, захотелось сделать без колхоза, тут я расскажу о схемотехнике оригинальных контроллеров, присутствуют интересные решения, так же о тонкостях при создании своего клона, итак требования:
1. Полная схемотехническая копия плат, чтобы детали были взаимозаменяемы с оригинала на мой и обратно.
2. Полная совместимость по монтажным отверстиям для кнопок, отверстий для крепления в корпусе.
3. Использовать такой же микроконтроллер, как и в оригинале(stm32f103cbt6/gd32f103cbt6).
4. Реализовать все функции доступные в оригинале.
Оригинальный контроллер состоит из трех плат:
1. Основная плата, где распложены кнопки , дисплей и непосредственно сам микроконтроллер:
2. Вторая плата, на ней расположен трансформатор для питания всего контроллера, симистор и moc3063, из фоток к сожалению только распаянная:
3. Ну и третья платка с преобразователем uart-usb и разъемом подключения к пк(ее фотки у меня не осталось, как и самой платы).
Начал я с отрисовки схемы, основной платки, хотя можно было бы сделать 1 в 1 кинув на сканер, но захотелось развести самому, вот схема, которая у меня получилась:
Схема с некоторыми упрощениями, но полностью рабочая, из интересного это реализация опроса матрицы кнопок, задействованы те же GPIO микроконтроллера, что и для записи информации в дисплей, соответственно отсюда вытекает прикол, если нажать две кнопки, которые буду на одной строке например как на фото
То на дисплей информация будет передана некорректно, появятся артефакты как на видео, а еслт сильно постараться, то придется перезапускать контроллер
Так же интересно реализована работа с памятью, так как отдельной eeprom на плате нету, а так же нету у самого stm32, то запись настроек происходит во flash память, но вопрос когда? Сразу после изменения параметра? Или спустя некоторое время? В ходе экспериментов было выяснено, что настройки запоминаются прямо во время выключения, а сделано очень хитро, на схеме есть gpio у микроконтроллера, который я обозначил как STBY:
Так вот функции у него две, детект переходя сетевого напряжения через ноль, для этого к этому входу подключен транзистор и rc цепочка, и напрямуб к выводу трансформатора, я обозначил как 6VAC1, вот осциллограмма:
Желтый сигнал непосредственно на пине STBY относительно земли, а голубой с вывода трансформатора, относительно земли, так вот получается частота 50гц, соответственно когда мы выключаем контроллер, 50гц с ножки мк пропадают и тот начинает запись параметров, заряд конденсаторов на плате еще остается и этого хватает для записи параметров во внутреннюю флэш. Довольно интересное решение. Ну а теперь мой вариант разводки платы, далеко не супер, делалось ночами и на скорую руку:
Из того что убрал: разделение питаний аналогового на термодатчики и цифрового, в оригинале между ними стоит дроссель, я его не стал применять, смысла в нем не увидел, так же убрал защитные диоды по входу с термодатчиков, тоже смысла нет, особо они не спасут. На схеме этих элементов у меня тоже нет, в остальном все схоже.
Следующей отрисовал плату с трансформатором и симистором, ее схемы особо нету, ибо она очень простая, рисовал буквально без схем:
Ну и следом плата с преобразователем uart-usb:
Ну а дальше готовые платки приехали:
Заказал сразу несколько комплектов:)
Вот сравнения моих плат и оригинала:
Вроде неплохо, перекинул все детали на свои, в том числе и родной мк для проверки плат на наличие ошибок, все заработало, не без косяков конечно, но там буквально по мелочи:)
Ну а дальше самая сложная часть, написание прошивки)
заняло больше всего времени, но по итогу результат неплохой:
1.Запоминание параметров перед выключением как и в оригинале
2. Полностью реализован протокол обмена с термопроцентр, смена языка, звуковые метки в контроллер, в том числе и ограничение диапазонов уставки, в прошлом прототипе я этого не делал.
3. Управление симистором с помощью алгоритма Брейзенхама, работает благодаря тому же сигналу на пине STBY, получилось прикольно.
4. Поправил отслеживание нажатия двух кнопок в строке, если контроллер это детектит, то дисплей перезагружается, в целом в 8 случаях из 10 артефактов как на видео на оригинале у меня нету, а так же срабатывание кнопок сделано не по нажатию, а по отпусканию, в оригинале же по нажатию, соответственно как тока кнопку нажимаем, сразу запись в дисплей, но если нажаты две, то запись белеберды) у меня такого нет.
5. Реализовал полуапаратный параллельный протокол для работы с дисплеем lcd1601, кто разбирается - знает, что там очень большие задержки нужны, они сильно тормозят код, у меня же нет:)
Вот собранные мои платки и контроллер:
Ну и пару прогонов с него:
Довольно неплохо работает сам пид:) остается изготовить копию корпуса и наклейки, пока что собрано в оригинальном корпусе. Вот кстати как это выглядит в корпусе:
По итогу полная совместимость, моя прошивка подходит в оригинальные контроллеры))) как и все детали на плате, полный клон.