Контроллер для детской машинки на Arduino Mega 2560

Автор HECTEPOB, 16 Нояб. 2014 в 21:35

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

HECTEPOB

Здравствуйте, уважаемые Форумчане!

Смотрите предварительный видео-отчет.
http://youtu.be/gYkY920Pi5U

Это моя первая тема, просьба сильно не пинать.

Старое:
Приступил к созданию контроллера для детской машинки на платформе Arduino UNO

Новое: Платформа была изменена на Arduino Mega 2560 по причине недостаточности у Arduino UNO каналов захвата (для захвата сигналов с пульта РУ требуется минимум три канала:
- Сигнал перехвата управления
- Сигнал руления
- Сигнал газа/реверса)
В Arduino Mega 2560 с этим тоже не все гладко, микроконтроллер имеет 6 каналов захвата, но на внешние разъемы выведены только 2, для третьего пришлось паять перемычку непосредственно с ножки микроконтроллера на один из неиспользуемых внешних разъемов

http://arduino.cc/.

Исходные данные:
1. Есть машинка http://mike-motors.ru/elektricheskie-mashinki/136-elektroavtomobil-bentli-radioupravljaemyy-na-rezinovyh-kolesah.html Управление с борта и с пульта Р/У (убогого)
2. Есть пропорциональная двухканальная радиоаппаратура от автомодели, примерно от такой: http://rc-star.ru/products/avtomodel-116-ep-4wd-off-road-truggy/ Есть хороший 6-ти канальный комплект, но экспериментировать на нем не рискую (в электронике не очень силен, боюсь спалить).

Добавлено:
Была преобретена новая аппаратура специально для данного проекта: FlySky FS-IT4

3. Есть набор для начинающих электронщиков: http://amperka.ru/product/matryoshka-x
4. Есть море энтузиазма и желания сделать приятное сынульке (исполняется 2 года, собственно это подарок на ДР) и себе конечно самому Ж:-))).

Задача:
1. Сделать пропорциональное управление (сильнее жмешь курок - быстрее едет) газом и реверсом с пульта РУ, причем если открыт газ или реверс на пульте, то управление с борта должно блокироваться.

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

2. Сделать человеческое рулевое управление. В идеале, как на автомоделях. Т.е. пропорциональное, угол поворота колес пропорционален углу поворота рулевого колеса на пульте. Управление с борта так же должно быть доступно только в случае, если рулевое колесо на пульте имеет нейтральное положение.

Добавлено:
Еще в планах реализовать электроусилитель при управлении с борта

Что сделано на данный момент:
1. Машинка собрана в заводской комплектации и проверена. Результаты проверки:
   - Конструктив конечно не идеален, все на саморезах, где смог поставил винты с гайками.
   - Штатное РУ не выдерживает никакой критики. Скорость с пульта не переключается, моторы управляются от реле. Управление с борта не блокируется при управлении с пульта. Естественно никакого плавного старта. Рулевой мотор так же включается релюхами и только "на всю" что делает невозможным заставить машину ехать прямо.
   - Рулевой механизм имеет серьезную проблему, люфт в редукторе ~45 градусов.

Проблема устранена:
Зафиксирована приводная корона на рулевом валу, установлено усиление в месте прохождения рулевого вала через корпус.

2. Проанализирована работа связки пульт РУ - приемник. На выходе два канала. Один управляется рулевым колесом, второй курком на пульте. На выходе каждого из каналов ШИМ с частотой 50 Гц. Нейтральное положение соответствует длительности имулься 1,5 мс максимальный реверс или руль влево - 1 мс, максимальный газ или руль вправо - 2 мс. Защиты от отсутствия пульта в приемнике НЕТ, это очень плохо, если приемник не видит пульта, на выходах каналов управления "мусор". В хорошем РУ как правило такая защита предусмотрена.

В приобретенной аппаратуре с защитой все ОК. Тайминг сигналов совпадает.

