Мой персональный блог

Мой персональный блог

Мои разработки и не только…

Китайская машинка на шнурочке. Часть 2

Работа несколько затормозилась, но постепенно движется. Закончив с базовыми экспериментами с Н-мостом, я перешел к сборке общего макета для обкатки всей системы в сборе. По большому счету пришлось только добавить механизм опроса клавиатуры и генерации противного писка при нештатных ситуациях.

Более-менее полный макет. Версия 1.1

Более-менее полный макет. Версия 1.1

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

Пульт управления

Пульт управления

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

Отладочное "сердце" системы

Отладочное "сердце" системы

Пока шла отладка для упрощения жизни использовалась плата Arduino. С нее проще всего снимать отладочную информацию в условиях отсутствия нормального внутрисхемного отладчика. После завершения первой серии испытаний плата была заменена на макетку с ATMega48, которая замечательно помещался на отладочной плате и питалась прямо с нее, что не получалось сделать с платой Arduino. Подключив один из запасенных аккумуляторов я получил мобильный стенд для тестирования, который тут же был «объезжен». По факту оказалось, что повышение напряжения питания моторчика положительно сказалось на динамических характеристиках и машинка по коридору бегает достаточно резво. Правда вылезла проблема с плохим креплением на оси одного из ведущих колес, но это решаемо. Главным плюсом использования этой макетки можно считать полную совместимость с скетчами для Arduino. По большому счет отличие только в объеме памяти и в отсутствии двух старших каналов АЦП — они есть только в TQFP-корпусах.

Следующим шагом был переход на «родное» сердце системы — ATTiny13a. Здесь обнаружилось нездоровое количество граблей. Первой и самой досадной оказалось грабля с программированием контроллера. На борьбу с ней ушло два полноценных рабочих вечера. А проблема была, в принципе, достаточно проста. В контроллере есть два встроенных калиброванных генератора тактовых сигналов. С завода включен тот, который работает на частоте 9,6 МГц, но при этом включен делитель частоты на 8. Таким образом штатная тактовая частота с завода — 1,2 МГц. В случае моих экспериментов с ATMega48 она была еще ниже — 1 Мгц, но контроллер шился нормально. Tiny шиться отказывалась. Она нормально читалась, она шилась, но шилась как-то странно — шились только четные страницы флеша (размер страницы 32 байта), причем почему-то шилось в них то, что должно было зашиться в предыдущие нечетные страницы. Ковырялся я долго, рассматривал варианты с глюками программатора (нашел описание скетча для Arduino для программирования Tiny, но нормально он у меня не заработал), пытался найти другой софт для программирования. После интенсивного гугленья начал рассматривать вариант с занижением скорости работы программатора, особенно в свете того что на оригинальной схеме моего программатора был для этого специальный джампер и такая возможность заявлялась как одна из «фич» программатора. Но на моем китайце этого джампера не было, а паяться проводком поверх TQFP я не рискнул. В конечном счете я решил попробовать перешить фьюз контроллера, в котором был задан делитель для тактовой частоты. Это помогло. Видимо старой тактовой хватило для того чтоб осилить перезапись одного байта, а дальше все пошло как по маслу.

Новое "сердце" системы

Новое "сердце" системы

После удачного запуска контроллера последующие эксперименты с программным обеспечением шли именно на нем. На удивление основная масса логики переехала без проблем, благо никаких сложных вещей не используется. Работа с портами ввода-вывода и АЦП была переписана вручную, что позволила больше чем в два раза сократить код — он стал помещаться в крошечную память контроллера и там даже осталось место для усложнения логики работы. На удивление АЦП оказался достаточно близок по параметрам тому, который стоит в старшем контроллере — константы пришлось крутить только самую малость. После этого начались более детальные ходовые испытания.

Полный макет. Версия 2.0

Полный макет. Версия 2.0

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>