Welcome! Log In Create A New Profile

Advanced

Servo ve FW Marlin

Posted by celeron 
Servo ve FW Marlin
February 07, 2016 07:43AM
Potřebuju změnit rozsah řízení serva v FW Marlin. Hledal jsem definice serva v Configuration. h v sekci Auto bedu a nikde nic. V Servo.h jsem narazil na tohle:

#define MIN_PULSE_WIDTH 544 // the shortest pulse sent to a servo
#define MAX_PULSE_WIDTH 2400 // the longest pulse sent to a servo
#define DEFAULT_PULSE_WIDTH 1500 // default pulse width when servo is attached
#define REFRESH_INTERVAL 20000 // minimum time to refresh servos in microseconds


Takže 544 us minimální a 2400 us maximální délka impulzu, 20 ms opakovací kmitočet pulzu. Ale těch 1500 us DEFAULT PULSE je délka impulzu po resetu? Trochu mi to nehraje, podle osciloskopu je po resetu 1620 ms.
Nezkoumal jste to prosím někdo?
Díky
Jirka
Re: Servo ve FW Marlin
February 07, 2016 09:31AM
1500 us odpovídá střední poloze výchylky modelářského serva. Servo se vychyluje na obě strany, obvykle mezi šířkou pulzu 1000us a 2000us, čemuž odpovídá +-45°. Některá serva zvládnou i větší rozpětí a proto se někdy používá 800us až 2200us, ale zaručené to není. 544us už je hodně málo.
Re: Servo ve FW Marlin
February 07, 2016 05:49PM
Quote
jirpil
1500 us odpovídá střední poloze výchylky modelářského serva. Servo se vychyluje na obě strany, obvykle mezi šířkou pulzu 1000us a 2000us, čemuž odpovídá +-45°. Některá serva zvládnou i větší rozpětí a proto se někdy používá 800us až 2200us, ale zaručené to není. 544us už je hodně málo.

Díky. Tohle vím, RC modelář 40 let.winking smiley Mě zajímá, zda těch 1500us je definice polohy po resetu, nebo to je ještě někde jinde. Je tam nesrovnalost s naměřenejma 1620us. Pomocí G-kódu M280 P0 Sxxxx jsem zkoušel rozsah "generátoru" serva a skutečně, od 550 do 2400us. Takže tahle hodnota sedí ale ten default (střed) po startu ne. Musí být definovaný ještě někde jinde ale nalézt to...
Jirka
Re: Servo ve FW Marlin
February 08, 2016 02:09AM
Není nad to si ujasnit otázku winking smiley.
Podle mě není DEFAULT_PULSE_WIDTH poloha po resetu, je to jenom jmenovitá hodnota neutrálu serva, kterou knihovna Arduina používá. Hrál jsem si s bed levelingem krátce asi před dvěma roky (než jsem to definitivně zavrhnul jako pro mě zbytečné). Ani se nepamatuju, že by servo mělo nějakou střední polohu, spíš jenom ty krajní... a neměřil jsem nic. Ale zkus změnit v configurations.h hodnotu "70" v řádku

#define SERVO_ENDSTOP_ANGLES {{0,0}, {0,0}, {70,0}} // X,Y,Z Axis Extend and Retract angles