3. Для управления ходовыми моторами и рулевым мотором планируется использовать схему H-bridge http://www.robotroom.com/BipolarHBridge.html т.е. избавиться от реле (Останутся только на управление фарами и т.д. и то не факт).

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

3. Собрана первая экспериментальная схема на Arduino UNO и написано ПО. На данный момент поддерживается следующее:
- Управление рулевым и ходовыми моторами
- Мотор управляется 4-мя каналами (в мостовой схеме 4 ключа, 2 из которых закрыты 1 открыт на 1 управляющий ШИМ). Не разобрался как вставить видео, ссылка вот: http://youtu.be/HZPna5nZ7RI
  - Поддерживается плавный старт (т.е. даже если ручку газа нажать сразу до упора, обороты плавно подрастут примерно за чуть более 1 сек).
Кому интересна тема, подключайтесь к обсуждению, пишите в личку. По мере поступления новых достижений буду обновлять первое сообщение.

Получены первые позтивные результаты по рулевому управлению: VID 20141122 062711

Видео работы передней подвески:
VID 20150106 211428

Видео работы электродифференциала:
http://youtu.be/aCzmfRFzZsQ

Реализовано пропорциональное рулевое управление. Т.е. на сколько поворачиваешь колесо на пульте (отклоняешь ручку, у кого какой пульт) на столько поворачиваются колеса. Отпускаешь ручку, колеса прямо.

Для реализации был установлен датчик угла поворота рулевого вала. В качестве донора для датчика была использована ручка газа от электровелика. Поскольку от донора остались по сути только сам датчик, магниты и три пластмасски (в которые собственно и крепится датчик и магниты), рекомендую при повторении ручку не покупать (мне обошлась в 810 рэ) а купить отдельно датчик и магниты, ориентацию датчика и магнитов смотрите на фото (здесь будет URL на фото).

Ближайшие планы:

1. Подобрать корпус для контроллера и установить все на борт (тест на видео сделан при лежащей на столе электронике). Надо докупать колодки со штырями для ардуины и разъем питания.

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

3. Допилить параметры рулевого, сделать его более точным и отзывчивым и не зависящим от нагрузки

4. Получить силовую часть (текущая схема реализована на штатных реле + МПС из соседней ветки) т.е. H-мосты от китайцев и переделать все на них, чтобы исключить штатные реле и повысить скорость управления (реле медленно переключаются, отзывчивость руля снижается).

Добавил проект под Proteus pro 8.1:

https://electrotransport.ru/index.php?action=dlattach;topic=24681.0;attach=185994

Что реализовано читаем отсюда (4 страница):
https://electrotransport.ru/index.php?msg=512552

poraboloid

Имхо штатную систему р\у на выброс.
Использовать нормальную, с приемником.
Выходы приемника завести на ардуину, ну а она уже пускай по программе рулит.
Yedoo Ox, МК DD350W, 9А\ч LiFePo4  Yedoo City, МК QQ85,11A\ч LiIon
Yedoo Mezec new, MXUS 350, 9А\ч LiFePo4 Самовар на тесте.
EVO 2xDD500W в ремонте.Оxelo Dirt в доделке

Tygra

#2
Уже делал. Нормально работает. Нужен "драйвер" для управления двигателями. Нужно переделать рулевой редуктор до сервопривода, путем установки датчика положения руля ( переменный резистор), с рулевым еще не заморачивался. Плавный ход работает отменно, позволяя ездить с любой нужной скоростью, хоть черепашей, позволяя свободно ездить по квартире. Работает стабильно. Есть программный эмулятор нейтралки, что бы ребенок носом в руль не втыкался. Управления с педалей пока нет. В планах рулевое, педаль, повышение скорости за счет установки другого акка, что то нужно сделать с тормозами, ограничение скоростей с педали, + эмулятор переключения передач для более плавного управления с пульта и плавного разгона, а также контроль за параметрами движков ( ток, температура).
P\S На первое время штатную систему выкидывать не нужно, выпаять приемник штатный и использовать систему релюшек для управления. Так проще. Все сразу сделать будет трудно, много прийдется переделать. Потому эксперименты можно начать оставив свой контроллер. После обкатки всего его будет можно конечно же удалить. А так на нем все завязано, что бы сильно не мучиться на первое время лучше его оставить. На нем уже есть ключи для ардуинки, можно сразу выходы подключать напрямую к ним.
Вот здесь более подробно, м\б что будет интересно http://radioskot.ru/forum/17-3753-1
Вот так авто ездить с ардуины и нормального rc пульта. https://www.youtube.com/watch?feature=player_embedded&v=3Uviiw51Fks

Tygra

Ткнул по ссылке на авто.. мдее можно было  добавить и купить henes второго поколения и ни чего не колхозить, там уже все "устроено" .

HECTEPOB

[user]Tygra[/user], Прочитал материал по Вашим ссылкам. Спасибо огромное,  очень информативно.  В связи с этим несколько вопросов:
1. Правильно ли я понял,  что силовую часть использовали вот такую: http://ru.aliexpress.com/item/Free-Shipping-Semiconductor-BTS7960B-Stepper-Motor-Driver-43A-H-Bridge-Drive-PWM-For-Arduino/1786784875.html?promotionVersion=1 ?
И как они?  Чем управляются?  Аналогом?  Шим?  Частота?  Есть ли документация? На первый взгляд выглядит как наиболее вменяемое решение.
2. Правильно ли я понял,  что на рулевое пока сделали только пропорциональное управление скоростью рулевого мотормотора? Т. е.  датчик угла рулевого вала пока не ставили?
3. Как лечили люфт в рулевом редукторе?

Tygra

Там много проблем всяких. Например нужен эмулятор дифференциала, т.к. на поворотах нагрузка на редукторах разная и редукторы "воют". Для этого нужно знать положение руля. На данный момент управление рулем оставлено как было, т.е. через родные релюшки. На ардуине реализована "мертвая зона" при середине руля, при выходе за пределы включается то или иное реле. Работает безотказно. Победить "люфт" в рулевом будет очень сложно и посему я "забил", на деле не особо то и надо. Конечно же достаточно сильно машину "таскает" периодически, но скорость низкая и проблем никаких не доставляет. ШИМ с алиэкспресса не проверялся, купил, получил и лежит на полке. Управляется он "разрешение" + ШИМ для изменения скорости. На ардуине нужно "заточить" шим генератор на другую частоту. Родная частота сильно низкая от нее в ушах звенит, на положениях ниже 100пр будет жутко громко звенеть. На данный момент реверс организован самими релюшками те что на плате родной стояли, шим это тупо 4 полевика irf3205 кажись, могу путать, забыл уже, выдрал с мертвого упса вместе с радиатором. Пульт у меня цифровой с защитой от потери связи. При разработке учтите реализацию тормоза. Очень может быть что драйвера с алиекспреса накроются при попытке через них тормознуть движки. Чисто теоретически можно взять и готовые контроллеры вместе с движками от радиомоделей и воткнуть их вместо ходовых и не использовать совсем ардуину. Но проблемы с рулевым останутся, как минимум нужно будет раздербанить фабричную серву и на ее базе сделать серву из рулевого редуктора. На практике с ардуиной мне кажется проще, возможностей больше. Можно приколхозить экранчик. Экранчик я уже заказал, жду. Пока нет времени заняться переделками. Я еще брал для ардуины токовые датчики, гироскоп (для автоматического поддержания курса), цифровые термодатчики ( на движки). А также полукиловатные полевики для работы на "тормоз". Но пока что все только в планах. Думаю в той или иной степени все реализовать к лету. Т.к. на данный момент уже сезон окончен, зимой ездить тоже можно, но потом отмывать машину от грязи слишком муторно.
P\S Думается переделать переднюю подвеску полностью, пока что все не продумал и пока не понятно буду ли это делать т.к. слишком сложно для меня в механическом плане.

