2620

Пишем свой софт для посудомоечной машины ч. 1. Реверс-инжиниринг1

Серия Делаем автоматику

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

Итак, попала ко мне в руки вышедшая из строя посудомоечная машина. Было выяснено, что её агрегаты (соленоиды, насосы и т.д.) находятся в исправном состоянии. Вышел из строя сам контроллер, где находится программа для управления этими приборами. Что, скажу я вам, весьма серьёзная ситуация - ведь без этого контроллера большая и дорогостоящая машина подлежит отправке на помойку. В интернете я уже видел подобные проекты, но они были сделаны как-то халтурно, не уверен, что они вообще работали. Для написания подобного ПО в производственных условиях программисту уже должны быть даны технические параметры всех приборов и назначение выводов. Но у нас нет ни оригинального контроллера, ни исходников. Поэтому нет никаких шансов восстановить заводское ПО. В таком случае, будем писать своё. Но для начала необходимо изучить, что собой представляет машина - ведь у нас нет практически никаких данных, все провода для нас отличаются только цветом. Первым делом, выпаиваем старый, вышедший из строя контроллер:

Далее, мы видим на плате микросхему ULN2003 (моя называется иначе, но 2003 в названии сути не меняет). Подпаяем к прибору специальную платку (состоит из резисторов и блока переключателей):

Итак, из даташита мы знаем, что микросхема ULN2003 имеет семь входов и семь выходов с инвертированием сигнала. Сделано это для удобства подключения к реле - при подаче логической единицы 5В на вход микросхемы, выход подтягивается к земле и в катушках реле начинает течь ток. Мощный прибор, подключенный к реле, включается в работу.

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

1. Запуск центробежного насоса (ЦН) на большой скорости
2. Запуск ЦН на малой скорости (половинная загрузка?)
3. Открытие входного клапана (залив воды)

4. Открытие дозатора моющего средства
5. Включение соленоида, находящегося в баке с солью
6. Включение сливной помпы
7. Включение ТЭНа для нагрева воды.

Теперь стала понятна суть выходного регистра. Далее, была очередь за входным - вот тут сложнее, ибо понять, какой провод за что отвечает было очень сложно. Но, как не зря кстати, совершенно случайным образом мне была ниспослана с неба монтажная схема на этот прибор. Она многое прояснила.

Выявленные опытным путём выводы соответствуют указанным на схеме (выходы - внизу прямоугольника). Однако, также полно внесистемных обозначений. Например, что такое FM? ISS? Это всё пришлось выяснять опытным путём. В результате, спустя некоторое время, схема выглядела уже так:

Входы расположены следующим образом:

1. RE - вход терморезистора (на 9,7КОм), установленного в баке с водой. Он контролирует температуру воды, нагреваемой ТЭНом. Константа зависимости сопротивления от нагрева для него неизвестна (утеряна в заводской прошивке), её предстоит выяснять опытным путём в следующих постах. Пока опустим его. Вход аналоговый.
2. FM - Fluid Meter. Датчик воды. Представляет собой геркон с магнитом, который размыкается при заполнении бака. Вход цифровой.
3. IAQS - датчик (микрик) аквастопа. При его активации включается режим аварии и отключаются все приборы. Вход цифровой. Его мы тоже пока опустим.
4. +5V и ISS. Питание датчика соли. Он выполнен на компраторе LM339, вход цифровой.
5. ISB - неизвестный переключатель, находящийся в дозаторе моющего средства. Его расположение выяснять не стал, для тестового запуска он пока не нужен. Вход также цифровой и опустим его.
6. DOOR - датчик двери (замок). Работает аналогично IAQS.

P1 - пресловутый прессостат, но он в данной машине к модулю не подключается, а работает независимо.

Итого, имеем 4 на данный момент важных входа:
1. RE - его реализуем позже через полумостовую схему измерения
2. FM - проверяется через подтяжку линии к 5В через резистор 10K на плюс питания и 2K к самой линии.
3. ISS - аналогичным образом
4. DOOR/IAQS (их пока можно объединить) - аналогичным образом.

