Arduino драйвер мотора для робота

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ага. тогда такой 

http://ru.aliexpress.com/item/New-Waterproof-Brushed-ESC-160A-3S-with-5V...

но проще наверно взять VNH2SP30

std
Offline
Зарегистрирован: 05.01.2012

Мб уже обсуждалось, но нужна схемотехника защиты транзисторов от того что выдаёт двигатель.

Двигатель 45 Вт, штатный режим 3 А 12 В, но он таскает 30-килограммовую дверь (через редуктор 1:50), 12 оказалось мало, дали 19-20, зашло норм. Ток в среднем 4.7 А. Двигатель работает секунд 15.

Планирую заменить релейные модули, управлявшие ими, на транзисторы, потому что 40А реле трудновасто найти а у 7А контакты склеились после 50-60 тестовых включений. Думаю пусковой ток ампер 15, хочу поставить мостовую схему с транзисторами вроде IRFR3505, IRFR2805 (до 31A).

Вопрос, чем их защищать, мб каких стабилитронов понаставить. Ничего такого особо экзотического типа TVS диодов нет. Есть Шоттки, но слабые (SS14), не думаю что подойдут. Подскажите пожалуйста по схеме, и как питать всё от 19-20. Хочу сделать входы с опторазвязкой.

Движки не ШИМятся, только вкл/выкл, в разные стороны (поэтому мост).

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

автомобильное реле посмотри и концевые выключатели обязательно

http://vovik8.ru/page/relau/

a5021
Offline
Зарегистрирован: 07.07.2013

std пишет:

хочу поставить мостовую схему с транзисторами вроде IRFR3505, IRFR2805 (до 31A).

Вопрос, чем их защищать, мб каких стабилитронов понаставить.

А зачем их защищать? Диоды внутри 3505 выдерживают ток до 71А постоянно и до 280А в импульсе. Быстрее выводы отгорят, чем кристал гикнется.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

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

По здравому размышлению, пришел к выводу что схема в #253 - наиболее адекватна и позволяет прилепив I2C сделать "интеллектуальный" мотор-шилд с командами типа "включи мотор вперед на 3сек со скоростью ххх". Соответственно, раз уж управление драйвером от МК, решил дополнить такой шилд входом для энкодера мотора для команд типа "проехать 100-500тиков энкодера вперед со скоростью ххх" и, если МК будет управлять 2-я моторами сразу, то дополнить командами "крутить оба мотора, поддерживая равную скорость на энкодерах" .. :)

Вопрос, какую тиньку взять для реализации такого мотор-шилда на 1,2 или сразу 4 DC-мотора?

Нашел Attiny24/44/84 .. вроде как заявлено 4ШИМ канала + I2C .. но посмотрев в даташит обнаружил что SDA сидит на одной ноге с ШИМ-выходом... печалька. Может кто-то подсказать "бюджетный" вариант что использовать?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

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

1. Связь с материнской платой по I2C или какому ещё интерфейсу.

2. независимое управление каждым мотором в виде "включить вперед/назад с заданной скоростью". Скорость от 0 до 100%, в относительных величинах (не в виде конкретного значения ШИМ!) для её удержания независимо от текущего состояния питания моторов (учет разряда аккумулятора, благо у DC-моторов характеристика линейна от напряжения).

3. Защита схемы поста 253 от сквозняков при переключениях (это самое простое)

4. Работа с энкодером мотора в режимах "серво": включить мотор с заданной скоростью на заданное количество "щелчков" энкодера;

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

6. Считывание показаний энкодеров (можно с защелкиванием значений на момент команды).

Соответственно, 1 управляющий МК (предполагалась тинька) должны управлять несколькими драйверами 2,4,6,8 DC-моторов. (полный привод + запас на прочие исп. устройства). Наиболее привлекательным выглядит вариант на 4 мотора.

Соответственно, требуется 3(по схеме) + энкодер = 4 управляющих/приемных входа-выхода на мотор + 1 ADC вход на контроль напряжения питания моторов. Дополнительно можно добавить по 1ADC входу с каждого мотора для защиты по току выходных мосфетов (у меня кандидаты - АО4606 с 5А на канал и 30в предел питания). Плюс 2 ноги на реализацию I2C для связи с главным МК.

