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

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

ну если транзисторы еще есть можешь проверить. интересно конечно было было узнать успеет или нет

kulon
Offline
Зарегистрирован: 02.03.2016

Спрошу здесь, подсобите с управлением двигателем 400вт 24в

в родной схемке стояли полевые транзисторы IRF3205

хочу управлять ардуиной, куплю транзисторы с лог уровнем управления IRL3705N (в описании есть Logic-Level Gate Drive) или IRL3713 (мощнее, буква L в названии есть, но в инструкции нет надписи Logic-Level Gate Drive)

соединить выходы ардуино с затворами через резисторы 100ом, и также затворы притянуть к земле резисторами 10кОм.

несколько вопросов.

1. нужно ли затворы притянуть к земле резистором 10кОм? 

2. ШИМ можно (или нужно) подавать только на один из пары задействованных транзисторов?? (см картинку1)

3. Можно ли обойтись такой простой схемкой, или надо всякие защитные диоды, или еще элементы добавлять? (картинка2)

 

 

 

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

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

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

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

нижняя схема вообще странная. правильная если лишние точки убрать

диоды полюбому добавлять с таким мощным мотором

kulon
Offline
Зарегистрирован: 02.03.2016

Спасибо, откорректировал, понял что там хрень, притягивать затворы к земле сопротивлением, надо все 4 или достаточно два нижних?

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

jeka_tm пишет:
ну если транзисторы еще есть можешь проверить. интересно конечно было было узнать успеет или нет

Одно преобразование АЦП у STM8S занимает 14 тактов. Три такта на выборку, 10 на преобразование и 1 такт на синхронизацию. Максимальной частотой тактирования АЦП может быть F_CPU/2, т.е. 8мгц. Стало быть, одно преобразование будет длиться 14/8 = 1,75 микросекунды. Еще где-то около 20 тактов (не помню точнее) будет осуществляться вход в прерывание, или 20/16 = 1,25мкс. Таким образом, для идеального случая, когда КЗ случилось точно в момент начала выборки АЦП, защита отключит двигатель через 1,75+1,25 = 3 микросекунды. Для худшего случая, когда КЗ случится в момент, когда выборка уже закончилась, а преобразование еще не началось, сюда добавятся еще 11 тактов АЦП или 11/8 = 1,375мкс.  и совокупное время реккции можно грубо прикинуть, как 4,5 .. 5мкс.

Если я правильно понимаю картинки в даташите на AO4606, то чип выдерживает выделение около 800Вт с кристалла в течении 10 микросекунд. Коли так, то защита с временем отключения 5 микросекунд имеет неплохие шансы вырубить все еще до того, как наступит тепловое разрушение.

Что же касается проверенных фактов, то резистор типоразмера 1206 и сопротивлением 0.47 ома успевает сгореть раньше, чем приходит конец мосфетам. Тоже своего рода защита.

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

номинальная рассеиваемая мощность 1206 составляет 0.25вт и она будет достигнута тогда, когда через резистор сопротивлением 0.47 ома будет течь ток 0.729А.

Не сильно много для драйвера мотора, на мой взгляд.

Ток можно повысить, если уменьшить сопротивление. Для сопротивления 0.1 ома ток уже может составлять до 1.58А, чтобы не превышать номинальную рассеиваемую на резисторе мощность.

Наконец, вместо типоразмера 1206 можно взять 1210, который при одинаковой длине, шире примерно на 1мм. У него номинальная мощность обычно 1/3W и такой резистор сопротивлением 0.1 ома сможет в течении долгого времени пропускать ток 1.825А без существенного разогрева.

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

маловато будет .. может "ну её нафиг" эту токовую защиту? Смотрите, 130-й моторчик с якорем 1.5 ома (на 3в - типовой в разных дестких игрушках от паровозиков до р/у и перевертышей), нормально способен работать и от 6в, и его часто пихают в робо-тележки, питающиеся от 3-4 батареек АА, дабы "ускорить" .. и? На свежих батарейках будет 6в, и если оно куда-то "упрется", что достаточно легко, то ток через стоящий мотор будет 6/1.5 = 4А, что для мосфетов - вполне терпимо, а резистор защиты потребуется о-го-го какой. Стоит ли "овчинка выделки"?

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

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

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

Проверил, как STM8S отрабатывает General Call.  Никаких вопросов не возникло, все по писанному. На данный момент к этому "генералу" у меня в  драйвере подвязан простейший функционал -- при его получении мотор просто выключается.