От себя также добавлю 2 кнопки (питание и служебная кнопка), и 6 выводов для работы дисплея 1602 (включен в полубайтном параллельном режиме).

Таким образом, мы определили, что к выбираемому контроллеру для данной машинки предъявляются следующие требования:

1. Наличие 14 и более I/O портов для всех агрегатов (выходной регистр, входы, также для подключения дисплея 1602, которого не было в оригинальной схеме)

2. Наличие на борту таймеров (непосредственно для работы отсчёта времени)

3. Наличие АЦП (для обработки показаний термодатчика)

4. Возможность подключения кварцевого генератора для обеспечения стабильности схемы

Собственно, ничего серьёзного. Подойдёт контроллер ATMEGA8 (но т.к. он уже сильно устарел, заменим на любимый китайцами и ардуинщиками ATMEGA328, они полностью совместимы). Скажу сразу, Arduino в данном проекте мы не используем, пишем на чистом AVR.

Когда контроллер выбран, настало время подготовить плату и приборы для отладки. Начнём с того, что подготовим тестовый стенд для ИМС. Запаяем её и некоторые DuPont пины.

Было / стало:

Далее, подготовим аппаратные имитаторы агрегатов машинки. Кто-то скажет, что отладить можно было и в электронном виде, на что я скажу да, можно. Но часто бывает, что в симуляторе не выявляются некоторые косяки, такие как дребезг кнопок, наводки и т.д., т.к. условия там слишком приближены к идеальным. Плюс ко всему, прибор не очень громоздкий, так что можно изготовить "набор для отладки". Состоит он из платы с микросхемой ULN2003, имитирующей работу нашего модуля и агрегатов (но вместо них установлены светодиоды). Второй модуль состоит из 2 кнопок и 3 переключателей, имитирующих наши важные датчики, также, туда будет установлен терморезистор

Для оптимизации схемы некоторые доработки выполнялись "на соплях" прямо на дисплейном модуле:

Вот так вся эта отладочная установка смотрится после сборки. Выходной регистр назначен на порт D (используется 7 выводов из 8), дисплей - на порт B (6 выводов), входной регистр - на порт C (неполный, 6 выводов):

Подписаны светодиоды, имитирующие приборы и все кнопки с переключателями. В таком виде схему можно отлаживать. Предусмотрено внутрисхемное программирование, сразу накинут кварц на 6 МГц (какой нашел, потом, возможно, поменяю). Для испытания на машинке достаточно будет отпаять с модуля блок переключателей, и установить туда также DuPont штыри, к которым будем подключать макетную плату легко и просто без изменений в схеме. В дальнейшем по завершению испытаний отладочные платы убираются.

Теперь создадим проект под эту схему. Сразу же инициализирую git-репозиторий. Пока что лишь маленькая программка "бегущие огни" на задержках для проверки правильности проводки.

Тут уже вылезли косяки: как выяснилось, две абсолютно новые непаянные ATMEGA328P, лежавшие у меня несколько лет, тупо отказались прошиваться. Судя по всему, вышли из строя от лежания. Такой подлянки я от них не ожидал - ведь стоят сейчас достаточно крупных денег. Пришлось перепаивать три раза сам контроллер с переходника, в итоге выдрал из какой-то ардуины более-менее рабочий. После чего плата завелась. Судя по всему, для решения дефицита комплектующих придется где-то раздербанить немного ардуинов.

Программа запустилась, порты были подключены верно, все приборы успешно запитаны, но дисплей пока не инициализирован. Проверено питание модулей и работа переключателей. Видно, что светодиоды успешно горят, значит, мы на финишной прямой.

Дальнейшие задачи по этому устройству, в основном, программные и заключаются в следующем (будем выполнять во второй части поста):

1. Инициализировать аппаратный таймер, отмеряющий время работы конкретного агрегата
2. Инициализировать дисплей для вывода тестовой информации о состоянии машины
3. Написать тестовую программу, которая позволит залить воду в бак машинки, прогнать её насосом без нагревания в течение 5 минут, после чего слить воду.