Итого на МК должно быть 4*(4|5)+2+1 = 19..23 ноги программируемых выходов, ADC блок на 4-5 входов, таймер(ы) с суммарно 4-8 выходами ШИМ, можно с небольшим ФЛЕШ (думаю в 2-4кб влезет всё) и небольшим ОЗУ байт на 128-256. Ну и понятно, чем дешевле - тем лучше.

Предварительно рассматривал вариант ATtiny13 по 1шт на мотор .. но альтернативный вариант с ATmega48 похоже оказывается предпочтительней по цене и упрощению программирования (есть нормальный I2C на прерываниях, есть 3 таймера и 6 ШИМ выходов при необходимом миниуме в 4ШИМ выхода и программной переброске "куда" подавать ШИМ) ..

В целом работа тиньки виделась так: в основном цикле эмулируем программно интерфейс I2C и слушаем его постоянно. По командам на включение мотора выставляем требуемый DIR и OCRх на заданный счет и открываем требуемую ногу на выход ШИМ. Энкодер ловим на прерываниях и превращаем мотор в "серводвигатель".. никаких "групп" моторов. Значение ШИМ корректируем по питанию в основном цикле.

Для меги, появится возможность унести обработку I2C в прерывание и в основном цикле программно разбираться с группами моторов при синхронном движении: сравнивать показания энкодеров и корректировать ШИМ моторов. Сам ШИМ можно делать полу-программно на прерываниях от OCRx вручную переключая состояние требуемого выхода.

В теме про "новое на Али" Axill предложил использовать STM8 .. кто что скажет "за" этот вариант? Что и как можно реализовать на нем, можно ли сделать на 1МК драйвер для 4-х моторов с групповым управлением и какие решения можно тут применить?

Есть ли иные варианты с ценой управляющего МК ДО 40руб/шт (в лотах 5-10шт)? (Желательно 20 :)

До 40руб - потому как ATmega48 можно найти по 35руб/шт. использовать что-то иное вижу смысл только при существенном удешевлении МК или разработки на нем...

axill
Offline
Зарегистрирован: 05.09.2011

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

в массовых изделиях в угоду себестоимости все наоборот

у вас не доконца сформированы требования к железу на мой взгляд. Нужно не нужно не ясно, но я бы посмотрел в сторону специализированных решений. Или интегральный мотор контроллер или МК с поддержкой внешнего железа для управления моторами. Я там упоминал чип Stm32с cortex m3. В них стандартно идет поддержка управления моторами. Правда сам не погружался, но производитель позиционирует эту фичу для решений подобных вашему

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Как понял даташит эта фича для поддержки не DC моторов, а шаговиков, но могу и ошибаться.. да и "поддержки там" .. с гулькин нос. Это "не то вовсе". По крайней мере мне так показалось .. может кто разжует? Пока я не вижу КАК ЭТО (STM8) можно применить тут лучше чем АТмегу48..

Изделие пока "для домашнего" применения, но уже есть с 5-ок желающих поиметь тоже такой драйвер .. полумостов АО4606 пришло 50шт .. и если получится полезно, могу запаять дополнительно. Поскольку внезапно выяснилось что управляющего МК нет, а то что есть "ни падходит", а "цена поставки" друзьям уже озвучена и сами драйвера уже разведены так сказать "блочно" (осталось докрутить МК с I2C) .. возник вопрос "И? Чем заменить?" :)

Нужно-не нужно .. зависит от управляющего МК. Может - значит нужно, нет - ну и пофиг, "обойдемся".. :) Просто защиту по току организовать достаточно легко: напруга питания оцифровывается так и так, а если ещё оцифровывать ногу с верхнего плеча полумоста, то зная его сопротивление можно прикинуть ток и соответственно оперативно заблокировать выход во избежании .. (есть у меня несколько моторов с 2-х омными якорями, а с 12в питающего как планируется .. пожгет нафиг при удобном случае .. так-то, на ходу, они поламперники, ежели вчё).

a5021
Offline
Зарегистрирован: 07.07.2013

Arhat109-2 пишет:
В теме про "новое на Али" Axill предложил использовать STM8 .. кто что скажет "за" этот вариант?

