Форум ModelldepO  

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

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

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

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

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

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

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

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

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

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

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

Цитата:
Сообщение от 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,004
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,244
Поблагодарили 1,803 раз(а) в 707 сообщениях
Репутация: обеспечил(а) себе прекрасное будущее (1804)
По умолчанию

Цитата:
Сообщение от 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
Адрес: Санкт-Петербург
Сообщений: 218
Сказал(а) 'не согласен(а)'!: 8
Сказали 'не согласен'! 4 раз(а) в 2 сообщениях
Сказал(а) спасибо: 200
Поблагодарили 322 раз(а) в 97 сообщениях
Репутация: как роза среди колючек (322)
По умолчанию

Цитата:
Сообщение от 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
Адрес: Москва
Сообщений: 478
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 1,999
Поблагодарили 1,708 раз(а) в 313 сообщениях
Репутация: обеспечил(а) себе прекрасное будущее (1723)
По умолчанию

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

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

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

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

Цитата:
Сообщение от 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пасибо:
Ответ

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Командная станция DCC++ на Ардуино BR95009 Arduino 416 18.04.2018 02:12
Декодер DCC на ардуино для немецкого выходного сигнала BR95009 Arduino 57 01.03.2017 15:27
Декодер для стрелки LGB на Ардуино BR95009 Arduino 42 25.10.2016 16:13
Конструктор электроники для макета на базе Ардуино Alexmit Arduino 58 01.10.2016 09:50
ЭЧшники жгут! В прямом смысле. MSV ЖД техника 13 02.08.2011 09:24


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


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