В дальнейшем:
- Инициализировать АЦП для корректной работы термодатчика и ТЭНа (какое мытьё посуды без нагрева воды)
- Реализовать функцию паузы / аварийного слива
- Реализовать открытие отсека моющего средства в программе
- Индикация отсутствия соли (вывести с датчика на дисплей)
- Реализовать аквастоп/остановку по замку

Более сложные заморочки, такие как выбор программы под разную посуду, подгонка времени и напора воды под конкретное моющее средство пока реализовывать не планирую, ибо эти фичи, как правило, нужны уже конечному потребителю (да и то не всегда). Для минимальной же работоспособности прибора сойдут и ранее перечисленные функции. Подключение модуля и первые натурные испытания 7-минутной тестовой программы также в следующем посте. Пока что наше изделие ещё не переросло уровень "Ардуина щелкает, светодиодами мигает", но это всё в скором времени поправимо.

А пока всё, с вами был Kekovsky, спасибо всем кто дочитал (если кому-то это интересно). Своё мнение по поводу проекта пишите в комментариях.

Вы смотрите срез комментариев. Показать все
1
Автор поста оценил этот комментарий
Опять какой то негатив в сторону ардуины. Што мешает писать код на регистрах в ней? она их поддерживает из коробки без танцев с бубном для (avr) точно. тем более для последующей перепрошивки уже будет проще использовать usb шнурок, а не таскать программатор. Залежалые мк , это конешно сильно 🤣. А так маладец канешно
раскрыть ветку (17)
0
DELETED
Автор поста оценил этот комментарий

Честно говоря я сам тот ещё ардуинщик)) Иногда юзаю когда лень возиться с портами. Но народ не очень любит

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Олег, разлогинься)
0
Автор поста оценил этот комментарий

Ардуино хорошие платы, бывает покупаю на атмегах. Но нафига быть ардуинщиком, когда можно прошить мегу)))

раскрыть ветку (14)
0
Автор поста оценил этот комментарий
а причем тут ардуинщик? прошить мегу через бутлодер гораздо проще чем через программатор, особливо когда ноги спи заняты, и надо доставать чип из за этого?
раскрыть ветку (13)
0
Автор поста оценил этот комментарий

Гораздо проще когда бутлоадер поддерживает тот же интерфейс, что и само устройство и все устройства можно прошить разом без дополнительных проводов. А ардуиновский бутлоадер чисто память занимать.

раскрыть ветку (12)
0
Автор поста оценил этот комментарий
что может быть лучше чем воткнуть юсб и вуаля? или для экономии конверторов, использовать ттл уарт? даже на стм32 и его китайских клонах имеется встроенный бутлодырь на уарт, когда нет ст линка, стмку всегда можно прошить без программатора.
раскрыть ветку (11)
0
Автор поста оценил этот комментарий

Не спорю, что там тебе удобнее, но касательно твоего вопроса "что может быть лучше чем воткнуть юсб и вуаля?"

- ничего не втыкать и вуаля!

раскрыть ветку (10)
0
Автор поста оценил этот комментарий
глупость не пишите. я так понял вы не в теме и при этом пытаетесь контраргументировать. смысл?
раскрыть ветку (9)
0
Автор поста оценил этот комментарий

Не в теме ардуиновского софта. И написал, что не спорю. А бутлоадер у нас свой, с блекджеком и RS485. И какой смысл мне доказывать, что юсб удобнее?

раскрыть ветку (8)
0
Автор поста оценил этот комментарий
причем тут дуиновский софт? он просто готовый к использование и миллионы раз обкатанный. многие нынешние погромисты не знают и не помнять, как гудели форумы в попытках заюзать бутлодер на 2313 и подобных, с прикручиванием libusb, штоп не было ебли с 5 проводками и прочими погромматорами
раскрыть ветку (7)
0
Автор поста оценил этот комментарий

Пользуйся, кто не даёт... А можно я не буду?

раскрыть ветку (6)
0
Автор поста оценил этот комментарий
ладно не рефлексуй. заливать прошивку по rs485, маньячество
раскрыть ветку (5)
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества