Форум ModelldepO  

Вернуться   Форум ModelldepO > Моделизм > Электрика и DCC > Arduino
Ответ
 
Опции темы Опции просмотра
Старый 05.08.2017, 16:41   #1
Dampflok
Заглянувший
 
Регистрация: 17.06.2013
Адрес: Санкт-Петербург
Сообщений: 227
Сказал(а) 'не согласен(а)'!: 8
Сказали 'не согласен'! 4 раз(а) в 2 сообщениях
Сказал(а) спасибо: 204
Поблагодарили 328 раз(а) в 99 сообщениях
Репутация: как роза среди колючек (328)
По умолчанию Преодоление рывка аналогового сервомотора при прямом подключении к Ардуино

Цитата:
Сообщение от xu56857 Посмотреть сообщение
Дерганье во время подачи питания - это ерунда
Доброго времени суток!
Я сейчас пытаюсь решить проблему дёргания сервомотора во время включения электропитания ардуины -
- как я понял, именно об этом Вы написали, что это ерунда. Если не секрет, как Вы решили эту проблему?

Я экспериментирую с Arduino MEGA и аналоговым сервомотором.
Так вот:
при включении электропитания ардуины, от которой сервомотор запитан напрямую от 5+,
сервомотор внезапно дерёт ~на 30° в сторону, а затем встаёт в позицию, указанную в скетче.
Потом, при выполнении скетча таких сумасшедших рывков нет. Мотор не жужжит и не дёргается благодаря использованию
attach() и detach().

Означенный 30°ный рывок опасен для механики, подключённой к сервомотору.

Так вот в чём вопрос:
Как излечить рывок сервомотора, который он делает при подаче электропитания на ардуину?
Dampflok вне форума   Вверх
Старый 05.08.2017, 17:25   #2
shalex
Местный
 
Регистрация: 08.07.2015
Адрес: Ступино
Сообщений: 2,213
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,571
Поблагодарили 2,003 раз(а) в 803 сообщениях
Репутация: репутация неоспорима (2004)
По умолчанию

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Как излечить рывок сервомотора, который он делает при подаче электропитания на ардуину?
Как вариант - сначала подать сигнал, а только потом питание на серву.
Ардуине нужно время, чтобы загрузиться и выставить нужный PWM на выходе.
shalex на форуме   Вверх
Пользователь сказал cпасибо:
Старый 05.08.2017, 20:36   #3
Dampflok
Заглянувший
 
Регистрация: 17.06.2013
Адрес: Санкт-Петербург
Сообщений: 227
Сказал(а) 'не согласен(а)'!: 8
Сказали 'не согласен'! 4 раз(а) в 2 сообщениях
Сказал(а) спасибо: 204
Поблагодарили 328 раз(а) в 99 сообщениях
Репутация: как роза среди колючек (328)
По умолчанию

Цитата:
Сообщение от shalex Посмотреть сообщение
Как вариант
Как я понял, Вы предлагаете сначала включить электропитание ардуины, а потом
к 5+ подключить сервомотор.
Результат к сожалению отрицательный: произвольный рывок сохраняется.
Кроме того, при таких условиях эксперимента для данного мотора/данных моторов пропускается фаза выполнения void setup,
что может быть при каких-либо обстоятельствах неудобно
Dampflok вне форума   Вверх
Старый 05.08.2017, 21:40   #4
MadSnake
Пользователь
 
Регистрация: 01.02.2013
Адрес: Санкт-Петербург
Сообщений: 934
Сказал(а) 'не согласен(а)'!: 22
Сказали 'не согласен'! 30 раз(а) в 19 сообщениях
Сказал(а) спасибо: 313
Поблагодарили 1,147 раз(а) в 293 сообщениях
Репутация: этим человеком можно гордиться (1147)
По умолчанию

