Klidné zapnutí serva
Moderátor: Moderátoři
-
qwert0
Klidné zapnutí serva
-
Návštěvník
-
qwert0
-
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
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
-
qwert0
-
Návštěvník
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
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.