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

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

постарался учесть все пожелания. размер белого прямоугольника 15х25мм

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

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

заливку землей еще не делал. потребуется 1 перемычка земляная. проводна или резистор 0805-1206. резисторы 0603, конденсаторы 0603-0805

на измерение тока пока места нет

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

А если сделать 2-х стороннюю плату с внешними перемычками? В принципе если стм поставить на одной стороне, а все остальное на другой смотрю надо будет всего 4 проводка сбоку прокинуть и плата почти в 2 раза похудеет в размерах (разве что потолще будет немного).

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

не хочу двухсторонную. сложнее в изготовлении. стараюсь только односторонную

добавил адресацию для i2c. если бы отказаться от uart можно было бы наверно  добавить измерение тока

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

Извините, чем сложнее? Отверстий в этой плате нет и не будет (проводки то соединяющие сбоку можно прокинуть), совмещать рисунок не требуется. Сложность только рисунок нанести для травления (вы ведь все еще лутом балуетесь? для фоторезиста такой проблемы нету).

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

лутом с ламинатором. мне лично с ламинатором намного проще, меньше заморочек. технологию фоторезиста знаю, делал штук 5-10 плат, но мне неудобно. спорить чем лучше фоторезист не хочу

A5021 что скажешь о отказе от UART? и вообще так ли  обязательно контроллировать ток

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

UART -- это больше воспомогательный фукнционал и если уж совсем критично, то, разумется, от него можно отказаться. В качестве компромисcа можно отказаться от линии RX, оставив TX.

По разводке. Не выйдет ли поскладнее, если транзисторы в sot-23 повернуть? Левый на 90 град. влево, а правый на столько же вправо?

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

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

2-х стороннюю плату делать совсем не стоит, ибо при её посадке на мотор придется чем-то изолировать вторую сторону. И ещё, если что-то перебросить на сторону монтажа платы на мотор, то это что-то будет упираться в поверхность мотора и не позволит как следует закрепить плату .. разве что мосфеты для доп. охлаждения корпусом мотора .. но, имхо "ненадежно" получится.

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

Размер платы 15х25 -- "самое то" для посадки непосредственно на мотор.

Ток контроллировать в целом незачем, если речь не о спец. релизах 130-го мотора .. можно конечно и тут "ежа проглотить": они есть 1.5-вольтовые с сопротивлением якоря в .. 1.2 ома .. вот ежели такие подключить к 6-9-12 вольтам, то да .. сгорит "фсё нажитое нечестным трудом" .. :)

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

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

посчитал датчик тока. при одном 0,1ом резисторе макс. ток 1,58А при темпловыделении 0,25Вт. 0,25 это максимум для 1206, хз только в каких условиях. и напряжение 0,158В. можно увеличить макс ток в 2 раза и поставить 2 резистора параллельно по 0,1ом 1206 . макс напряжение получится тоже. операционник не впихнуть. или отказаться или возможно стмка может такие уровни измерять? плюс это же импусльный ток получится, который еще выше, кондесатор чтобы сгладил нужно еще резистор поставить. итого 2 резистора 1206 + резистор 0603 + конденсатор 0603. многовато получается. будем упиратсья и делать измерение тока? там вроде как размеры платы можно увеличить до 20х25

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

Arhat109-2 стараюсь наоборот избавится от проводных перемычек. токоограничивающих резисторов кстати нет)

короче с платой пока хватит. делаю схему чтобы a5021 проверил не ошибся ли я где с пинами

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

Да нет в нем смыслу в этом "измерителе тока" .. 130-е моторы в рабочем режиме практически все 0.5 амперники, различается только пусковой ток. Получить его в район 5А (предел для мосфета) - практически нереально на типовых моторах. Хоть на каких.

Там и так, моточные провода испытывают до 50а/кв.мм плотности токов .. куда уж больше то? :)

Кстати, разворачивать мосфеты на мотор для охлаждения - не стоит. При длительной работе моторы вообще-то сами хорошо греются.

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

1 перемычку можно и разрешить :)

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

вроде все видно. A5021 проверь, мало ли не те пины выбрал. конденсаторы по питанию моторов и драйвера не показывал

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

Из схемы явствует, что ШИМ на моторы подается с первого и третьего каналов таймера 1. Вход управления ppm подается на первый канал таймера 2. Все подходит. Так понимаю, что питание на мосфеты просто не показано на схеме, но оно есть. Сходу какого-то  криминала не вижу.

Можно перекинуть затвор с PC6 на PC7. Дорогу меньше тянуть, пол-миллиметра пространства добавится. :)

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