Разрешите я тут встряну со своей безграмотностью, есть ли вариант управлять сервой используя локомотивный декодер..... я не силен в сервах, знаю только что она управляется шим сигналом..... но для этого нужен отдельный декодер, а место в нашем деле на вес золота, отсюда и вопрос, как ограничиться только локомотивным декодером!? Подозреваю - ответ ни как! Но все же?
MadSnake вне форума   Вверх
Старый 05.08.2017, 21:55   #5
Alex_S
Местный
 
Регистрация: 26.05.2008
Адрес: Москва
Сообщений: 3,558
Сказал(а) 'не согласен(а)'!: 21
Сказали 'не согласен'! 9 раз(а) в 9 сообщениях
Сказал(а) спасибо: 513
Поблагодарили 3,620 раз(а) в 1,552 сообщениях
Репутация: репутация неоспорима (3634)
По умолчанию

Цитата:
Сообщение от MadSnake Посмотреть сообщение
есть ли вариант управлять сервой используя локомотивный декодер
есть, но нужен декодер с такой возможностью. Например Zimo. В зависимости от модели декодера 5-вольтовое питание для сервы делается либо с помощью дополнительной схемы на LM7805 или берется с декодера (у некоторых декодеров есть выход 5 вольт).
Alex_S вне форума   Вверх
Пользователь сказал cпасибо:
Старый 05.08.2017, 23:29   #6
shalex
Местный
 
Регистрация: 08.07.2015
Адрес: Ступино
Сообщений: 2,213
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,571
Поблагодарили 2,003 раз(а) в 803 сообщениях
Репутация: репутация неоспорима (2004)
По умолчанию

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Как я понял, Вы предлагаете сначала включить электропитание ардуины, а потом
к 5+ подключить сервомотор.
Результат к сожалению отрицательный: произвольный рывок сохраняется.
Примерно так, да. В скетче в setup выставить analogWrite, дождаться его выполнения, а потом подать питание на серву.
Насколько сильный рывок? У меня сервы при включении могут вообще до крайнего положения скакнуть (и скачут).

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Кроме того, при таких условиях эксперимента для данного мотора/данных моторов пропускается фаза выполнения void setup,
что может быть при каких-либо обстоятельствах неудобно
Не понимаю, почему пропускается setup и причем здесь данные моторы? При инициализации выставить нужный PWM, который был при выключении питания сервы.
shalex на форуме   Вверх
Старый 06.08.2017, 00:55   #7
Dampflok
Заглянувший
 
Регистрация: 17.06.2013
Адрес: Санкт-Петербург
Сообщений: 227
Сказал(а) 'не согласен(а)'!: 8
Сказали 'не согласен'! 4 раз(а) в 2 сообщениях
Сказал(а) спасибо: 204
Поблагодарили 328 раз(а) в 99 сообщениях
Репутация: как роза среди колючек (328)
По умолчанию

Цитата:
Сообщение от shalex Посмотреть сообщение
В скетче в setup выставить analogWrite
Не понимаю (возможно, я не на столько продвинут, как Вы думаете ),
о каком analogWrite идёт речь, так как обращение к сервомотору произвожу при помощи servo.write().
Цитата:
Сообщение от shalex Посмотреть сообщение
Не понимаю, почему пропускается setup и причем здесь данные моторы?
Потому что под
Цитата:
Сообщение от Dampflok Посмотреть сообщение
а потом к 5+ подключить сервомотор.
я имел в виду ручное подключение контакта к пину 5+V, которое по времени произойдёт наверняка
позже (с учётом естественного быстродействия контроллера) выполнения ардуиной void setup().