А вообще в нем просматривается довольно обширный функционал для группового управления. General Call по своей сути -- это обычная отправка некоего пакета данных по интерфейсу I2C, где получателем значится устройство с адресом 0. Что-то типа бродкаста. Все устройства, слушающие интерфейс и поддерживающие General Call, примут этот пакет точно так же, как если бы он был адресован каждому устройству индивидуально. Другими словами, если мастер, например, пишет некое значение слейву в регистр 0, то он точно так же может записать это значение всем слейвам в регистр 0 (или любой другой регистр) посредством General Call. Если говорить про кучку драйверов с моторами, висящих на I2C, то посредством General Call можно всем одновременно скомандовать стоп или наборот, заставить крутить движки в каком-то определенном направлении с какой-то конкретной скоростью.

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

nevkon
Offline
Зарегистрирован: 20.01.2015

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

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

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

[General Call Address] - [Группе №4] - [Крутить влево] - [Группе №2] - [Стоять] - [Группе №8] - [Крутить вправо] - [Скорость N ] ...

Ну и, разумеется, никуда не исчезает индивидуальный адрес устройства, используя который можно "обратиться" к любому девайсу "персонально", в том числе и с запретом на обработку General Call.

По поводу кода для драйвера: функционал для управления по I2C более-менее реализован и на данный момент доступно следущее:


register 0: Motor control and status (R/W)
==========================================

  write -- run/stop motor:
  -----------------------
    0 -- run CW;
    1 -- run CCW;
    any other value to stop.

  read -- get current driver state:
  ------------------------------------
    0 -- motor runs CW;
    1 -- motor runs CCW;
    any other value -- motor is stopped.

    note: if bit 7 is set the motor control was
          disabled by dc current limitter.


register 1: CW rotation Speed (R/W)
===================================

  write -- set speed for CW rotation
  ----------------------------------
    two bytes, MSB first

    note: writting this register do not change
          direction of motor rotation and don't
          start motor if it was stopped.

  read -- get current speed value for CW rotation
  -----------------------------------------------
    two bytes, MSB first


register 2: CCW rotation Speed (R/W)
====================================

  write -- set speed for CCW rotation
  -----------------------------------
    two bytes, MSB first

    note: writting this register do not change
          direction of motor rotation and don't
          start motor if it was stopped.

  read -- get current speed value for CCW rotation
  ------------------------------------------------
    two bytes, MSB first


register 3: reserved
====================


register 4: reserved
====================


register 5: Motor control by signed value (R/W)
===============================================

  write -- set speed and direction as a signed byte 
  -------------------------------------------------
    1 .. 127 -- run motor CW with proportional speed
   -1 .. -127 -- run motor CCW with proportional speed
    0 -- stop motor

  read -- get speed and direction as a signed byte 
  ------------------------------------------------
    1 .. 127 -- motor runs CW  
   -1 .. -127 -- motor runs CCW 
    0 -- motor is stopped


register 6: DC current limitter (R/W)
=====================================

  write -- set dc current limit in milliamperes
  --------------------------------------------
    two bytes, MSB first

  read -- get dc current limit in milliamperes
  --------------------------------------------
    two bytes, MSB first

  note: if dc current will exceed the value written in 
        this register the motor rotation will be disabled 
        till next power on.


register 7: DC Current value caused stop the motor (Read-Only)
==============================================================

  write -- no effect
  --------------------------------------------

  read -- get dc current value caused stop the motor
  --------------------------------------------------
    two bytes, MSB first

  note: reading this register while motor is running
        will return random value


register 8: reserved
====================


register 9: Serial interface baud rate (R/W)
============================================

  write -- set serial interface baud rate
  ---------------------------------------
    two bytes, MSB first

  read -- get serial interface baud rate
  --------------------------------------
    two bytes, MSB first

register 10: CW rotation Speed in percents (R/W)
================================================

  write -- run motor CW at speed in percents
  --------------------------------------------
    0 .. 100 -- percents of full speed

    note: a value above 100 means 100%

  read -- get CW rotation speed in percents
  -----------------------------------------
    0 .. 100 -- percents of full speed

register 11: CCW rotation Speed in percents (R/W)
================================================

  write -- run motor CCW at speed in percents
  ---------------------------------------------
    0 .. 100 -- percents of full speed

    note: a value above 100 means 100%

  read -- get CCW rotation speed in percents
  ------------------------------------------
    0 .. 100 -- percents of full speed