А чего тут говорить. В "моторных" приложениях STM8 рвет атмегу, как есть.  STM8 имеет на первом таймере комплементарные PWM-выходы специально заточенные на управления полумостами. Имеются фишки и для аппаратного решения проблемы сквозняков (т.н. deadtime insertion). На этом же таймере предусмотрен интерфейс для непосредственного подключения энкодера. Т.е. сам таймер аппаратно считает щелчки и опеределяет направление вращения и, соответственно, напавление счета. Подробно я не вникал, но похоже можно и событие (прерывание) генерировать по достижению счетчиком некоего значения. Тобишь, есть практически все аппаратные фичи для реализации моторного серво-функционала. Однако, без свинства со стороны ST Micro не обошлось (как же без этого, маркетинг, едрена). На первый таймер можно вешать либо мотор, либо энкодер, а на других таймерах нет ни моторного, ни энкодерного функционала. Т.ч. выбираем, чем мы будем управлять аппаратно, а второе придется делать ручками в программе.

Еще более мощные моторные фичи есть у STM32. Даже на младших F030 мотор и энкодер можно подключать на разные таймеры, причем энкодерный таймер может генерировать события для моторного таймера. Сюда же можно подцепить и еще один таймер для аппаратного измерения скорости вращения, ускорения и т.п. Вобщем, красотень да и только, но..

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

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

А5021, Может я не так понял даташит, конешно .. но "первый таймер" там ровно один и стало быть 1 камень сможет управлять ровно 1 мостом или таки нет и я что-то прсмотрел? А если оно так (и вот про энкодер - пасибки, видел что можно захват делать на нем же, но не узрел что оно "или" то или другое), то получается что по цене оно даже дороже тиньки 13-й выйдет .. или опять ручками, что хрен редьки не слаще.

Кстати, вглядывался в вашу реализацию и как понимаю у Вас там стоит и ЛИ1 (74HC08) и тинька .. можно поинтересоваться зачем? И почему на плате токоограничивающие резисторы номиналом 220 ом, а в схеме Вы рисовали по 10?

Можете уточнить по вашему решению "что к чему"?

P.S. В общем я пока склоняюсь к какой-то мелкой меге и драйверу сразу на 4 DC-мотора с полупрограммной реализацией ШИМ и синхроннизации по энкодерам.

ssss
Offline
Зарегистрирован: 01.07.2016

Arhat109-2 пишет:

стало быть 1 камень сможет управлять ровно 1 мостом или таки нет и я что-то прсмотрел? А если оно так (и вот про энкодер - пасибки, видел что можно захват делать на нем же, но не узрел что оно "или" то или другое), то получается что по цене оно даже дороже тиньки 13-й выйдет ..

Не уверен... СТМ32Ф100 или СТМ32Ф051 вполне хватит на 4 мотора... да и по цене не дороже...

a5021
Offline
Зарегистрирован: 07.07.2013

Arhat109-2 пишет:
Может я не так понял даташит, конешно .. но "первый таймер" там ровно один и стало быть 1 камень сможет управлять ровно 1 мостом или таки нет и я что-то прсмотрел?

Тут конечно еще и от схемы будет зависеть, но в самом простом варианте, да, одним мостом.

Цитата:
то получается что по цене оно даже дороже тиньки 13-й выйдет

Как-то я не улавливаю тонкостей такого экономического счета. Самая дешевая тинька на али, что я нашел -- 20 руб при покупке десятком. stm8s003f3p6 при тех же раскладах продают по 16руб. Но тут даже не в этих нескольких рублях разницы дело. В тиньке нет шестнадцатибитных таймеров, не говоря уже про всякие "моторные" фичи, аппаратные интерфейсы и лишние копыта, что есть у STM8S. Сравнивать их вообще не вполне корректно.

Цитата:
или опять ручками, что хрен редьки не слаще

На меге, по любому, ручками, но вас это вроде же не смущает? А вообще, при той цене, что просят за STM8S003, ставить их надо по одному (а то мож и по два) возле каждого моста. Можно сделать довольно интеллектуальный драйвер с самым забористым функционалом. Управление (и взаимодействие с соседними драйверами, если понадобится) по I2C.

Цитата:
Кстати, вглядывался в вашу реализацию и как понимаю у Вас там стоит и ЛИ1 (74HC08) и тинька .. можно поинтересоваться зачем?

Схема у этой платы вороде такая:

 

Говорю "вроде", т.к. их было несколько версий и теперь я уже не вспомю всех подробностей.

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

Цитата:
И почему на плате токоограничивающие резисторы номиналом 220 ом, а в схеме Вы рисовали по 10?