Есть замечания по емкостям: Vcap должен иметь емкость ближе к 1мкф, так же хорошо бы поставить 0.1мкф от RESETа к земле. Все-таки мотор рядом, шумит, искрит и лучше бы подстраховаться.

Насчет токоизмерительных резисторов, на али есть выбор этого дела -- резисторы с 1% точностью больших размерностей, типа 2010, 2512 и т.п., соответствующих мощностей. Правда, размеры здесь скорее минус, но делать нечего.

 

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

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

насчет емкостей даже не правил. поменяю на 1мкф, для ресета добавил

подтяжку i2c специально не делал. места нет

питание мосфетов да не показывал просто

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

Резисторы от затворов к земле я бы увеличил. 47к или даже больше (можно и 100к). Выходы у stm8 хиленькие и если еще 10к на них будут висеть, то не лучшим это образом будет сказываться на времени заряда затвора. Частоты, конечно, низкие и сильного влияния это не окажет, но чего уж зря-то.

Начинаю писать код. Пока общие наброски. Для упрощения попробую изобразить некий ардуино-стайл:

void setup(void) {
 
    //  I2C interface pins
  PIN_MODE(B, 4, OUTPUT + OPEN_DRAIN);  // PB4 -- SCL
  PIN_MODE(B, 5, OUTPUT + OPEN_DRAIN);  // PB5 -- SDA

    // Motor control pins
  PIN_MODE(C, 3, OUTPUT + PUSH_PULL);   // PC3 -- PWM B (TIM1_CH3)
  PIN_MODE(C, 5, OUTPUT + PUSH_PULL);   // PC5 -- DIR 
  PIN_MODE(C, 7, OUTPUT + PUSH_PULL);   // PC7 -- PWM A (TIM1_CH2)

    // Main control interface pin
  PIN_MODE(D, 4, INPUT + PULL_UP);      // PD4 -- PPM input (TIM2_CH1)
  
    // Serial interface pins
  PIN_MODE(D, 5, OUTPUT + PUSH_PULL);   // UART TX
  PIN_MODE(D, 6, INPUT + PULL_UP);      // UART RX
 
}  

void loop(void) {
  //
  // main code block follows here
  //
}


int main( void ) {
 
  init();
  setup();
  
  while(1) {
    loop();
  }

}

Пока только инициализация пинов. Макрос PIN_MODE объявлен отдельно и чтобы никого не путать, пока он тут не показан.

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

хорошо увеличу до 100к

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

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

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

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

хорошо. сегодня уже сил нет, завтра наверно начну

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

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

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

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

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

Я думал драйвер на 5 вольт. Если больше, то напрямую подключать к МК верхние затворы, разумеется, нельзя.

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

я планировал до 2S

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

Я как-то не отследил этот момент, от того и пошло. Значит, оставляем, как есть.

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

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

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

Да, мой опыт показывает что 2S - наиболее оптимальный вариант. С теми номиналами, что есть выше - вполне пойдет и 3S, рассеиваемая мощность получится в районе 158мвт, если воткнуть 1206, то вполне справятся и с 2S и с 3S, и место под них хватает судя по рисунку платы.

Кстати, что за сигнал SWIM выведен на разъем?

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

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

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

Single Ware Interface Module -- провод для заливки программ и отладки камня. Спасибо, но тогда непонятно нафига выводить ещё UART наружу? А впрочем, место на плате позволяет. Все равно его ни для чего больше использовать не получится .. разве что для увеличения адресных перемычек.

Кстати, на вашей плате силовые полумосты смонтированы слишком близко к краю платы. Там примерно в 3мм от края попадают выходы мотора как раз..

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

А тяжело затвор с 17-го пина перенести на 14-й ? Дело в том, что 17-й пин к таймеру подключается через альтернативную функцию AF0, коротая заодно и TIM2_CH1 переключает на другой пин. Аппаратный захват перестает работать. Можно программно захватывать ppm, но это как-то не спортивно.

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

да можно, только вместо 0805 перемычки будет проводная

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

Не хочется проводную. Ща подумаю, как по другому..

PS. Все идет к тому, что придется мне самому разводить плату в протеусе. Иначе много лишних согласований выходит.

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

давай. я тоже подумаю. может получится по другому

короче если плату увеличить, с 15мм до 20 можно. увеличить до 17 например, то вроде получится

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

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

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

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

ок. вот картинка

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

Немножко поразводил, получается очень мелко. Пока отложил. Смотрю на картинке получилось под нижние затворы PC3 и PC4  развести? Тогда имеет смысл оставить этот дизайн. Выглядит, в принципе, неплохо.

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

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

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

