- Лоботрясы

Поиск
Перейти к контенту

Главное меню:

Статьи по AVR

Читать в Яндекс.Подписках



    Управление сервоприводом от автомобильной приборной панели
Просмотров: 2786
     Очередной раз убеждаюсь, что вдохновение – вещь спонтанная. Вроде бы уже работал над одним непростым проектом, как в пригаражных хамырях на глаза попался полезный ништячок – разломанная пополам плата панели приборов от какого-то безвременно покинувшего бренный мир российских автодорог зарубежного железного коня.
     Питая пристрастие к халявным радиодеталям, сей кусок текстолита с SMD-шными бонусами в подарок был спасён! Первыми (естественно!) лишились своего места обетованного ультраяркие светодиоды, а уже потом мой взгляд упал на сервоприводы аналоговых стрелок…
     Детальное изучение и последующее вскрытие одного пациента показало, что я имею дело с биполярными шаговыми двигателями (ШД) с четырьмя парами полюсов на статоре и постоянными магнитами на роторе. Для более детального ознакомления с шаговыми двигателями можно ознакомиться с этой статьёй
 
     Мои благодарные пациенты:
     Повертев их в руках, сразу захотелось найти им какое-то применение, а именно – сделать на них проект часиков (наподобие часиков со стрелочными милливольтметрами в главной роли, фото которых можно найти в инете). Насчёт представленных на фото (и подобных) шаговых двигателей (как и их донора), найти в интернете информацию не удалось, поэтому пришлось проявить немного терпения, усидчивости и потратить немного диоптрий, чтобы примерно определить их параметры.
     Итак, полный оборот ротора двигателя (речь не о шестерёнке под стрелку!) происходил при подаче 5 импульсов (1 импульс - попеременная коммутация 2-х фаз) на обмотку управления. При этом, поворот рабочей шестерёнки (заточенной под стрелку) происходил на угол примерно в 15 градусов. А для полного прохождения стрелкой всей рабочей шкалы (где-то 315…325 градусов) понадобилось 20 (почти 21) полных оборотов ротора ШД. В итоге имеем: при использовании самого простого режима попеременной коммутации фаз ШД (она же – ”one phase on” full step или wave drive mode), имею 100 показаний стрелок сервопривода (на одно показание – один импульс на обмотку). Неплохо! Правда, я чуть-чуть урезал полный диапазон шкалы сервопривода, но это не так сильно заметно и страшно :-)
     Дополнительной хорошей особенностью данного ШД является его небольшое потребление тока, вызванное, помимо высокой индуктивностью, омическим сопротивлением в 200 Ом на обмотку, что позволяет подключать этот привод напрямую к выводам микроконтроллера. Никакой защиты выводов оригинального микроконтроллера на плате от ЭДС самоиндукции я не нашёл, поэтому поступил так же.
     Также экспериментально определил, что минимальная задержка между подачей импульсов управления на каждую обмотку статора составляет 5 мс, при меньшей ротор даже не трепыхается.
     Выводы обмоток:
     Хотя в своих проектах я предпочитаю использовать многовыводные сороконожки, и выделить четыре вывода на управление ШД как бы совсем несложно, но я решил сделать на стрелочный сервопривод отдельный и независимый драйвер, в чём мне охотно помогла букашка
Attiny 13 (как-то имел счастье взять их побольше в SMD исполнении на Али :-)
     Выводы управления при этом сократятся до 2-х. Небольшой профит, конечно, но зато уже реализована схема управления – подавай нужную команду и радуйся работе стрелочного сервопривода!
     Пока что печатную платку для полной «железной» реализации ещё не сваял, но от нечего делать реализовал две концепции управления – одна другой краше :-)
     Для начала – пыточная схема нашего пациента:
     И – первая реализация кода управления. В данной реализации (самой первой и не особо продуманной) я решил сделать управление стрелочным сервоприводом подачей импульсов на вход IMPULS. Для задания направления вращения используется вход DIR, при подаче «0» на который, ротор вращается против часовой стрелки, а при подаче «1» - по часовой стрелке. Каждый импульс, поданный на вывод IMPULS обеспечивает подачу одного импульса на ШД (ну и, как говорилось выше – 100 импульсов – это полная шкала с со 100 делениями). Правда эта реализация кода не позволяет определить, занята ли ещё Аттинька управлением шагового двигателя или нет, и при подаче новых импульсов управления но уже с другой полярностью с реальностью показаний стрелки может случиться нехороший каламбур. Что же вы хотите, малое количество выводов применяемого микроконтроллера даёт свои плоды!
     Поэтому скоро родилась и вторая версия управления…
     Схема, как видите, та же самая, только назначение выводов управления поменялось (как и сама программа-прошивка). Теперь, для управления сервоприводом стрелки, на вывод DATA нужно подать один байт данных, сопровождаемый синхроимпульсами на выводе CLK.
     Структура этого байта управления такова:
     Некое подобие SPI :-) Передача байта команды с управляющего микроконтроллера должна идти со старшего бита по младший. Если 6-й бит равен «0», то направление вращения сервопривода – против часовой стрелки, иначе – по часовой. Вместо 2-х байт данных я решил передавать один, что ограничивает значение передаваемых за один раз импульсов (соответственно, значений показаний стрелки) управления – 63 максимум (вместо 100 возможных)! Это характеризуется шестью доступными битами для передачи полезных данных. Хотите – подкорректируйте код по-своему, а мне для задуманного проекта аналоговых часов – в самый раз!
     После принятия байта команды на выводе DATA, который на это время конфигурируется в качестве выхода, устанавливается логический «0» (режим Busy), что говорит управляющему контроллеру (мастеру), что наша Аттинька со своим сервоприводом очень заняты, и пока беспокоить их не стоит. Тем самым обеспечивается нужная функция определения занятости микроконтроллера управления сервоприводом (чего так не хватает первой версии кода :-(
После того, как принятая команда будет обработана, вывод DATA опять станет входом с логической «1» на нём (благодаря врутреннему подтягивающему резистору).
     Исходник прост и хорошо прокомментирован, поэтому описывать его тут не буду.
 
     Achtung! И для первой и для второй версии программы вывод RESET (PB5) микроконтроллера переводится (благодаря манипуляциям с фьюзами) в обычный вход с подтягивающим резистором (к «+»), так что дальнейшее перепрограммирование микроконтроллера USBASPом уже не покатит. Помните это, при попытках внести свои исправления в исходник!!! Также!!! Вторую версию прошивки (в отличие от первой) я пока на практике ещё не проверял! Но скоро проверю. Имейте это ввиду, прежде чем меня пинать по-поводу нерабочей программы и не перепрограммируемого микроконтроллера :-)
 
     И фьюзы, напоследок:
     Небольшой пример работы (просто показываю диапазон поворота стрелки сервопривода, и возвращаю стрелку в исходную позицию :-)
     Скачать:

Опубликовано
 14.03.2015
© Igoryosha, 2015
 
 
Назад к содержимому | Назад к главному меню