22, вообще-то, а не 220. Полевики не слишком мощные, емкость затвора не очень большая, да и частоты переключений -- порядка пары десятков килогерц. Там пойдут вообще любые резисторы в пределах 100 ом. Резисторы эти выполняют антизвоновую функцию и ставятся больше в целях подстраховки от всяческих "а вдруг". Я поставил те, которые быстрее всего выловились в нужном количестве из коробки с распаем.

Цитата:
В общем я пока склоняюсь к какой-то мелкой меге и драйверу сразу на 4 DC-мотора с полупрограммной реализацией ШИМ и синхроннизации по энкодерам.

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

Если бы этот вопрос встал передо мной,  учитывая предъявляемые вами требования, я бы наверное выбрал stm8 на каждый мост. Есть конечно же соблазн вместо stm8s поставить stm32f030, но его трехвольтовость и потребность либо в трансляции уровней, либо в драйверах затворов, портят простоту и изящество идеи.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Пасибки, я примерно так и представил себе вашу схему. С резисторами - понятно. У меня теже самые АО4606, вот и озадачился "расхождением". :)

Как понимаю, Вы собрали полноценный драйвер "для бедных" (что обсуждался тут всю тему, и ради которого я и заказывал себе эти полумосты с ЛИ1) и дополнительно прикрутили к нему тиньку, которая выступила как оконечное устройство управления. У меня в таком качестве планировалась мега2560, ибо хотел собрать 4-8 таких драйверов на 1 плату и тупо прицеплять к своей мега2560 как "плата моторов" (собственно и пришли АО4606, 2N7002 и 74HC08).

Вариант с I2C возник совсем недавно, когда взялся разводить плату .. обнаружилось что к нему есть интерес не только у меня, но и у знакомых (УНО, proMini, etc.) кто также как и я столкнулся с простым набором детских вопросов "а почему ТАК нельзя?" .. действительно, почему? :)

Соответственно, в отличии от вашего решения, я смотрю на схему из #253, где тинька - не оконечное управляющее устройство, а промежуточное - для защиты драйвера от "кривых ручек, глазок, молодых мозгов и т.п." и не имеет доп. обвеса в виде ЛИ1 или инверторов. Вот как дополнительное устройство, оно мне кажется должно быть "чем дешевле - тем лучше". И тут в процессе поиска я внезапно обнаружил что 1МК на 4 мотора оказывается в 3(три!) раза дешевле чем на каждый драйвер свой камень.. что и озадачило.

Фактически передо мной стоит выбор:

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

б) сделать плату на 4 DC-мотора с интеллектуальным протоколом по I2C .. надо подобрать камень на плату .. меньше всего геморою вижу на младших мегах с 4-6 ШИМ каналами, 8ADC и встроенным I2C .. то что кое-что надо делать "ручками" - не смущает ибо "это просто". Замены тут из иных серий без геморою того или иного вида - я НЕ ВИЖУ, почто и просил помощи просветить меня. Конечно же, тут варианты с преобразованием уровней - также отпадают и сразу.. К этому варианту нашел ATmega48(P) за 33руб в партии 10шт. - думаю заказывать или нафиг.

в) делать 1камень - 1 драйвер (ишо проще, совсем без обвесу) .. этот вариант мне теперь уже не нравится сразу по нескольким причинам: связь и все прелести синхронизации моторов - только через "главный компьютер"; это банально дороже в 2..3 раза - для меня и тех кому интересно ибо драйверов надо не менее 4шт в комплект, а докупать что так, что этак по п.Б .. то есть ожидание ещё пары месяцев пока оно доедет

.. сентябрь на носу, однако.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Сам перечитал и понял, что нефиг мудрить и надо делать вариант "а" как он и планировался. Всем спасибо.

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

Arhat109-2 пишет:

Сам перечитал и понял, что нефиг мудрить и надо делать вариант "а" как он и планировался. Всем спасибо.

бери это и делай шикарное управление двумя моторами

http://ru.aliexpress.com/item/Free-Shipping-10-PCS-LOT-X-New-ATMEGA8-ATMEGA8A-AU-TQFP32-Instead-of-ATMEGA8L-8AU-and/32671660869.html?spm=2114.30010708.3.363.jy1vdt&ws_ab_test=searchweb201556_0,searchweb201602_4_10039_10048_10057_10047_10056_10055_10037_10049_10059_10033_10046_10058_10032_10045_10017_10060_10061_10062_10063_412,searchweb201603_8&btsid=ed848ce5-82a7-47e1-8d0a-6471103cac83

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