register 12: reserved
=====================

register 13: reserved
=====================

register 14: reserved
=====================

register 15: Change I2C Address (Write-Only)
================================================

  write -- set new I2C address
  ---------------------------------------------
    four bytes as follows: 0x2E, 0xE2, 0x??, 0x50
    where 0x?? is new I2C address to be set.

  read -- not available
  ------------------------------------------


*** The DC Notor Driver supports I2C General Call. When General Call 
is received it stops the motor immediately.

Настройки драйвера (I2C адрес, скорость порта, порог срабатывания защиты и т.п.) хранятся в EEPROM, где они могут быть изменены либо посредством внешнего программатора, либо с помощью I2C-команд. В любой момент настройки могут быть восстановлены до состояния "по умолчанию" посредством подачи питания на драйвер при замкнутых выводах TX и RX. Для выполнения сброса выводы должны оставаться замкнутыми не менее десяти секунд.

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

Проект для IAR-а можно посмотреть здесь.

 

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

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

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

У него колес два, а драйвера ни одного. :)

Я довольно долго, фактически несколько дней, тестировал, пока все это дописывал. Методика тестирования использовалась такая: ардуино по каналам PPM и I2C в случайный момент отправлял случайную команду управления мотором. Набор команд состоял из всех, что поддерживаются драйвером, за исключением, разве, команд настройки самого драйвера. То, как драйвер управляется с мотором, никаких нареканий у меня не вызвало. Теперь бы неплохо, чтобы кто-нибудь еще потестировал.

 

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

я подбираю детали еще

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

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

Но, правда это оригинальное "обратное" управление по двум сигналам "dir", "pwm" .. обратное, потому что значащий .. ноль (микросхема 2ИЛИ-НЕ) :)

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

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

https://yadi.sk/i/RQmWj-rszc2tj

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

приехали предохранители. можно собирать драйверы

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

Внешние предохранители или на плату?

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

на плату конечно

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

Там же и и так места нет, куда ж еще предохранитель?

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

так это же 1206 самовостанавливающийся, да и я же плату переделывал

https://yadi.sk/i/DFYriOScybDqg

https://ru.aliexpress.com/item/20pcs-1206-2A-2000MA-PolySwitch-SMT-SMD-Resettable-Fuse/32704382892.html

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

 

biopack
Offline
Зарегистрирован: 27.08.2017

Вопрос к специалистам. Мотор при старте берёт 6А. При работе 2,5 - 3А. В наличии AO4606. Можно ли соединить в каждое плечо по две микросхемы (для уменьшения нагрева оных). И как это будет выглядеть на схеме?

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

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

biopack
Offline
Зарегистрирован: 27.08.2017

Это для модели карабля. Управление с RX-2B. Если можно, накидай схемку.

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

Схемы есть в этой теме, это раз. И второе: если управление с RX-2B (р/у приемник многих р/у игрушек, тоже ставил), то он как правило стоит на платке, где все транзисторные ключи уже стоят .. можно просто их пользовать напрямую для раскачки мосфетных полумостов. Ну и полумосты можно взять покруче, в серии АО34.. или IRF сколько-то точно видел, номера не помню.

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

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

в RX-2B там шима вроде нет. просто включил выключил

biopack
Offline
Зарегистрирован: 27.08.2017

Я прошу схему параллельного включения АО4606. (если это технически возможно) На старой плате стоят 4 реле (плата довольно древняя). Меня в этой модели заинтересовал корпус. Большой 1,20м лёгкий. На его базе сделал отличный гоночный катер. Передатчик и приёмник переделал на 27мгц. (Дальность управления до 300-350м) Подводит знание электроники. (Довольно поверхностное.) Помогите плиз!

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

поставь лучше более мощные транзисторы

biopack
Offline
Зарегистрирован: 27.08.2017

Да, пожалуй так и сделаю. Хотя, есть варианты.
www.compitech.ru/html.cgi/arhiv/01_07/stat_44.htm
Спасибо, тем, кто откликнулся.

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

biopack пишет:
Я прошу схему параллельного включения АО4606.

Рабочий ток у A04606 -- 6А. Импульсный -- 30А. Зачем городить огород там, где это не требуется?

biopack
Offline
Зарегистрирован: 27.08.2017

Как думаешь, прижать их пластиной алюминия к плате? Типа радиатора. Мотор мощный "540" при старте берёт 6-8А!

Будем пробовать.

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

