Logo

Вторая жизнь радиоуправлемой машинки

Игрушка для папыВ давние-стародавние времена, 13 лет назад, была куплена радиоуправляемая машинка для себя любимого. В нее успели наиграться сыновья, а машинка была еще жива, но родной NiMH аккумулятор не выдержал пытки и почил с миром. Попытка его живить ни к ему не привела, осталось в нём емкости от 420 ма·ч где-то 50-70 ма·ч. Была предпринята попытка заменить его на Li-ion от ноутбуков, но электроника отказывалась нормально работать от 3,7 в и глючила страшно. Попытка поставить DC/DC до 5в. привела к судорожному дерганью ходового мотора, а напихать большой дроссель и конденсаторы по выходу DC/DC не было физически места.

И было принято кардинальное решение: выкинуть всю электронику в машинке и пульте и заменить новой.

Пульт оказался полностью дискретным в части управления, мозгом там была PT8A977BP вот с такой схемой включения:

Исходная схема пульта

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

Исходная схема приемной части

Покопавшись в загашниках, было решено использовать в качестве мозга atmega8L, а для радиочасти NRF24L01+, которых было множество в наличии для использования в умном доме. В пульте (передатчике) оставлялись к использованию кнопки (ползунки) которые управляют направлением движения машинки и траекторией.

Сервомашинки в приемнике были собраны по неведомой конструкции и представляли собой по сути редуктор с DC-мотором. Характеристики, которые удалось с них снять:

  • Максимальный ток сервы на поворотные колеса 0.27 А при 3.5 в. Сопротивление сервы 17 Ом в неподвижном среднем положении, от 1 кОм до 150 Ом при выкрученных в сторону колесах.
  • Ток ведущих колес на холостых оборотах 0.43 А при 3.5 в, под нагрузкой до 2.3 А и потом защита у акб срабатывает. Сопротивление на проводах ведущих колес 1.3 Ом, если их не трогать.

По размерам посадочного места в машинке (приемнике) не густо, максимальная высота платы с деталями 16 мм, но не по всей площади платы, т.к. есть дырки под крепление и ограничители по краям.

Что должно быть по функционалу:

 

  1. Движение вперед и назад с регулировкой скорости (ШИМ) или на первое время просто вкл/выкл
  2. Поворот в лево и вправо.
  3. Вкл/выкл фары спереди и габариты сзади
  4. Вкл/выкл проблесковых маячков из двух светодиодов на крыше машины (полицейская мигалка).
  5. Вкл/выкл гудка (пищалки) со звуком клаксона автомобиля.

 

{ads2}

Начнем с передатчика, т.к. с ним получилось проще всего, кроме не поместившейся в корпус платы.

Схема принципиальная:

Новая схема передатчика

Кнопки подключены по такой схеме только ради экономии места и возможности выхода микроконтроллера из powerdown при нажатии на любую кнопку. Совершенно не рекомендую такое решение, если питание не батарейное, или есть управление силовой нагрузкой, т.к. МК может ловить помехи от наводок по портам кнопок, и их нужно будет шунтировать резисторами и стабилитронами. По питанию в результате была оставлена батарейка типа «Крона» и поставлен LDO AMS1117-3.3 (на схеме не показан) с выключателем.

Алгоритм работы передатчика:

 

  1. Инициализировали перефирию
  2. Если нажата или отпущена одна из кнопок, то выходим из сна и отправляем в NRF состояние порта кнопок
  3. Если в течении 5 секунд кнопки не нажимают или отпускают, то уходим в Powerdown
  4. Раз в 5 секунд проверяем напряжение питания МК, если оно ниже 2.5в, то двукратно пищим
  5. Идем в пункт 2.

 

В результате пультик выглядит в разобранном виде так:

Новый передатчик в сборе

Слева плата управления, в центре старая плата, которую выпаивать не стал, ибо не мешала.

В будущем есть планы вырезать Крону и поставить 18650, но лень.

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

Щель...

Кнопки на пульте имеют следующее назначение:

Расположение кнопок на пульте

Остальные органы управления (вперед/назад, влево/вправо) остались без изменений.

Приемник.

Схема принципиальная:

Новая схема приемной части

Красным выделены элементы, которые пришлось добавлять уже после изготовления печатной платы на этапе наладки. Т.к. ходовой двигатель потреблял ток до 5 А легко, то от этого МК становилось плохо, и он перезагружался. Решается эта проблема добавленными элементами: VD1L2C10, L3C9. Перечисленные элементы установлены навесным монтажом.

VD2V3R21R22 реализуют ШИМ-управление ходовым двигателем. Дело в том, что если этого не сделать, машина превращается в адский скоростной болид, соответственно редуктор или корпус машины просто развалятся после столкновения с препятствиями или от времени. Без ШИМ реализован Турбо режим, если одновременно нажать Фара+Мигалка+Гудок, таким же нажатием он и отключается.