в этом корпусе Atmega48 предпочтительнее, ибо практически UNO и стоит теже самые бабки. :)

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

328 за 30р не купишь :)

тогда уже atmega88

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Блин. потерял ссыль на китайца с ATmega48PA по 33руб в партии 10шт .. или опять курс скакнул .. по начинке - это таже УНО, только с 4 килами флеша. Вот по 37руб на сегодня: http://ru.aliexpress.com/item/Free-shipping-10pcs-lot-ATMEGA48-20AU-ATME...

Я думал что можно найти что-то в корпусах поменьше, что потянет 4 мотора сразу.. :)

a5021
Offline
Зарегистрирован: 07.07.2013

Я, я нашел. :) Семь PWM-каналов выведено наружу, т.ч. до семи моторов в варианте "для бедных" одновременно.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

del

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Я тут, правда, отложил в долгий ящик свой проект http://arduino.ru/forum/proekty/robot-kartograf , но некоторые мысли остались.

Arhat109-2 пишет:

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

1. Связь с материнской платой по I2C или какому ещё интерфейсу.

2. независимое управление каждым мотором...

4. Работа с энкодером мотора...

Наиболее привлекательным выглядит вариант на 4 мотора.

Собственно по ращзмышлении пришел к выводу, что более двух моторов и энкодеры - вещи несовместимые.

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

Отсюда, как мне представляется, следует очевидный вывод: если мы используем энкодеры, привод следует осуществлять на 2 колеса.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

andriano пишет:

Отсюда, как мне представляется, следует очевидный вывод: если мы используем энкодеры, привод следует осуществлять на 2 колеса.

Если энкодеры нужны только для подсчёта пройденного расстояния, то очевидно, что такой энкодер должен стоять на отдельном пятом колесе, которое катится по земле, иначе, как вы правильно заметили, при проскальзывании колёс будет ахтунг. 

Тоже потихонечку обдумываю один проект, с приводом на все 4 кодеса, правильный подсчёт пройденного расстояния - одно из требований. Пока думки додумались только про пятую ногу у кобылы :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

DIYMan пишет:

Если энкодеры нужны только для подсчёта пройденного расстояния...

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

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

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

Верное измерение пройденного расстояния - да 1 энкодер на 5-м колесе. Так построены в т.ч. и все "геодезические УАЗики" и не гражданского применения в т.ч. :)

В общем, пока остановился на своем первоначальном варианте .. есть куда втыкать и есть все детали в наличии .. остальные - обойдутся пока.

a5021
Offline
Зарегистрирован: 07.07.2013

Моторы то хоть пятивольтовые, надеюсь?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

нет конечно. 9-вольтовые. :)

a5021
Offline
Зарегистрирован: 07.07.2013

Ну я предупредил, а там уж дело хозяйское.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Так я же "в курсе" .. мой вариант этого драйвера тут уже обсуждали ранее. Вот, с учетом того обсуждения и взялся пилить .. только вместо того чтобы поставить спец. МК строго для управления, этим будет заниматься Мега2560 "между делом" через библиотеку моторов дабы "не попортил детскими шаловливыми ручками". Развожу плату .. пока в формат Мега2560 или влезает 4 мотора (и больше по сути ничего, ибо ЛИ1 пришли в DIP корпусах) или только 2, но зато умещается весь наш "блок-расширитель пинов" для подключения всего остального нашего барахла к нашему "Лего-кирпичу" (12 серв + 6 датчиков на 14-19 ноги + 8 аналоговых датчиков на АD0-АD7 + 2 гнезда для датчиков цвета TCS3200 на 5-й таймер + по I2C гироскоп, гирокомпас и альтиметр прямо на эту же плату) .. в общем, пока как обычно: хочется и рыбку съесть и костями не подавится. :)

a5021
Offline
Зарегистрирован: 07.07.2013

О! Значит скоро будет много горелых мосфетов.  Ждем-ждем. :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

С фига ли? На макетке он работает вполне уверенно. Там жеж транзюки верхними мосфетами рулят.. :)

P.S. Схема примерно как из поста 347, ежели вчё.

a5021
Offline
Зарегистрирован: 07.07.2013

Медленная она, эта схема из сообщения №347. Без принудительного гашения ШИМ-сигнала перед переключением направления, я бы не рискнул ее использовать.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Так я жеж и отписался что будет управляться посредством стандартных вызовов моторной библиотеки. Конечно же перед переключением направления ШИМ будет отключаться. Ну и как мы с Вами уже выясняли, там вопрос "медленности" в обеспечении задержки в 2 микросекунды на переключение, а ШИМ в одном направлении оно типа держит до 160кГц и выше .. для моторов "более чем" достаточно. не? :)