Расскажите про этот ваш PPM.

Из приведенного исходника видно, что импульсы короче 536-и и длиннее 2384-х микросекунд исключаются из обработки, а что попало в диапазон разрешенных длительностей, пропорционально отображается на числовой прямой 0 .. 180.

Вычисленные таким образом значения от 0 до 90, в свою очередь, обратно-пропорционально отображаются на коэффициенте заполнения ШИМ-сигнала, где ноль соответствует максимальному значению коэфф. ШИМ, а 90 нулю.

Для значения от 91 до 180 пропорция прямая и соответствует коэффициенту заполнения ШИМ-сигнала от 0 до 100%.

Я правильно представляю себе "механизм"?

Чем обусловлены значения чисел 536 и 2384 ? Почему не 500мкс и 2400мкс ? Какие должны быть точно?

Нужно ли для отображенного значения 90 делать полный останов мотора? Может даже не только для 90, а для диапазона 87..93, чтобы гарантированно попадать в "СТОП" ?

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

представляешь верно. числа берутся хз откуда. на той же вики числа другие от 1000 до 2000

вот здесь указано что некоторые производители делают диапазон шире, а стандартное от 1000 до 2000. предлагаю на тех производителей забить

насчет остановки можно немного расширить диапазон, только чуть уже наверно 88-92

тебе проще работать с микросекундами, 1000- 500-2000 чем с градусами. все равно либа серва градусы в микросекунды переводит

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

 

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

Тогда предлагаю использовать диапазон 1000 .. 2000 мкс для пропорционального отображения на шкале 0 .. 180. Защитный диапаон останова -- 89 .. 91.

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

Частоту ШИМ-сигнала сделал 18.78 Гц -- такое "кривое" значение возникает при использвании полных 16-и бит для управления  коэффициентом заполнения и использовании значения прескалера равного 13-и: 16М / 13 / 65536 = 18.78. Меняя пресклер можно частоту двигать вверх-вниз в некоторых пределах, если 18.78 Гц чем-то не устраивает.

16-битный ШИМ -- это конечно в определенном смысле перебор, но, раз есть возможность, пусть будет. Для управления через ppm употребить 16-ю точность не представляется возможным, через I2C, вполне.

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

замечательно

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

Да, всё замечательно, но я бы пошел от диапазона 500-2500, потому как чем шире диапазон, тем точнее можно устанавливать нужную скорость:

1. диапазон 1000-2000мксек: ширина диапазона 1000мксек / 180 = 5,6мксек на "градус" скорости. Соответственно "защитный интервал нуля" (89-91грд) = 11,2мксек.

2. Диапазон 500-2500мксек: аналогично получаем защитный интервал нуля = 22,2мксек.

Второй вариант позволит проще останавливать мотор и имеет меньшие требования к точности измерения ширины входящего импульса ШИМ.

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

Точность там одна -- 1% допустимого отклонения встроенного тактового генератора от частоты 16мгц. Минимальный теоретический предел длительности распознаваемых импульсов равен 1/16 микросекунды или 62.5 наносекунды. Таймер проверяет состояние пина канала захвата с частотой тактирования, т.е. все те же 16 раз в течении одной микросекунды, даже если таймер считает в более неспешном режиме. Большой защитный интервал имеет смысл делать на случай, если устройство, формирующее управляющие импульсы, не в состоянии выдерживать тайминги с большим разрешением. Т.к. в наше время подобные вещи построены обычно на микроконтроллерах, то вопрос формирования импульсов нужной длительности с достаточной точностью, не стоИт сколь-нибудь остро. Мое мнение -- 10 микросекунд -- за глаза.

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

Э-э-э .. тут надо смотреть нестабильность wiring библиотеки servo.h, поскольку большая часть юзверей пользует программную эмуляцию ШИМ. Но .. может оно и к лучшему. :)

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

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

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

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

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

проверил принтер. вроде все норм на 95%. 2 распечатанных листах хорошо склеились

по драйверу изменил немного разводку для перемычки 0805. ширину  платы увеличил до 16.87мм. выводы для моторов вывел вбок

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

А куда припаивается провод, по которому питание для моторов приходит?

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

площадка на которой второй конденсатор сверху. нижний его вывод

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

Буратино
Offline
Зарегистрирован: 11.11.2016

Возможно кто "знаком" с такой ардуинкой http://img.radiokot.ru/files/21658/medium/13orsskx9s.jpg Мне б нада на нее эл.схема. что б понять какие выводы откуда идут на моторы. Спасибо