Klidné zapnutí serva

Problémy s návrhem, konstrukcí, zapojením, realizací elektronických zařízení

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
qwert0

Klidné zapnutí serva

#1 Příspěvek od qwert0 »

Mám naprogramované mcu mega16. Servo řídím pomocí phase correct oc1 ocr1a. Vše funguje krásně, frekvence je teda jen asi 46Hz kvůli frekvenci mcu ale to snad nevadí. Servo je hitec hs-422. Jediný problém na kráse je to, že pokud restartuju mcu, tak servo škubne na jednu stranu a pak se zas vrátí. Přejede pozici a vrátí se na tu na které bylo původně, prostě takové škubnutí. Dá se tomuhle nějak vyhnout nebo je to prostě normální? Problém je určitě s inicializací pwm, servo asi reaguje hned na první impuls a ten teprve nabíhá, proto asi to škubnutí.
Uživatelský avatar
Mendor
Příspěvky: 223
Registrován: 16 dub 2008, 00:00
Bydliště: Kladno

#2 Příspěvek od Mendor »

Zkus napřed rozjet MCU a po malé chvilce teprve připoj servo na napájení.
Návštěvník

#3 Příspěvek od Návštěvník »

Co dělá to servo, když má napájení a nemá impulsy (na řídicím vstupu je trvalá log.0)?
qwert0

#4 Příspěvek od qwert0 »

Bez impulsů po připojení napájení necukne. Pokud mcu běží a odpojím a připojím vodič s pulsy tak servo cukne. Odpojím-li napájení a vše ostatní je připojeno a napájení znovu připojím, servo cukne. Pokaždé stejným směrem, jen je to cuknutí pokaždé jiné(větší,menší, ale vždy ve směru kratšího impulsu), takže servo se "chytne" v určitém místě na nějakém impulsu, ale nestihne ho celý a proto cukne. Takže nejspíše vím, kde je problém, ale jak to mám vyřešit?
Uživatelský avatar
Mendor
Příspěvky: 223
Registrován: 16 dub 2008, 00:00
Bydliště: Kladno

#5 Příspěvek od Mendor »

S tím asi nic neuděláš. U svého modelu letadla když zapnu hlavní aku, tak taky všechny serva sebou cuknou.
Uživatelský avatar
eljaro
Příspěvky: 441
Registrován: 03 pro 2004, 00:00
Bydliště: Krnov
Kontaktovat uživatele:

#6 Příspěvek od eljaro »

vyčlenit ještě jeden pin pro blokaci serva -bod odpojit napájení serva nebo blokovat řízení než PWM jede ok
Návštěvník

#7 Příspěvek od Návštěvník »

qwert0 píše:Bez impulsů po připojení napájení necukne. Pokud mcu běží a odpojím a připojím vodič s pulsy tak servo cukne. Odpojím-li napájení a vše ostatní je připojeno a napájení znovu připojím, servo cukne. Pokaždé stejným směrem, jen je to cuknutí pokaždé jiné(větší,menší, ale vždy ve směru kratšího impulsu), takže servo se "chytne" v určitém místě na nějakém impulsu, ale nestihne ho celý a proto cukne. Takže nejspíše vím, kde je problém, ale jak to mám vyřešit?

Dej na ten PWM výstup odpor pár kilo na zem, ten by na něm měl udržet log.0 než naběhne procesor. A v počáteční inicializaci ten pin nastav do nuly (nejdřív PORTX.y do 0 a pak DDRX.y do 1) a PWM inicializuj tak, aby už první impuls měl správnou délku. Proč používáš Phase correct PWM?
qwert0

#8 Příspěvek od qwert0 »

bitClear (PORTD, 6);
bitSet (DDRD, 6);

setcampos = 1460;
OCR1A = setcampos;

TCCR1A = 0xA0; // nastavit OC1A a OC1B na low pri porovnani
TCCR1B = 0x12; // Phase and Frequency Correct mode, porovnani s ICR1, delicka 8
ICR1 = 20000; // do kolika se bude pocitat

I odpor jsem tam dal a stejně to škubne. Zajímavé je, že pokud OCR1A vůbec nenastavím tak servo zajede až na krajní polohu a pak se vrátí. Phase correct používám, protože jsem to viděl v nějakém návodu a funguje to.
Návštěvník

#9 Příspěvek od Návštěvník »

Při inicializaci toho časovače je dobré ho i vynulovat a spustit ho až úplně na konec. Ty ho spustíš ještě dřív než nastavíš ICR1.
A hlavně OC1A je na PD5 :wink:
qwert0

#10 Příspěvek od qwert0 »

Stejně to škube:

bitClear (PORTD, 5);
bitSet (DDRD, 5);

TCCR1A = 0;
TCCR1B = 0;

setcampos = 1460;
OCR1A = setcampos;

ICR1 = 20000; // do kolika se bude pocitat
TCCR1A = 0xA0; // nastavit OC1A a OC1B na low pri porovnani
TCCR1B = 0x12; // Phase and Frequency Correct mode, porovnani s ICR1, delicka 8
Návštěvník

#11 Příspěvek od Návštěvník »

Vynulovat čítač, ne konfigurační registry.
TCNT1 = 0;
Ale to asi taky nepomůže, on by měl být po resetu vynulovaný. Chtělo by to skouknout osciloskopem, jak vypadá ten první puls. Jestli má správnou šířku, tak je asi problém v servu, že mu vadí dlouhá pauza bez pulsů. :nevim:
Uživatelský avatar
Mendor
Příspěvky: 223
Registrován: 16 dub 2008, 00:00
Bydliště: Kladno

#12 Příspěvek od Mendor »

Jen tak ze zvědavosti jsem vytáhl ze šuplíku servo HS 81, připojil ke zkušební desce s PICem a napsal obslužný program.
Servo je napájeno ze společného zdroje 5V pro PIC. Řídící PWM je vytvořeno programově.

Výsledek testu:
Po zapnutí napájení s nastaveným výstupním pinem na log 0 se servo ani nehlo ( ani nevrzlo).
Po stlačení tlačítka se spustil PWM 1.5 ms / 20 ms a servo najelo na střed.

Po zopakování celé procedury se v žádném případě servo ani nehlo ( ani nevrzlo ).

Takže tam budeš mít někde nějakou chybu nebo zkus jiné servo.
qwert0

#13 Příspěvek od qwert0 »

Tak jsem dal tohle na začátek programu a pak 2 minutové čekání, aby se vyloučila chyba ostatního:

OCR1A = 1900;

ICR1 = 20000; // do kolika se bude pocitat
TCCR1A = 0xA0; // nastavit OC1A a OC1B na low pri porovnani
TCCR1B = 0x12; // Phase and Frequency Correct mode, porovnani s ICR1, delicka 8

TCNT1=0;
bitSet (DDRD, 5);

m_delay_s(120);

Tohle by teoreticky mělo inicializovat časovač, pak ho vynulovat a od nuly posílat do DDRD 5. Ale ať tohle proházím jak chci, stejně to škubne. Servo je HS-422.
Odpovědět

Zpět na „Řešení problémů s různými konstrukcemi“