Проблема плавного пуска сервопривода

dxf

✩✩✩✩✩✩✩
17 Апр 2020
47
2
Не работает плавный старт, серва (MG90S) рывком едет к нулевой позиции.
C++:
#include <ServoSmooth.h>
#include <Wire.h>

ServoSmooth servo;
uint32_t tmr;
boolean flag;

void setup() {
  servo.attach(6,0);        // подключить
  servo.smoothStart();
  servo.setSpeed(200);    // ограничить скорость
  servo.setAccel(0.5);         // установить ускорение (разгон и торможение)
  delay(1000);
}

void loop() {
servo.tick();
servo.setTargetDeg(180);
  }
Можете подсказать в чем ошибаюсь при использовании библиотеки ServoSmooth?
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
525
86
@dxf, Попробуй тест в IDE сервы и тогда будешь знать где неисправность в коде или сама серва
 

dxf

✩✩✩✩✩✩✩
17 Апр 2020
47
2
@VictorArx, не совсем понял, можно по подробней.

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

VictorArx

★★✩✩✩✩✩
22 Мар 2021
525
86
@dxf, То что нет ошибки при компиляции это ещё не всё. Если серва в порядке значит проблема в коде. Корпус питания дуньки и сервы вместе?
 

dxf

✩✩✩✩✩✩✩
17 Апр 2020
47
2
@VictorArx,не понятно (.
Предлагаю по порядку: 1) "Попробуй тест в IDE сервы" - имелось ввиду arduino IDE? Ошибок при компиляции в arduinoIDE нет:

C++:
/usr/share/arduino/arduino-builder -dump-prefs -logger=machine -hardware /usr/share/arduino/hardware -hardware /home/dima/.arduino15/packages -tools /usr/share/arduino/tools-builder -tools /home/dima/.arduino15/packages -libraries /home/dima/Arduino/libraries -fqbn=arduino:avr:nano:cpu=atmega328 -ide-version=10819 -build-path /tmp/arduino_build_733234 -warnings=none -build-cache /tmp/arduino_cache_154034 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=/home/dima/.arduino15/packages/arduino/tools/arduinoOTA/1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=/home/dima/.arduino15/packages/arduino/tools/arduinoOTA/1.3.0 -prefs=runtime.tools.avr-gcc.path=/home/dima/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=/home/dima/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=/home/dima/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=/home/dima/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -verbose /tmp/arduino_modified_sketch_139734/Blink.ino
/usr/share/arduino/arduino-builder -compile -logger=machine -hardware /usr/share/arduino/hardware -hardware /home/dima/.arduino15/packages -tools /usr/share/arduino/tools-builder -tools /home/dima/.arduino15/packages -libraries /home/dima/Arduino/libraries -fqbn=arduino:avr:nano:cpu=atmega328 -ide-version=10819 -build-path /tmp/arduino_build_733234 -warnings=none -build-cache /tmp/arduino_cache_154034 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=/home/dima/.arduino15/packages/arduino/tools/arduinoOTA/1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=/home/dima/.arduino15/packages/arduino/tools/arduinoOTA/1.3.0 -prefs=runtime.tools.avr-gcc.path=/home/dima/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=/home/dima/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=/home/dima/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=/home/dima/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17 -verbose /tmp/arduino_modified_sketch_139734/Blink.ino
Using board 'nano' from platform in folder: /home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5
Using core 'arduino' from platform in folder: /home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5
Detecting libraries used...
/home/dima/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -I/home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/cores/arduino -I/home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/variants/eightanaloginputs /tmp/arduino_build_733234/sketch/Blink.ino.cpp -o /dev/null
Alternatives for ServoSmooth.h: [[email protected]]
ResolveLibrary(ServoSmooth.h)
  -> candidates: [[email protected]]
/home/dima/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -I/home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/cores/arduino -I/home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/variants/eightanaloginputs -I/home/dima/Arduino/libraries/ServoSmooth-main/src /tmp/arduino_build_733234/sketch/Blink.ino.cpp -o /dev/null
Alternatives for Servo.h: [[email protected]]
ResolveLibrary(Servo.h)
  -> candidates: [[email protected]]
/home/dima/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -I/home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/cores/arduino -I/home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/variants/eightanaloginputs -I/home/dima/Arduino/libraries/ServoSmooth-main/src -I/home/dima/Arduino/libraries/Servo/src /tmp/arduino_build_733234/sketch/Blink.ino.cpp -o /dev/null
Alternatives for Wire.h: [[email protected]]
ResolveLibrary(Wire.h)
  -> candidates: [[email protected]]
