И вот тут началось самое интересное. Поразмыслив над схемой получения констант усиления для датчиков тока, напряжения и пульта управления я решил не связываться с программной реализацией последовательного порта, а делать тупой опрос датчиков с сохранением в EEPROM. Для того чтоб более-менее ориентироваться в полученных данных туда же пишется и номер датчика (вернее входа АЦП контроллера), но реально в этом острой необходимости не было, это было скорее для самоуспокоения. Когда программа была написана и схема в общих чертах собрана выяснилось, что контроллер опять не видится программатором. Мучал я его долго, результата не было. Все цепи, которые хоть как-то могли влиять на сигналы внутрисхемного программирования были отпаяны, провода проверены мультиметром, но контроллер не отвечал. В качестве последнего аргумента я расчехлил свой логический анализатор чтобы посмотреть, что там происходит на шине.
И вдруг контроллер отозвался. Первоначально возникла идея, что анализатор спектра входной емкостью затягивает фронт тактового импульса, что компенсирует некие задержки, которые вносят элементы на плате, но после серии экспериментов выяснилось, что достаточно оставить один щуп, подключенный к контакту по которому данные идут от программатора к контроллеру чтобы контроллер продолжал отзываться. Попытки пропаять все вокруг этого вывода к успеху не привели. Суммарно было убито больше рабочего дня, а на выходе оказалось, что плохо пропаян вывод питания контроллера. При прозвонке он прижимался к плате и соединение звонилось, а потом отходило снова. А щуп, подключенный к выводу с противоположной стороны корпуса приводил к микроскопическому изгибу то ли платы, то ли самих выводов и контакт замыкался — контроллер отзывался нормально. После пропайки все заработало штатно. Прошивка была залита, константы вычислены.
Потом пошел процесс отладки частей схемы и прошивки, отвечающих за взаимодействие с внешним миром. Одной из больших проблем, как оказалось, была невнимательность и изменение номеров выводов при отладке платы. Сначала она тупо отказывалась опрашивать клавиатуру, пока я не заметил, что клавиатуру я ищу не на том входе АЦП, а потом она отказывалась пищать по той же, собственно, причине. Номер вывода надо было поменять в двух местах — у аналоговых и цифровых выводов разная нумерация. После того как эти проблемы были выявлены обнаружилась еще одна — в одну сторону двигатель запускался и крутился нормально начиная от 3,3В, а в другую запускался только на 4,0В. Это меня не устраивало, пришлось копать вглубь.
Достаточно быстро выяснилось, что при включении двигателя в неработающем направлении кроме нужных транзисторов открывается еще и ненужный «верхний» транзистор, причем открывается не полностью. После долги копаний и попыток снизить сопротивление «запирающего» резистора в цепи затвора этого транзистора я решил более внимательно посмотреть на поведение «нижних» транзисторов. Получалось что на правильно работающем транзисторе в открытом состоянии падают десятки милливольт, а вот на «неправильном» транзисторе — около полувольта. Что в свете относительно небольшого напряжения питания схемы и приводил к таким странным эффектам. Замена транзистора на другой «с полочки» проблему полностью решила.
После того, как все заработало согласно плану, началось утрамбовывание деталей в корпус. От первоначального плана с размещением платы управления на дне шасси пришлось отказаться — получалось невнятное и неустойчивое размещение аккумулятора. Поэтому компоновка поменялась, плата ушла в пространство над двигателем, аккумулятор по диагонали на дно, а в передних нишах шасси разместились выключатель питания и пищалка. Для придания жесткости конструкции туда же была вклеена распорка из толстого медного провода.
Важным моментом было обеспечение заряда аккумулятора без разборки корпуса. Прожевав несколько идей я остановился на двух мощных контактах в нижней части корпуса, за которые можно уцепиться «крокодилами» от зарядки. При нормальном использовании машинки они мешать не будут. Выключатель питания оказался достаточно развесистым — два положения на два направления, что позволило подключать контакты заряда только при выключенной машинке. Это не столь принципиально, но может быть когда-нибудь и пригодится.
Итак машина собрана и работает. По результатам сделано несколько выводов:
- паяльник надо менять на нормальный, этим монстром паять SMD-компоненты просто неудобно;
- при разводке платы надо четко учитывать размеры конкретного посадочного места под компоненты, они далеко не всегда взаимозаменяемы, даже если похоже;
- не всякая успешная прозвонка цепи свидетельствует о том, что цепь в порядке.
Ну и в качестве общего рассуждения в приложении к будущим схемам управления питанием — имеет смысл попробовать вариант схемы с кнопкой, шунтируемой MOSFET’ом, что позволит полностью обесточить схему, а не пищать до потери пульса в надежде, что кто-то придет и выключит выключатель. Следующая по плану схема — блок управления вентилятором дымоуловителя, на нем и попробую.