Těch 1602us totiž asi odpovídá těm 70°.
Re: Servo ve FW Marlin
February 08, 2016 03:32AM
Tak jsem si trochu pohrál. Žádnou střední polohu po resetu jsem nikde nenašel.
V Marlinu 1.1.0-RC3 je poloha Zserva po resetu dána tím druhým parametrem ("poloha sonda zvednuta=Retract"). Parametry mohou být zadány buď v úhlových stupních, nebo v mikrosekundách, třeba:
#define SERVO_ENDSTOP_ANGLES {{0,0}, {0,0}, {45,135}} // X,Y,Z Axis Extend and Retract angles
nebo
#define SERVO_ENDSTOP_ANGLES {{0,0}, {0,0}, {1000,2000}} // X,Y,Z Axis Extend and Retract angles
Re: Servo ve FW Marlin
February 27, 2016 05:25PM
Quote
jirpil
Není nad to si ujasnit otázku winking smiley.
Podle mě není DEFAULT_PULSE_WIDTH poloha po resetu, je to jenom jmenovitá hodnota neutrálu serva, kterou knihovna Arduina používá. Hrál jsem si s bed levelingem krátce asi před dvěma roky (než jsem to definitivně zavrhnul jako pro mě zbytečné). Ani se nepamatuju, že by servo mělo nějakou střední polohu, spíš jenom ty krajní... a neměřil jsem nic. Ale zkus změnit v configurations.h hodnotu "70" v řádku

#define SERVO_ENDSTOP_ANGLES {{0,0}, {0,0}, {70,0}} // X,Y,Z Axis Extend and Retract angles

Těch 1602us totiž asi odpovídá těm 70°.

Zapoměl jsem podat info.
Odzkoušel jsem v Servo.H zadat místo #define DEFAULT_PULSE_WIDTH 1500
#define DEFAULT_PULSE_WIDTH 1100 A opravdu, po resetu se délka pulzu pro servo zkrátí na cca 1050us.

Tebou doporučený #define SERVO_ENDSTOP_ANGLES {{0,0}, {0,0}, {70,0}} jsem zkoušel od 45 do 100 a po resetu stále těch 1600uS. Jestli se to nějak projeví, tak asi později při aktivaci autolevelingu.
Tohle je pro řízení modelářskýho regulátoru otáček a je nutný, aby co nejdříve po zapnutí Arduina regulátor dostal hodnotu kolem 1100uS, což je stav nulové otáčky. Pokud dostane délku impulzu odpovídající nějakým otáčkám, hodí chybu a nebo se dokonce dostane do programovacího módu, což je nežádaný stav.
Jirka
Re: Servo ve FW Marlin
February 28, 2016 02:27AM
Podle mého pozdějšího příspěvku jsi měl zkusit tohle:

nechat #define DEFAULT_PULSE_WIDTH 1500 a zadat #define SERVO_ENDSTOP_ANGLES {{0,0}, {0,0}, {0,1100}}.

Po resetu je servo v poloze "retract",t.j. délka pulzu 1100us.

Pokud ale chceš ten regulátor použít jinak než se používá servo autolevelingu, budeš muset dělat změny v kódu Marlinu.

Edited 1 time(s). Last edit at 02/28/2016 03:49AM by jirpil.
Re: Servo ve FW Marlin
February 29, 2016 04:29PM
Mě to funguje s #define DEFAULT_PULSE_WIDTH 1100 jak jsem psal. V Marlinu nic měnit nemusím, servo se přeci dá kdykoliv změnit poloha zadáním g-code M280 P0 S2000 - maximum otáček, M280 P0 S1050 minimum otáček. Tedy ne v otáčkách ale mikrosekundách. Marlin dokonce umí sežvejkat G-code G01 Z-2.0000 F150 S2000 co vygeneruje CAM. Ta hodnota otáček S je nastavitelná v popisu nástrojů v CAM. Změním nástroj, změní se jeho otáčky.
Jirka
Re: Servo ve FW Marlin
March 01, 2016 02:58AM
Už tě chápu. Ty nechceš používat serva pro autoleveling (spletlo mě v prvním příspěvku "Hledal jsem definice serva v Configuration. h v sekci Auto bedu"). Takže SERVO_ENDSTOPS se tě netýká.
(Doplněno)
Jenže pozor, možná záleží na verzi Marlina, ale v 1.1.0-RC3 mi bez definic SERVO_ENDSTOPS žádný výstup pro servo nefunguje.

Edited 1 time(s). Last edit at 03/01/2016 05:22AM by jirpil.
Sorry, only registered users may post in this forum.

Click here to login