/home/dima/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -I/home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/cores/arduino -I/home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/variants/eightanaloginputs -I/home/dima/Arduino/libraries/ServoSmooth-main/src -I/home/dima/Arduino/libraries/Servo/src -I/home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/libraries/Wire/src /tmp/arduino_build_733234/sketch/Blink.ino.cpp -o /dev/null
Using cached library dependencies for file: /home/dima/Arduino/libraries/ServoSmooth-main/src/Adafruit_PWMServoDriver.cpp
Using cached library dependencies for file: /home/dima/Arduino/libraries/ServoSmooth-main/src/ServoDriverSmooth.cpp
Using cached library dependencies for file: /home/dima/Arduino/libraries/ServoSmooth-main/src/ServoSmooth.cpp
Using cached library dependencies for file: /home/dima/Arduino/libraries/ServoSmooth-main/src/smoothUtil.cpp
Using cached library dependencies for file: /home/dima/Arduino/libraries/Servo/src/avr/Servo.cpp
Using cached library dependencies for file: /home/dima/Arduino/libraries/Servo/src/mbed/Servo.cpp
Using cached library dependencies for file: /home/dima/Arduino/libraries/Servo/src/megaavr/Servo.cpp
Using cached library dependencies for file: /home/dima/Arduino/libraries/Servo/src/nrf52/Servo.cpp
Using cached library dependencies for file: /home/dima/Arduino/libraries/Servo/src/sam/Servo.cpp
Using cached library dependencies for file: /home/dima/Arduino/libraries/Servo/src/samd/Servo.cpp
Using cached library dependencies for file: /home/dima/Arduino/libraries/Servo/src/stm32f4/Servo.cpp
Using cached library dependencies for file: /home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/libraries/Wire/src/Wire.cpp
Using cached library dependencies for file: /home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/libraries/Wire/src/utility/twi.c
Generating function prototypes...
/home/dima/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -I/home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/cores/arduino -I/home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/variants/eightanaloginputs -I/home/dima/Arduino/libraries/ServoSmooth-main/src -I/home/dima/Arduino/libraries/Servo/src -I/home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/libraries/Wire/src /tmp/arduino_build_733234/sketch/Blink.ino.cpp -o /tmp/arduino_build_733234/preproc/ctags_target_for_gcc_minus_e.cpp
/usr/bin/arduino-ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives /tmp/arduino_build_733234/preproc/ctags_target_for_gcc_minus_e.cpp
Компиляция скетча...
/home/dima/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -I/home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/cores/arduino -I/home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/variants/eightanaloginputs -I/home/dima/Arduino/libraries/ServoSmooth-main/src -I/home/dima/Arduino/libraries/Servo/src -I/home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/libraries/Wire/src /tmp/arduino_build_733234/sketch/Blink.ino.cpp -o /tmp/arduino_build_733234/sketch/Blink.ino.cpp.o
Compiling libraries...
Compiling library "ServoSmooth-main"
Используем предварительно скомпилированный файл: /tmp/arduino_build_733234/libraries/ServoSmooth-main/Adafruit_PWMServoDriver.cpp.o
Используем предварительно скомпилированный файл: /tmp/arduino_build_733234/libraries/ServoSmooth-main/ServoDriverSmooth.cpp.o
Используем предварительно скомпилированный файл: /tmp/arduino_build_733234/libraries/ServoSmooth-main/smoothUtil.cpp.o
Используем предварительно скомпилированный файл: /tmp/arduino_build_733234/libraries/ServoSmooth-main/ServoSmooth.cpp.o
Compiling library "Servo"
Используем предварительно скомпилированный файл: /tmp/arduino_build_733234/libraries/Servo/avr/Servo.cpp.o
Используем предварительно скомпилированный файл: /tmp/arduino_build_733234/libraries/Servo/mbed/Servo.cpp.o
Используем предварительно скомпилированный файл: /tmp/arduino_build_733234/libraries/Servo/megaavr/Servo.cpp.o
Используем предварительно скомпилированный файл: /tmp/arduino_build_733234/libraries/Servo/nrf52/Servo.cpp.o
Используем предварительно скомпилированный файл: /tmp/arduino_build_733234/libraries/Servo/sam/Servo.cpp.o
Используем предварительно скомпилированный файл: /tmp/arduino_build_733234/libraries/Servo/samd/Servo.cpp.o
Используем предварительно скомпилированный файл: /tmp/arduino_build_733234/libraries/Servo/stm32f4/Servo.cpp.o
Compiling library "Wire"
Используем предварительно скомпилированный файл: /tmp/arduino_build_733234/libraries/Wire/Wire.cpp.o
Используем предварительно скомпилированный файл: /tmp/arduino_build_733234/libraries/Wire/utility/twi.c.o
Compiling core...
Using precompiled core: /tmp/arduino_cache_154034/core/core_arduino_avr_nano_cpu_atmega328_4c4cd911fc194300774ec5479babd9c6.a
Linking everything together...
/home/dima/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-gcc -w -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o /tmp/arduino_build_733234/Blink.ino.elf /tmp/arduino_build_733234/sketch/Blink.ino.cpp.o /tmp/arduino_build_733234/libraries/ServoSmooth-main/Adafruit_PWMServoDriver.cpp.o /tmp/arduino_build_733234/libraries/ServoSmooth-main/ServoDriverSmooth.cpp.o /tmp/arduino_build_733234/libraries/ServoSmooth-main/ServoSmooth.cpp.o /tmp/arduino_build_733234/libraries/ServoSmooth-main/smoothUtil.cpp.o /tmp/arduino_build_733234/libraries/Servo/avr/Servo.cpp.o /tmp/arduino_build_733234/libraries/Servo/mbed/Servo.cpp.o /tmp/arduino_build_733234/libraries/Servo/megaavr/Servo.cpp.o /tmp/arduino_build_733234/libraries/Servo/nrf52/Servo.cpp.o /tmp/arduino_build_733234/libraries/Servo/sam/Servo.cpp.o /tmp/arduino_build_733234/libraries/Servo/samd/Servo.cpp.o /tmp/arduino_build_733234/libraries/Servo/stm32f4/Servo.cpp.o /tmp/arduino_build_733234/libraries/Wire/Wire.cpp.o /tmp/arduino_build_733234/libraries/Wire/utility/twi.c.o /tmp/arduino_build_733234/../arduino_cache_154034/core/core_arduino_avr_nano_cpu_atmega328_4c4cd911fc194300774ec5479babd9c6.a -L/tmp/arduino_build_733234 -lm
/home/dima/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 /tmp/arduino_build_733234/Blink.ino.elf /tmp/arduino_build_733234/Blink.ino.eep
/home/dima/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy -O ihex -R .eeprom /tmp/arduino_build_733234/Blink.ino.elf /tmp/arduino_build_733234/Blink.ino.hex
Используем библиотеку ServoSmooth-main версии 3.9 из папки: /home/dima/Arduino/libraries/ServoSmooth-main
Используем библиотеку Servo версии 1.1.8 из папки: /home/dima/Arduino/libraries/Servo
Используем библиотеку Wire версии 1.0 из папки: /home/dima/.arduino15/packages/arduino/hardware/avr/1.8.5/libraries/Wire
/home/dima/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-size -A /tmp/arduino_build_733234/Blink.ino.elf
Скетч использует 5660 байт (18%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 213 байт (10%) динамической памяти, оставляя 1835 байт для локальных переменных. Максимум: 2048 байт.
2) "Корпус питания дуньки и сервы вместе?" - если речь о блоке питания, то пробовал разные варианты, дело не в питании точно, серва не глючит.
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
470
134
@dxf,
Я пробовал smoothStart, и тоже не увидел никакого эффекта (в моем случае на слабо нагруженной серве) . Посмотрев код, пришел к выводу, что это в общем случае фикция. Пишу в "общем случае", т.к. может есть какие то особенные сервы с которвми это работает.
Может кто напишет, у кого был успешный опыт - какие были условия и насколько стало плавнее.
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
611
145
@dxf, а какая скорость поворота у сервы? Может, просто серва слишком резвая, а функция
C++:
servo.smoothStart();
10 раз в секунду подаёт серве импульс, что бы она вращалась к 0, причем без каких-либо ограничений по скорости. Что если не использовать эту функцию. К тому же эта функция блокирующая на 1 секунду. По коду только потом уже идёт настройка скорости и ускорения.
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,706
474
серва (MG90S) рывком едет к нулевой позиции.
Пример из моей практики, хоть по сервам я и не эксперт. На данной библиотеке именно на серве MG90S-180 я не увидел совсем никакого эффекта. А вот MG996R-360 стартовала/останавливалась относительно плавно при разных заданных углах поворота и ускорениях. Другие сервы не юзал на этой библиотеке, поэтому за них ничего не могу сказать.
 
Изменено: