Неудавшийся контроллер робоплатформы PIC16F877A
Одним из многообещающих моих проектов был контроллер для колесных и гусеничных роботов различной конфигурации с двумя ведущими моторами малого и среднего тока, основанный на микроконтроллере PIC16F877A. Который по изначальной задумки должен был иметь драйверы двух коллекторных моторов с током до 4А, 5 универсальных аналого-цифровых входов, 8 универсальных цифровых выходов и прочею солянку. Но, к сожалению, на выбранный МК была возложена слишком большая ноша, и в середине работы над ним он перестал с ней справляться.
Робоконтроллер 877A
Но ничего, на ошибках учатся.
Хоть проект с этой реализацией контроллера и не удался, но был извлечен из своих ошибок важный опыт, который ляжет в основу следующей версии контроллера. И что бы этот проект не пропал почём зря, ведь что-то всё-таки реализовать получилось, – решил информацию о нём опубликовать.
Изначально этот контроллер разрабатывался, как контроллер нижнего уровня, т.е. он должен был являться чисто исполнителем и не должен был обладать какой-либо своей логикой, а управление должно было происходить с контроллера верхнего уровня, в качестве которого мог выступать, к примеру, ноутбук или навороченный ARM контроллер, или на крайний случай прямое управление по Bluetooth.
Заложенная спецификация:
- Встроенный драйвер 2-х коллекторных двигателей с током до 4-х А
Контроль тока каждого из двигателей и контроль общего напряжения- Управление по Bluetooth
- 5 универсальных аналого-цифровых входов
- 8 универсальных цифровых логических/
PPMвыходов Контроль энкодеров каждого из моторов (колеса)Связь с I2C датчиками и периферией- Бонус предыдущего пункта управление по I2C с Nunchake WII
- Раздельно питание контроллера с датчиками и цифровых исполнительных устройств подключенных к 8-ми универсальным цифровых выходам
Функциональная схема
На самом деле заложить хотелось гораздо больше, но из выбранного контроллера, уже на этапе проектирования, удалось выжат только это. Некоторые вещи удалось реализовать, некоторые только частично, некоторые сразу после изготовления накрылись медным тазом, а другие отвалились в этапе программирования, но самое обидное, что закончился стек переходов и даже половины программного функционала не удалось реализовать. Конечно, можно оптимизировать код и, думаю, это даже поможет, но смысл борьбы за этот камень мною был утрачен, всё придётся начинать сначала, но уже на новом и на голову более мощном и функциональном микропроцессоре.
Плата
Схема имеет следующий вид:
Принципиальная схема
Схему можно разделить на следующие части:
- микроконтроллер с обвязкой
- два драйвера двигателей
- слаботочный 0,5А стабилизатор для микроконтроллера и датчиков на 5В
- силовой 3А стабилизатор для периферии на 5В
- блок из 5-ти аналого-цифровых входов
- блок из 8-ми цифровых выходов
- блок интерфейсов UART, i2c и ещё двух портов
- блок для подключения двух энкодеров
- и последний блок, состоящий из 3-х делителей для контроля входного напряжения и тока моторов.
Замечу, что джампер предполагался для замыкания 5В цепей после слаботочного 78l05 стабилизатора и силового LM2576 в случае экономии на одном из них. Ещё на схеме упустил ICSP разъём для внутрисхемного программирования, на плате он есть, и из-за него в схеме присутствует диод VD1 с вытекающими схемотехническими последствиями.
Печатка выглядит следующим образом:
Вид печатки сверху
Вид печатки снизу
Спецификацию приводить не буду. Единственное, что об устройстве драйверов двигателей можно прочитать в статье — драйвер коллекторного двигателя 1-4А. И отмечу, что схема и печатка могут содержать небольшие неточности, т.к. их не приводил к конечному виду.
Прошивка
Прошивку выкладываю во все её сырости и не оптимизированности. В принципе она рабочая и робот вполне успешно катается, управляемый по Bluetooth. Протокол управления собственной разработки, использованная версия PRAL2.0 , в одной из следующих статей опишу его.
Что было реализовано:
- управления 2-мя моторами с плавным разгоном (плавный старт, остановка, реверс), что бы стартовыми токами не перегружало и не выбивало аккумуляторы (прецеденты до введения были, а датчики тока реализовать не удалось)
- управление по UART на скорости 9600 по протоколу PRAL2.0 заточенное под Bluetooth
- логическое управление нагрузками (исполнителями) подключенными к универсальным цифровым выходам
- было реализовано, но позже «заморожено» управление с Nunchuk Wii
- была начата реализация работы с АЦП и контроль напряжений, но на этом остановился.
Что есть – то есть, может кому-нибудь пригодятся мои наработки. Повторюсь, они выложены в сыром виде и без намека на оптимизацию.
Гусеничная платформа
И на последок расскажу об используемой гусеничной платформе – Rover 5 Tracked Robot Chassis.
Робот на природе
Несмотря на её красоту – она меня разочаровала. Хоть она гусеничная и имеет приличную проходимость, но она также имеет неприятные конструктивные особенности:
- гусеницы часто слетают, особенно на ковровых покрытиях
- колеса, на которые насажены гусеницы, под натяжением этих самых гусениц, трутся и потихоньку истираются.
Ну и пара мелких придирок: малая скорость и пластиковые шестерни в редукторах. Так же, думаю, ей не понравится грязь, т.е. она пригодна только для домашнего применения.
Заключение
Хоть неудачный, но всё же опыт, может он ещё кому-нибудь будет полезным.
Позже, как доберусь с фотиком до рабочей лаборатории, пересниму контроллер и робота.
Alex_EXE | 28.07.2013 | Робототехника |
Илья пишет 03.01.2014 в 22:20 #
Здравствуйте а каким вы пользуетесь компилятором для pic16f877 а то я пишу программу под pic16f874a и не могу понять как убрать ошибку «undefined identifier «GODONE»» при работе с ацп Думаю чтото с компилятором HI-TECH Software PICC\9.50 при работе с pic16f676 на «GODONE» не ругается
Alex_EXE пишет 04.01.2014 в 12:34 #
От компилятора к компилятору, от МК к МК есть везде свои особенности.
Если не получается опросить этот бит напрямую — то можно его запросить из регистра в котором он содержится — ADCON0&0b00000100 . Но следует уточнить в даташите на используемый МК.
илья пишет 05.01.2014 в 00:38 #
да спасибо я так и сделал уже
ADCON0=0b10001101;
Alex_EXE пишет 14.01.2014 в 17:16 #
Только что столкнулся с этой проблемой сам.
В новой версии компилятора некоторые регистры и биты переименовали, например:
GO_nDONE вместо GODONE
OPTION_REG вместо OPTION
Новые название же можно выудить из заголовочных файлов используемых микроконтроллеров.
Вадим пишет 09.01.2015 в 21:37 #
Добрый день Alex.
интересные у вас статьи на сайте.
самостоятельно занимаюсь изучением МК. играюсь с платформой ROBOPICA и использую ее как лабораторный стенд для изучения.
Данная платформа использует такой же МК как и у вас и справляется со всем управлением платформы в полной мере. Посмотрите по указанной ссылке ниже тех. документацию, там есть электрическая схема и примеры в коде.
с уважением!
Alex_EXE пишет 10.01.2015 в 07:12 #
Успехов в освоении микроконтроллеров.
Спасибо за ссылку, посмотрел. Данного робота уже не раз видел, но в подробности не вдавался.
Я не спорю, что данный МК сможет справиться с управлением данной платформы и всё, что было намечено, кроме датчиков тока (там уже аппаратная ошибка) реализовать можно. Так же отмечаю, что у меня в данном проекте очень не оптимизированный код. Плюс контроллер на самом деле у меня не 877А, а просто 877, может и это имеет значение.
Но если уже на этапе начальной разработки, при реализации первоначально поставленной задачи, описанной в этой статье, столкнулся с подобными проблемами — то решил перейти на следующий уровень. Где будет больше свободы действий, ведь например цифровые I2C датчики (акселерометры, гироскопы…) требуют уже больших вычислительный ресурсов контроллера и код по их обработки занимает больше места. Плюс алгоритмы по автоматизации модуля могут тоже занять много места в памяти МК и могут быть требовательными к его производительности.
Учитывая всё это и не только — решил перейти на следующий уровень — на stm32 и уже успешно перешел. Можно сказать, что данный проект был последним толчком перед переходом на stm.
Если интересно, то могу отметить, что проекты по робототехники на stm32, возможно, в будущем у меня появятся. Сейчас к примеру занимаюсь разработкой драйвера мощных коллекторных двигателей.
Вадим пишет 26.01.2015 в 02:29 #
Алекс, если есть, поделись опытом по изучению програмирования мк на си, может книжку какую посоветуешь.
а почему выбор пал на STM32 а не продолжил изучение линейки PIC того же например PIC32?
а как ты будешь разрабатывать аппаратную поддержку STM32? есть отладочная плата? там ведь все очень мелковато и не припаять и не подключить.
ждем твоих проектов!
Alex_EXE пишет 08.02.2015 в 05:10 #
Под какой контроллер интересует опыт? PIC, AVR, STM32? Пишите вопрос через обратную связь — отвечу.
Почему на STM32. ST очень хорошо в начале поступили — всем желающим бесплатно раздавали образцы своих демоплат, что помогла им набрать начальную популярность, я правда под эту раздачу не попал.
1.Они имеют определенную популярность и известность, по ним есть уже достаточно материала в интернете, в том числе в русскоязычном сегменте. Что облегчает ихние освоение.
2.Цена
3.Доступны нормальные свободные среды разработок. Например — CoCoox, правда в последней версии (v2) они что-то через чур намудрили. До того намудрили, что её снёс и поставил предыдущий версию. Надеюсь они доведут её до ума или я найду внятный туториал, как её запустить.
У меня есть почти вся линейка плат Discovery, приобретал их по началу. В итоге пользовался и пока пользуюсь только самой первой, да и пока F1XX и F0XX мне для моих задач хватает. Плюс уже сделал небольшие отладки под STM32F030F4P6 и ещё STM8, но мне пока не до последнего. Так же у меня есть Pinboard II, но он покупался не для моего личного обучения, а для студентов, тем не менее есть, хоть лично мне отладки подобного типа уже не интересны, т.к. в помощи при первых шагах не нуждаюсь.
С самим же STM32 проблем нет, сейчас уже активно занимаюсь разработкой на них. Так же у меня на сайте есть соответствующий раздел с парой статей по ним, в будущем надо будет ещё несколько добавить. Паять и травить платы под такие микросхемы труда не составляет: паяльная станция есть, 0.25мм зазор и дорожка — не проблема. Когда получу следующий «левел апп» — то напишу соответствующие материалы.
Проекты уже есть и один даже почти завершен, осталось только код прибрать. Как будет время напишу материал. Так же отмечу, что некоторые проекты усложняются, плюс жизнь набирает обороты — следовательно на хорошие полноценные сложные материалы времени будет уходить больше.