Цитата:
Сообщение от shalex Посмотреть сообщение
Насколько сильный рывок? У меня сервы при включении могут вообще до крайнего положения скакнуть (и скачут).
Если перезагрузить скетч или ардуину кнопкой в момент, когда сервомотор
находится в положении, совпадающем с первым положением в скетче (например, если мотор находился
в момент перезагрузки кнопкой или заливки скетча в положении 180°,
а в скетче в void setup указана начальная позиция 180°, то рывка не будет.
Если же сервомотор не находится в таком положении, то рывок гарантирован на изрядные градусы - наблюдаю в среднем 30°,
но было и больше.
Ну и рывок будет в любом случае, если от ардуины отключить питание - вынуть USB-кабель Upd[ и вставить его снова].
Тоже примерно 30° как правило.


Цитата:
Сообщение от shalex Посмотреть сообщение
выставить analogWrite, дождаться его выполнения, а потом подать питание на серву
Под "потом подать питание на серву" Вы имеете в виду вручную или тумблером (например) соединить контакт 5+V к серве
или программно через скетч?

Цитата:
Сообщение от shalex Посмотреть сообщение
При инициализации выставить нужный PWM, который был при выключении питания сервы.
Здесь Вы вероятно имеете в виду записать в прежние/полученные перед отключением электропитания ардуины значения servo.write()/servo.read() в EEPROM?

Последний раз редактировалось Dampflok; 06.08.2017 в 14:43.
Dampflok вне форума   Вверх
Старый 06.08.2017, 14:29   #8
shalex
Местный
 
Регистрация: 08.07.2015
Адрес: Ступино
Сообщений: 2,213
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,571
Поблагодарили 2,003 раз(а) в 803 сообщениях
Репутация: репутация неоспорима (2004)
По умолчанию

Цитата:
Сообщение от Dampflok Посмотреть сообщение
о каком analogWrite идёт речь, так как обращение к сервомотору произвожу при помощи servo.write().
Цитата:
Это аналогичная servo.write() штука, суть которой - выставить ШИМ/PWM нужной скважности на выходе ардуины.


Цитата:
Сообщение от Dampflok Посмотреть сообщение
Ну и рывок будет в любом случае, если от ардуины отключить питание - вынуть USB-кабель.
Тоже примерно 30° как правило.
Этот рывок наблюдается, даже если предварительно сделать серве detach() ?

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Здесь Вы вероятно имеете в виду записать в прежние/полученные перед отключением электропитания ардуины значения servo.write()/servo.read() в EEPROM?
На самом деле я не знаю, как сделать запись в EEPROM в момент выключения питания. Просто записываю каждый перевод сервы по завершении ее движения.

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Под "потом подать питание на серву" Вы имеете в виду вручную или тумблером (например) соединить контакт 5+V к серве
или программно через скетч?
Можно тумблером, реле и т.д. Думаю главное, чтобы на серве к моменту подачи питания был выставлен именно тот уровень ШИМ, в котором серва находится перед включением (т.е. чтобы текущий угол сервы и угол, задаваемый ШИМ, совпадал).

Пробовал управлять подачей питания на сервы с ардуины, через MOSFET транзистор. Вроде все намана было, если память не изменяет. Нюанс- не использую серву на удержание. Когда надо повернуть серву, сначала идет attach(), после завершения движения - detach(). Еще нюанс - если серв много (несколько десятков), то без такого управления питания сервами наблюдаю перегрузку при включении питания, т.к. сервы при включении дружно дергаются и делают полный оборот на 180 и обратно или только туда (точно уже не помню).

P.s. Кажись надо переносить последние посты про Ардуину в соотв. ветку форума, а то тема про другое
shalex на форуме   Вверх
Старый 06.08.2017, 15:20   #9
Dampflok
Заглянувший
 
Регистрация: 17.06.2013
Адрес: Санкт-Петербург
Сообщений: 227
Сказал(а) 'не согласен(а)'!: 8
Сказали 'не согласен'! 4 раз(а) в 2 сообщениях
Сказал(а) спасибо: 204
Поблагодарили 328 раз(а) в 99 сообщениях
Репутация: как роза среди колючек (328)
По умолчанию

Цитата:
Сообщение от shalex Посмотреть сообщение
Это аналогичная servo.write() штука, суть которой - выставить ШИМ/PWM нужной скважности на выходе ардуины.
О чём речь понимаю, но на практике такого ещё не делал.

Цитата:
Сообщение от shalex Посмотреть сообщение
Этот рывок наблюдается, даже если предварительно сделать серве detach() ?
Последовательность событий такова:
USB-кабель подключается к ардуине->рывок 30°->attach()->detach()->нормальная работа мотора по скетчу...->attach()->detach()->отключение кабеля->включение кабеля->рывок ~30° ...
В предыдущем посте выразился неточно и дописал в той строке Upd: то есть рывок не после отключения кабеля USB от ардуины, а после его включения заново.

Цитата:
Сообщение от shalex Посмотреть сообщение
На самом деле я не знаю, как сделать запись в EEPROM в момент выключения питания.
Я предполагаю делать это подачей отдельной ручной команды от пульта перед выключением USB-питания ардуины: типа до отключения "a = servo№.read(); EEPROM.write(адрес, а);" и после отключения в разделе void setup: a=EEPROM.read(адрес); servo№.write(a); .

Собственно, я бы и после каждого переключения сервомотора такую запись делал бы отдельной стандартной функцией, но будучи напуган рассуждениями об ограниченности и исчерпании рабочего ресурса EEPROM'а пока воздерживаюсь от этого.
Может кто просветит меня в том плане, что боятся этого не следует?

Цитата:
Сообщение от shalex Посмотреть сообщение
Пробовал управлять подачей питания на сервы с ардуины, через MOSFET транзистор.
Тут даже не знаю что сказать, так как не разбирался до сих пор с тем, что такое MOSFET-транзистор .

Цитата:
Сообщение от shalex Посмотреть сообщение
P.s. Кажись надо переносить последние посты про Ардуину в соотв. ветку форума, а то тема про другое
Совершеноо согласен с этим!

Здесь на форуме очень много писали про сервомоторы и их использование для переключения разных устройств с ардуино,
но как-то совершенно не оглашали темы рывка сервомотора после включения питания ардуины, тогда как эта
тема должна затронуть каждого, кто использует сервомоторы с ардуиной.
Меня в связи с этим немало удивляет тот факт, что в данной теме сейчас переписываются только два человека - shalex и Dampflok

Последний раз редактировалось Dampflok; 07.08.2017 в 11:56.
Dampflok вне форума   Вверх
Старый 06.08.2017, 18:03   #10
xu56857
Пользователь
 
Аватар для xu56857
 
Регистрация: 02.02.2015
Адрес: Москва
Сообщений: 533
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 2,312
Поблагодарили 1,933 раз(а) в 353 сообщениях
Репутация: обеспечил(а) себе прекрасное будущее (1948)
По умолчанию

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Если не секрет, как Вы решили эту проблему?
Эту проблему не решил, дерганье при включении не страшно, плохо когда серва дергается от помех и остряк стрелки оказывается в неизвестном положении.
xu56857 на форуме   Вверх
Пользователь сказал cпасибо:
Старый 06.08.2017, 18:47   #11
Dampflok
Заглянувший
 
Регистрация: 17.06.2013
Адрес: Санкт-Петербург
Сообщений: 227
Сказал(а) 'не согласен(а)'!: 8
Сказали 'не согласен'! 4 раз(а) в 2 сообщениях
Сказал(а) спасибо: 204
Поблагодарили 328 раз(а) в 99 сообщениях
Репутация: как роза среди колючек (328)
По умолчанию

Цитата:
Сообщение от xu56857 Посмотреть сообщение
дерганье при включении не страшно,
Как же нестрашно, когда иной рывок может выдернуть с корнем ту механику, которая подключена к мотору?!
Dampflok вне форума   Вверх
Старый 06.08.2017, 19:03   #12
xu56857
Пользователь
 
Аватар для xu56857
 
Регистрация: 02.02.2015
Адрес: Москва
Сообщений: 533
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 2,312
Поблагодарили 1,933 раз(а) в 353 сообщениях
Репутация: обеспечил(а) себе прекрасное будущее (1948)
По умолчанию

Цитата:
Сообщение от Dampflok Посмотреть сообщение
выдернуть с корнем ту механику
Механика - через пружинку ( стальную проволоку )
xu56857 на форуме   Вверх
Старый 06.08.2017, 19:36   #13
Dampflok
Заглянувший
 
Регистрация: 17.06.2013
Адрес: Санкт-Петербург
Сообщений: 227
Сказал(а) 'не согласен(а)'!: 8
Сказали 'не согласен'! 4 раз(а) в 2 сообщениях
Сказал(а) спасибо: 204
Поблагодарили 328 раз(а) в 99 сообщениях
Репутация: как роза среди колючек (328)
По умолчанию

Цитата:
Сообщение от xu56857 Посмотреть сообщение
через пружинку ( стальную проволоку )
Интересно!
А не покажете ли нам, как у Вас это реализовано? Какую толщину проволоки Вы выбрали?
Я стальную проволоку толщиной 0,4 мм простым V-образным изгибом загибал, но её жёсткость была всё же слишком высока -
- как пружина она практически не срабатывала.
Dampflok вне форума   Вверх
Старый 06.08.2017, 20:26   #14
Qvan22
Заглянувший
 
Регистрация: 26.01.2013
Адрес: Минск
Сообщений: 92
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 209
Поблагодарили 118 раз(а) в 58 сообщениях
Репутация: скоро придёт к известности (118)
По умолчанию

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Как излечить рывок сервомотора, который он делает при подаче электропитания на ардуину?
Цитата:
Сообщение от shalex Посмотреть сообщение
Цитата:
Как вариант - сначала подать сигнал, а только потом питание на серву.
Добавлю простой пример:



Транзистор - IRF520 mosfet, два резистора на 10ком (необязательны)...
P.S. Схемы рисовал в первый раз, мог где то напутать...
PHP код:
#include <Servo.h>  
Servo myservo;   
int pos 30//положение сервы
int servo_pin 14// серво
int servo_contr 15;//транзистор    
int btn 2//кнопка
void setup() 

  
pinMode(servo_contrOUTPUT);
  
pinMode(btnINPUT);
  
myservo.attach(servo_pin);  

 
void loop() 

  if(
digitalRead(btn))
  {
    
digitalWrite(servo_contrHIGH);  
    for(
pos 30pos <= 80pos += 1
    {                                 
      
myservo.write(pos);              
      
delay(15);                       
    }     
    for(
pos 80pos>=30pos-=1)     
    {                                
      
myservo.write(pos);              
      
delay(15);                       
    } 
    
digitalWrite(servo_contrLOW);       
  }


Последний раз редактировалось Qvan22; 07.08.2017 в 07:51.
Qvan22 вне форума   Вверх
6 пользователя(ей) сказали cпасибо:
Старый 30.11.2018, 11:42   #15
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,557
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,546
Поблагодарили 4,564 раз(а) в 1,745 сообщениях
Репутация: репутация неоспорима (4832)
По умолчанию

Цитата:
Сообщение от Dampflok Посмотреть сообщение
Как излечить рывок сервомотора, который он делает при подаче электропитания на ардуину?
Прочитал рекомендации, изложенные на сайте OpenDCC.
Один из простых вариантов это соединить управляющий вход сервопривода с + питания, через резистор 4К7. Но это не со всеми сервами работает.
Я у себя попробовал, в принципе стало лучше реально, с обычными китайскими сервами.
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума   Вверх
3 пользователя(ей) сказали cпасибо:
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Декодер DCC на ардуино для немецкого выходного сигнала BR95009 Arduino 61 26.02.2019 18:20
Конструктор электроники для макета на базе Ардуино Alexmit Arduino 63 03.02.2019 21:17
Командная станция DCC++ на Ардуино BR95009 Arduino 416 18.04.2018 02:12
Декодер для стрелки LGB на Ардуино BR95009 Arduino 42 25.10.2016 16:13
ЭЧшники жгут! В прямом смысле. MSV ЖД техника 13 02.08.2011 09:24


Текущее время: 15:06. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, vBulletin Solutions, Inc. Перевод: zCarot
Copyright © ModelldepO.ru 2006 -