a5021
Offline
Зарегистрирован: 07.07.2013

Я моторными библиотеками не пользовался, т.ч. не знаю, как они направление переключают. С точки зрения частот ШИМа, тут, да, схема позволяет использовать чуть ни мегагерцы.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Так это моя библиотека. Как напишу так и будет переключать .. :)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

драйвер на stm8s003f3p6

задумка следующая: берем схему из этого поста, цепляем к ней стм, управление как сервой так как драйвер будет с реверсом. 90 "градусов" -стоит. + максимум газа в одну сторону, 180 - максимум в другую

уже набрасывал код считывания ppm на меге328, и на тиньке, вот для меги:

#define PPM_pin      A0
byte PPM;
unsigned long time;


void setup(){
  Serial.begin(115200);
  pinMode(PPM_pin, INPUT);
}

void loop(){
  PPM_read();
  Serial.println(PPM);
  delay(200);
  
}

//=============================================================================
//                           Считывание сигнала PPM
//=============================================================================
void PPM_read(){
  while(digitalRead(PPM_pin) == 0);
  time = micros();
  while(digitalRead(PPM_pin) == 1);
  time = micros()-time;
  if (time>535 && time<2385) PPM = map_X(time, 536, 2384, 0, 180);
  //Serial.println(time);
}


//=============================================================================
//                          Переделанная функция MAP
//=============================================================================
int map_X(int x, long in_min, long in_max, int out_min, int out_max){
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

далее управление мотором из этого поста

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

честно сказать на каких пинах шим как то разобрался, но уже забыл, и сразу по картинке не понял

нужен 2 шим канала, 1 обычный цифровой, и пин для считывания ppm сигнала. далее хочу еще возможно прицепим контроль тока, но это если изначальный вариант сделаем

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

a5021
Offline
Зарегистрирован: 07.07.2013

ШИМ у них возможен на любом выводе из тех, где на картинке присутствует обозначение "TIMx_CHy".  Интереснее, наверное, будет задействовать первый таймер (TIM1), как самый навороченный. У него в арсенале есть и моторные функции, навроде Deadtime insertion, но я с ними не разбирался и как их тут использовать пока не скажу.

Считывание ppm можно сделать тоже через таймер, только в режиме захвата. Сигнал подавать так же на вывод TIMx_CHy. Скорее всего, стоит использовать другой таймер, чем для подачи ШИМ-сигнала на моторы. У мотороного таймера низкая частота, а для хорошего разрешения при измерении ppm частоту бы взять повыше.

Контроль тока через измерение напряжения на "измерительном" резисторе. Линию измерений подавать на какой-то из выводов AINx.

Кварц в схеме не нужен, пины RESET, SWIM и землю стоит вывести на разъем программирования. Можно предусмотреть вывод пинов SCL и SDA на разъем расширения для того случая, если драйвером захочется управлять по I2C. Пины UART-а тоже лучше не занимать под моторный функционал, т.к. UART может оказаться удобно использовать при отладке, а при желании и управлять мотором через него же.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

согласен. i2c тоже очень удобно при большом количестве моторов

хорошо я начну разводить плату, детали у меня есть

с учетом твоих размышлений какие выводы шим мне можно использовать, а также какой под захват ppm и i2c. выведу сразу все

a5021
Offline
Зарегистрирован: 07.07.2013

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

Думаю стоит отдать любые два TIM1_CHx под ШИМ для мотора, один из TIM2_CHx для считывания ppm и один AINx для аналоговых измерений. Остальные входы-выходы задействовать исходя из потребностей в них девайса. Не знаю, чем там еще дергать нужно будет, т.ч. смотрите сами. Ну и I2C (оба вывода), на свой отдельный разъем, SWIM, RESET и землю на другой, два вывода UART на третий.  Пока так вижу.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

хорошо. завтра за обед попробую сделать

+ уже начал. под i2с наверно нужно еще 3 пина для выбора адреса

++ пока так. еще еще что переделать

a5021
Offline
Зарегистрирован: 07.07.2013

Надо схему. По этим линиям я три дня буду выяснять, откуда чего выдавать. И размеры платы стоит уменьшить, если для крепления прямо на мотор делается. Разъем под питание там точно нужен?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Давайте уточню ТЗ.

1. Размер мотора "130-Dc motor" стандартен 15х20х25 мм - это "крайний габарит" с крышкой якоря, и он несколько скруглен. Плоская площадка до крышки якоря имеет размеры 14х20мм, выход щеток с одной стороны мотора "выпирает" на примерно 1.5мм, что практически не учитывается в его габаритах и потом внезапно обнаруживается.

Соответственно, размер платы должен быть или 20х14мм или 20х25мм, но не больше.

2. Попасть в стандартный диапазон управления сервомашинками по ШИМ. Помню, что частота ШИМ должна быть фиксом 50 или 60гц, есть разные стандарты. А минимальная ширина импульса типа 544мксек (=0грд). Сколько "макс" - не помню. Изменение ширины импульса "мертвой зоны" (чувствительность сервы) примерно 1-4мксек, от модели.

Надо бы найти стандарт управления сервами и почитать. Опираться на ТТХ конкретных серв - не стоит, они бывают несколько разными.

3. Если есть возможность Дополнить разъем контактами I2C это будет здорово. Тогда можно в скетче сделать хитрые конманды по управлению несколькими моторчиками "синхронно" по адресу "всем". Но непонятно будет ли место на плате, хотя бы для допайки адреса перемычками..

4. Все "не групповые" интерфейсы типа SPI - малоинтересны, ибо не позволяют экономить ни ноги ни код управления.

Интересен конечно же вариант "драйвер на моторое" как "умный мотор". Отдельно подключаемые платы теряют всю красоту этой идеи .. отдельный драйверов моторов .. как грязи.

5. ШИМ самого мотора (не входящего сигнала!): из практики делать КАК МОЖНО НИЖЕ. Неплохо работает вариант в 30гц, но ещё лучше в районе 10гц.  Причина банальна: интегрирование ШИМ на конденсаторе мотора (Да, про него тоже надо не забыть!). ШИМ для медленного вращения приводит к эффективному снижению питающего напряжения .. то есть "управление напряжением", от которого выходная мощность зависит ЛИНЕЙНО.

Чем ниже ШИМ самого мотора, тем в большем диапазоне получится управление мотором. Типовой ШИМ Ардуино (490гц) уже не тянет мотор даже в режиме ХХ при скважности менее 25% - analogWrite(50) и менее. Для частоты ШИМ 30гц можно получить лучшую управляемость, вплоть до analogWrite(10).

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

a5021 пишет:

Надо схему. По этим линиям я три дня буду выяснять, откуда чего выдавать. И размеры платы стоит уменьшить, если для крепления прямо на мотор делается. Разъем под питание там точно нужен?

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

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Пост №440:

1. сигнал DIR не доведен до микросхемы.

2. Плата явно больше чем 15х25мм и выводы на мотор не соответствуют их местам на моторе. Также отсутствует искрогасящий конденсатор мотора. Он нужен в диапазоне 10-100н х 15в керамика. Проблематично закреплять на моторе, что исключает тезис "умный мотор, как серва".

Для платы 20х25мм (исправлено) выводы на мотор на короткой стороне платы на расстоянии 4-5мм от меньшего края, симметрично по 5-6мм от середины. Они же могут впоследствии служить и монтажным креплением платы на моторе.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Arhat109-2 доведен с пересечением. нужно еще смотреть как его провести

это макет, а не конечная плата!

и ты не заказчик, а я не исполнитель))

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Это так, я думал ты - заказчик .. :)

Но, если затачиваться под 130-й мотор, то надо учесть его типоразмеры и посадочные места и конденсатор .. :)

Кстати, ошибся с размером платы. Верно так: 20х25мм в посту №444 ..

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Так там "чему работать" то? Ежели все программно. Кстати, почто взят STM08, а не тинька13, из-за I2C?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

в теории все работает пока не начнется практика

дешевая, есть в наличии

a5021
Offline
Зарегистрирован: 07.07.2013

Arhat109-2 пишет:

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

А нужны они, эти перемычки? Адреса можно и в EEPROM хранить, а задавать, воздействуя через другой интерфейс. Например, шлем по UART в МК что-нибудь вида ATI2CADDR=0x45, контроллер сохраняет параметр 0x45 в EEPROM и в дальнейшем отвечает по I2C именно c этого адреса. И такой вариант, разумеется, не единственный.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

почему нет. вполне))