a5021, зачем советуете "плохое"? Во-первых, согласно даташиту, разные плечи N- P- каналов держат разный ток, и в даташите пиковый, таки 20А .. и мы это и как раз с Вами уже обсуждали: не стоит превышать данные ТТХ, уже писал "будет подгорать" .. что Вы отвечали? "Да и пофиг" ..

Вот это ваше "да и пофиг" (решил понадеяться) едва не выбило сына с соревнований, когда АО4606 выгорел на таких вот мелких импульсных превышениях у него прямо на трассе. Благо дело, что сделал "двухсторонний" драйвер на 4 мотора.. переткнулся на вторую сторону и задействовал вторую пару драйверов.

.. но ведь ВЫГОРЕЛ! Напряжение 12.6в (свежие 3S), сопротивление якоря мотора 3.5ома .. пусковой ток посчитайте самостоятельно. Вот Вам и "шесть ампер".. :(

biopack
Offline
Зарегистрирован: 27.08.2017

Респект и уважуха тов. "Arhat 109-2"

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

Arhat109-2 пишет:

a5021, зачем советуете "плохое"? Во-первых, согласно даташиту, разные плечи N- P- каналов держат разный ток, и в даташите пиковый, таки 20А

Вот там пишут, что нифига не 20А, а как раз 30А. Максимальный ток у N и P, разумеется, разный, но я привел по самому слабому из обоих. "Плохое" пока не я советую, а вы придумываете.

Цитата:
.. и мы это и как раз с Вами уже обсуждали: не стоит превышать данные ТТХ, уже писал "будет подгорать" .. что Вы отвечали? "Да и пофиг" ..

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

Цитата:
Вот это ваше "да и пофиг" (решил понадеяться) едва не выбило сына с соревнований, когда АО4606 выгорел на таких вот мелких импульсных превышениях у него прямо на трассе.

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

Цитата:
.. но ведь ВЫГОРЕЛ!

"Вторая сторона" отчего-то не выгорела. Опять мировая закулиса измывается над вами в извращенной форме?

nevkon
Offline
Зарегистрирован: 20.01.2015

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

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

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

А ответ там прост как 3 рубля: мотор, жрущий в разгоне с нуля до 3.5-4А вроде бы и не выходит за параметры. Но, в скоростной тележке, где его могут дергать "туда-сюда обратно" с приодом в 2-4 миллисекунды - перетоки с учетом индуктивности легко выходят за те самые 4-5-6А в пиках.

Например, резкое торможение в крутом вираже с макс. скорости вперед, когда требуется раскрученное колесо с немалым моментом инерции внезапно заставить крутиться обратно на 10-20 мсек, а потом снова "вперед до упора" и так по 3-5-10 раз в секунду .. крайне жесткие условия эксплуатации, в т.ч. и защитных диодов, которые совсем даже не 6А у АО4606.. Вы просто посмотрите хотя бы видео с соревнований, где тележки весом в 150грамм летают под 3-5 метров в секунду, делая развороты на месте в 90 и более градусов. :)

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

nevkon пишет:

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

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

Цитата:
Вот и думайте после этого надо ли запас брать. Я обычно делаю 3-х кратный запас если есть возможность.

Пока мы не говорим предметно, сложно сказать, много или мало этого трехкратного запаса.

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

Arhat109-2 пишет:

А ответ там прост как 3 рубля: мотор, жрущий в разгоне с нуля до 3.5-4А вроде бы и не выходит за параметры. Но, в скоростной тележке, где его могут дергать "туда-сюда обратно" с приодом в 2-4 миллисекунды - перетоки с учетом индуктивности легко выходят за те самые 4-5-6А в пиках.

Никто никуда не выходит. Индуктивные выбросы могут характеризоваться повышенным напряжением, но не током. Да и даже если бы выходили вопреки законам физики, то тоже ничего страшного. За токи в течение этих миллисекунд отвечает параметр "Pulsed Drain Current" из таблички "Absolute Maximum Ratings" ранее упомянутого даташита. Причем к величине этих токов есть примечание, что длительность высокотокового импульса и частота повторения определяются, главным образом, температурой кристалла и условиями теплоотвода. Коротким высокотоковым импульсам сперва придется разогреть кристалл до температуры разрушения, что не быстро и не просто. Для мгновенной смерти кристалла от перегрева хороши будут токи короткого замыкания, но там и не 30А должно быть.

Цитата:
крайне жесткие условия эксплуатации, в т.ч. и защитных диодов, которые совсем даже не 6А у АО4606..

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