HECTEPOB

[user]Tygra[/user],

Основной целью данного проекта является повышение скилов автора в теме управляющей электроники. Коммерческой ценности проект абсолютно не имеет. С точки зрения пользователя (сына 2-х лет) пожалуй практическую ценность имеет только плавный пуск, возможно еще устранение "камазовского" руля (прокрутить редуктор вместе с рулевым валом достаточно тяжело).

1. Пульт и приемник у меня тоже хороший есть, со всеми защитами 6 каналов и т.д. Просто, как я писал ранее, экспериментирую пока на простой двухканальной аппаратуре, чтобы не испортить хорошую.

2. Заказал китайские драйверы моторов, по результатам установки сообщу.

3. Расскажите поподробней про "мертвую зону": смысл в том, что отключать рулевой мотор, когда показания датчика угла поворота рулевого вала находятся в диапазоне "нейтрального положения" рулевого вала, правильно я понял? Т.е. датчик угла поворота или собственно нейтрального положения должен быть установлен... Так? Не могли бы вы поделиться фоткой, какой датчик использовали и как его приколхозить?

Tygra

Приемник очень тяжело будет испортить т.к. он используется только на выход сигнала не более того, входы на ардуинке хорошие выскоомные, никаких проблем для приемника не создадут. Только запитать от отдельного стабилизатора т.к. 5в. для стабильной работы может не хватить (моему хватает). А никто и не ставил коммерческие цели в данном эксперименте. По рулевому все проще. Определяем длину импульса с приемника когда руль на пульте в нулевом положении, делаем не большой разбег влево вправо для создания "мертвой зоны". При превышении данных пределов выходит сигнал на вкл. реле поворота в ту или иную сторону, ну и защиту от одновременного ошибочного включения. Т.е. фактически эмуляция кнопок как на родном пульте, нажал влево крутит влево пока не отпустишь, также вправо. Только вместо кнопок рулевое колесо на пульту.. Для запуска всего нужны только несколько полевиков, все остальное в машинке уже есть. Т.е. с минимальными переделками.
P\S Учтите что у аналоговых и цифровых приемников разные длины импульсов.
P\P\S По поводу датчика задумки есть, но на данный момент нет подходящего переменного резистора. Думалось посадить одну из шестеренок на ось резистора.

HECTEPOB

[user]Tygra[/user],

Как вам такой вариант:

Устанавливаем на рулевой вал и корпус авто гибкие контактные пластины, как показано на рисунке:

В момент старта (включение питания) крутим руль влево вправо, чтобы поймать нейтральное положение.
Устанавливаем флаг "нейтрали" в 1.
Устанавливаем флаг блокировки в 0.

По прерыванию (замыкание любого из лепестков) делаем следующее:

Если флаг нейтрали установлен в 1, то сбрасываем его в 0 и выходим из прерывания.
Если флаг нейтрали сброшен в 0, то ставим его в 1, флаг блокировки в 1 и гасим рулевой мотор до момента возврата руля на пульте в нейтральное положение.

По возврату руля на пульте в нейтраль сбрасываем флаг блокировки в 0.

HECTEPOB

Вот еще такой вариант (вариация на тему).

Tygra

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

HECTEPOB

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

1. Потенциометр обычный (круглый)
2. Потенциометр движковый
3. Абсолютный энкодер

Как установить эти типы датчиков (с механической точки зрения) ума не приложу. Думал как наоборот упростить конструкцию.
Предложил использовать вместо линейного датчика обычный концевик, который позволит уверенно ловить нейтраль при управлении с пульта.

Tygra