В разобранном виде обновленная машинка выглядит так:

Внутренности

Места у неё в нутре совсем не много:

Места немного...

Плата управления двухэтажная (из двух плат), на второй реализован H-мост по управлению ходовым двигателем:

Двухэтажная плата

C другого ракурса плата приемника

И еще с одного ракурса плата приемникаСледует отдельно описать работы с NRF, т.к. было много времени потрачено на превращение готовой библиотеки, найденой интернетах, в рабочий вариант.

Главной проблемой были дубликаты получаемых комманд, виной тому была неправильная обработка принятой команды на приемнике, не правильно было так:

 

  • Ждем от NRF поднятия флага RX_DR, входим в обработчик приема;
  • Выгребаем из буфера приема команду, отправляем ее на обработку;
  • Сбрасываем флаг RX_DR.

 

Это в корне не верно, т.к. флаг RX_DR говорит только о факте принятия данных буфер, но команд может прийти несколько (всего буфер NRF рассчитан на 3 команды).

Правильный алгоритм такой:

 

  • Ждем от NRF поднятия флага RX_DR, входим в обработчик приема;
  • Выгребаем из буфера приема команду, отправляем ее на обработку;
  • Проверяем есть ли еще принятые команды по флагу RX_P_NO, если есть, то переходим к п2;
  • Сбрасываем флаг RX_DR.

 

Инициализация NRF используется следующая (от NRF нужна дальность, но не скорость):

{code}#define SETUP_AW_5BYTES_ADDRESS (3 << AW)
#define SETUP_RETR_DELAY_1500MKS (5 << ARD)
#define SETUP_RETR_UP_TO_5_RETRANSMIT (5 << ARC)
#define RF_SETUP_250KBPS (1 << RF_DR_LOW)
#define RF_SETUP_0DBM       (3 << RF_PWR)
#define mirf_CH  10 //transmission channel
#define mirf_PAYLOAD        0 //payload lenght

mirf_write_register(EN_AA,(1<mirf_write_register(EN_RXADDR, (1 << ERX_P0) | (1 << ERX_P1));               // включение каналов 0 и 1
mirf_write_register(SETUP_AW, SETUP_AW_5BYTES_ADDRESS);      // выбор длины адреса 5 байт
mirf_write_register(SETUP_RETR, SETUP_RETR_DELAY_1500MKS | SETUP_RETR_UP_TO_5_RETRANSMIT);   // задаем ждать подтверждение от принимающего 1,500мс и пять попыткот нас до него достучаться
mirf_write_register(RF_SETUP, RF_SETUP_250KBPS | RF_SETUP_0DBM);             // выбор скорости 250 кбит/с и мощности 0dBm
mirf_write_register(RF_CH, mirf_CH);         // задаем канал преима/передачи
if (mirf_PAYLOAD!=0){
// настраиваем отправку данных фиксированной длинны
mirf_write_register(RX_PW_P0, mirf_PAYLOAD);             //length of incoming payload
mirf_write_register(FEATURE,(0 << EN_DPL) | (1<}else{
// настраиваем отправку данных произвольной длинны с автоподтверждением
mirf_write_register(FEATURE,(1 << EN_DPL) | (1<mirf_write_register(DYNPD, (1 << DPL_P0));               // включение произвольной длины для канала 0
}
mirf_write_register(CONFIG, (1 << EN_CRC) | (1 << CRCO) | (1 << PWR_UP) | (1 << PRIM_RX));   // Включение CRC, питания и переход на прием

mirf_setRX; // rx mode
_delay_ms(20);
mirf_CE_hi;{/code}

Машинка в сборе выглядит так:

Машинка в сборе

Внешний вид

Вид снизу

Немножко видео о том, что вышло в итоге:

Что можно еще улучшить:

 

  • Поставить в разрых питания H-моста полевик, чтобы снизить потребление приемника. Сейчас во схе вся схема потребяется 13ма, все это жрет именно H-мост для ходового двигателя.
  • Переделать плату в пульте (передатчик), чтобы он закрывался плотно.
  • Сделать задние стоп-сигналы, запаралелить их с фарами.

 

Использовались следующие ссылки по теме:

http://aterlux.ru/index.php?page=article&art=nrf24l01p#COMMANDS

https://openservo.org/Schematic2?action=AttachFile&do=view&target=openservo_2.1_schematic.pdf

http://kazus.ru/forums/showthread.php?p=1093653#post1093653

Обсудить эту статью на форуме (17 ответов).
Template Design © Joomla Templates | GavickPro. All rights reserved.