Servo problem (Hitec HS-300)

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
FS
Inlägg: 245
Blev medlem: 14 januari 2005, 23:35:45

Servo problem (Hitec HS-300)

Inlägg av FS »

Försöker att styra ett Hitec HS-300 rc-servo med en PIC 16F876A och dess PWM del. Får det dock inte att fungera. Har provat att pulsa med mellan 0.9ms och 2.1ms långa pulser utan lycka...

Hur långt behöver det vara mellan dessa pulser?

Kikade lite med oscilloskopet och kom fram till att mina pulser liknade de som kom ut från RC-mottagaren som servot egentligen var avsedd för. Dock rör sig inte mitt servo det minsta (förutom vissa ryckningar när strömmen kopplas på).

Några ideer?
mullemeck
Inlägg: 1306
Blev medlem: 27 maj 2003, 23:52:06
Ort: Lund
Kontakt:

Inlägg av mullemeck »

har för mig det ska vara ca 10ms mellan pulserna
FS
Inlägg: 245
Blev medlem: 14 januari 2005, 23:35:45

Inlägg av FS »

Ok, tror nämligen att jag provat med detta men ändå vill det sig inte. Det kanske är bättre att köra nån slags loop iställset för att använda PWM?

Ska ta och prova med ett annat servo för att se om det är någon skillnad.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Om du använder hårdvaru-PWM, så går den inte att få ner så lågt som 50 Hz som krävs för servostyrning så länge du kör på en "normal" kristall på några MHz.
Istället bör du använda dig av ett timer-interrupt som togglar signalutgångerna till dina servos.
danei
EF Sponsor
Inlägg: 27414
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Inlägg av danei »

mullemeck skrev:har för mig det ska vara ca 10ms mellan pulserna
Jag har för mig att det är 20ms.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

10-30 ms duger...
evert2
Inlägg: 2182
Blev medlem: 18 april 2004, 22:47:56
Ort: Jönköping

Inlägg av evert2 »

FS: Se upp med spänningsmatningen till servona och microcontrollern. Som $tiff (tror jag) nämde för någon annan här på forumet: Om man använder sig av gemensam spänningsmatning till servorna och microcontrollern så kan det orsaka reset av PIC:en. En idé kan vara att använda sig av separata spänningsregulatorer.
FS
Inlägg: 245
Blev medlem: 14 januari 2005, 23:35:45

Inlägg av FS »

$tiff skrev:Om du använder hårdvaru-PWM, så går den inte att få ner så lågt som 50 Hz som krävs för servostyrning så länge du kör på en "normal" kristall på några MHz.
Istället bör du använda dig av ett timer-interrupt som togglar signalutgångerna till dina servos.
Enligt oscilloskopet kommer jag ned tillräckligt lågt men jag tror jag kommer få problem med upplösningen så det blir nog att göra om för timer-interupt. Tycker ändå det är konstigt att servot inte rör sig för enligt oscilloskopet verkar allting vara rätt?!

Jag kör spänningsmatningen till servot med delar från RC-utrustningen (6V) och själva PIC:en på 5V från ett "DEMO BOARD". Kan det vara så att servot inte nöjer sig med 5V styrpulser utan vill ha 6V där också?
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Då skulle jag gärna vilja se hur du konfigurerat timer2 och PWM-modulen.

Med en kristall på 4MHz kan då få som lägst ~244 Hz PWM. 20MHz ger som lägst 1,22 kHz. Med en klockkristall (32,7680 kHz) kan du däremot komma enda ner till 2 Hz. Så vad är det för klockbas du använder?

Jag tror servot nöjer sig med TTL-nivåer på sin insignal. Däremot måste du ha gemensam jord för de båda kretsarna.
FS
Inlägg: 245
Blev medlem: 14 januari 2005, 23:35:45

Inlägg av FS »

Gemensam jord har jag. Hade inte det i början och det yttrade sig i att servot drog iväg fullt medurs. Tog nån timma att komma på det felet... =)

Koden:

Kod: Markera allt

#include <16F876A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,NOBROWNOUT
#use delay(clock=4000000)

#zero_ram
main() {
//Setup I/O
   set_tris_a(0xFF);                            //A all inputs
   set_tris_b(0x01);                            //B0 input
   set_tris_c(0xFF);                            //C all inputs
   port_b_pullups(TRUE);
   
//Setup timers   
   setup_timer_2(T2_DIV_BY_16,250,1); // 4ms - 1/((1000000/16)/250) = 0.004s
   setup_ccp2(CCP_PWM);
   set_pwm2_duty(125); // 2ms

   do {
      } while (TRUE);
}
Använder en 4MHz kristall vilket ger en timerklocka på 1MHz.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Som du kanske vet, ska servopulserna se ut så här:

Kod: Markera allt

     ____                               ____      _+5V
    |    |                             |    |                  
    |    |                             |    |
____|    |_____________________________|    |____  _GND

    |<-->|
    1,0 - 2,0 ms

    |<-------------------------------->|
         10-30 ms
Du har satt upp din PWM precis som jag sa, på ~244 Hz (~4ms period), det är alldeles för kort tid. Du ska ha rund 50 Hz (ca 20 ms period) för att det ska fungera.

Försök själv med en vanlig delayloop och se att det kommer funka.
Ska du ha det hårdvaruimplementerat så är det timer-interrupt som gäller.
FS
Inlägg: 245
Blev medlem: 14 januari 2005, 23:35:45

Inlägg av FS »

Jag misstänkte nästan att pulserna kom lite väl för ofta med 4MHz kristallen. Finns det nån gräns för hur ofta man kan skicka dem? Hursomhelst, jag ändrade sedan från kristall till RC. Vilken exakt frekvens allt kördes på då vet jag inte men jag fick ihop pulser som såg ut så här: (enligt oscilloskopet)

Kod: Markera allt

     ____                               ____      _+5V 
    |    |                             |    |                  
    |    |                             |    | 
____|    |_____________________________|    |____  _GND 

    |<-->| 
    1,2 ms 

    |<-------------------------------->| 
    19 ms
Det borde ju ha fungerat men det gjorde det inte =/

Men jag ska som sagt skriva om det hela till timer-interrupt.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

"Finns det nån gräns för hur ofta man kan skicka dem?"

För tredje gången, en periodtid på 10-30ms går bra.

Om dina mätvärden på ovanstående figur stämmer så ska det fungera.
FS
Inlägg: 245
Blev medlem: 14 januari 2005, 23:35:45

Inlägg av FS »

Värdena stämmer... Börjar misstänkat att servoskiten vill ha högre styrspänning än 5V. Är det rimligt? Servot vägrade trots allt röra sig det minsta med 5V som matning.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

hur har du anslutit servot egentligen...?
Skriv svar