Работать от нуля вариант бессмысленный т.к. управляет редуктором не шаговый двигатель, а обычный коллекторный. Энкодер тоже не "айс" т.к. не говорит о положении руля, говорит лишь о повороте на тот или иной угол, что так же нуждается в установке "нуля". Мне кажется что проще всего и надежнее всего это аналог сервопривода с обычным круглым переменным резистором.

HECTEPOB

Энкодеры бывают такие, которые говорят именно абсолютный угол относительно своего корпуса (выглядят по сути так же как обычный потенциометр). Есть даже с аналоговым выходом и с ШИМ выходом. Бывают магнитные и оптические.

В нормальной пропорциональной схеме, колесо на пульте отпустил, колеса ровно встали. Это идеал. Он достижим только с установкой датчика угла поворота рулевого вала (и то не факт с учетом люфтов в рулевом редукторе).

То что есть сейчас: Ручки на пульте отпущены, колеса прямо. Едем вперед. Надо повернуть положим влево. Даем ручку влево. Включается мотор (работает все время, пока ручка отклонена влево). Отпускаем ручку. Колеса по прежнему влево. Надо перестать поворачивать, как сделать? Правильно дать ручку вправо. Привод достаточно быстрый чтобы практически мгновенно перевести колеса вправо. А мне не надо вправо, мне надо перестать поворачивать. соответственно мне надо, чтобы когда я дал ручку вправо, колеса повернулись до нейтрального положения и остались прямо. После этого я готов отпустить ручку (колесо) на пульте и снова дать ее вправо или влево, если мне нужен новый поворот.

HECTEPOB

Новая идея датчика положения рулевого вала:

Дядька который меня учил электронике всегда говорил: старайся по максимуму использовать готовые компоненты Ж:-)))

1. Покупаем два модуля датчика освещенности: http://amperka.ru/product/troyka-light-sensor
2. Покупаем модуль светодиода: http://amperka.ru/product/troyka-led-module
3. Крепим светодиод к рулевому валу, чтобы светил вперед.
4. Делаем пару уголков, крепим их слева и справа, так чтобы при максимальном повороте колес светодиод светил непосредственно на датчик освещенности.

Получаем 2 сигнала на входе. Если оба сигнала меньше порога, то рулевой вал в "нейтрали".
Если один из сигналов выше порога, то положения руля определяем по нему.

Нелинейщина - да и фиг с ней, в крайнем случа скорректировать по таблице.

poraboloid

Лучше аналогично, но магнит и два аналоговых датчика холла.
Yedoo Ox, МК DD350W, 9А\ч LiFePo4  Yedoo City, МК QQ85,11A\ч LiIon
Yedoo Mezec new, MXUS 350, 9А\ч LiFePo4 Самовар на тесте.
EVO 2xDD500W в ремонте.Оxelo Dirt в доделке

gde700

Цитата: poraboloid от 17 Нояб. 2014 в 22:19
Лучше аналогично, но магнит и два аналоговых датчика холла.
Лучше цифровых, и не два, а один напротив центра. Здесь нужно просто сигнал среднего положения. Без плавного изменения сигнала.
Li-Ion microvast 55,5V 22Ah
DUAL-E-TWOW S2 15s1p 2x6fet nuclear! :)
Begode Tesla V2 литровая.

HECTEPOB

[user]poraboloid[/user]
Магнит и датчики холла - это хорошо, но слишком чувствительно к "болтанке" рулевого вала. Делал в свое время замену потенциометров автомобильных (датчики положения дросселя, расходомеры и т.д.). Муторное это занятие, хотя с оптикой тоже забот хватает. Но в данном случае попробую сначала на оптике (с магнитами уже наигрался Ж:-))))

[user]gde700[/user]
Один напротив центра дает возможность сделать остановку рулевого мотора при достижении нейтрального положения руля (не плохо, но не идеал).

Два дают полностью повторение закона управления как в модельном сервоприводе: угол поворота колеса на пульте пропорционален углу поворота колес на машине. Это идеал. К нему и будем стремиться.