PIC och RC servo vill inte..

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

PIC och RC servo vill inte..

Inlägg av squiz3r »

Hej, jag håller på att försöka göra ett program till en PIC16F877A som ska styra ett moddat "Blue Bird BMS-630mg" servo. Mitt problem är att jag har kollat i oscilliscopet, och där ser det bra ut, jag har kopplat in ett gammalt Parallax servo, och där fungerar det, men när jag kopplar in de nya servona går det inte..

Jag testade skriva koden såhär:

Kod: Markera allt

fram ;subrutin för att köra
bsf h_servo
bsf v_servo
call del_clock ;paus för att få servona att gå medsols.
bcf h_servo
bcf v_servo
också lät jag den subrutinen göras var 20'e ms. På oscilliscopet ser signalerna exakt lika dana ut, men när jag kopplar in den nya sortens servo så funkar den bara på det servot som jag satte igång först.. (i detta fallet h_servo).

Sen testade jag:

Kod: Markera allt

fram ;subrutin för att köra
bsf h_servo
call del_clock ;paus för att få servona att gå medsols.
bcf h_servo
bsf v_servo
call del_clock ;paus för att få servona att gå medsols.
bcf v_servo
Men då blev det samma sak som innan att bara "h_servo" fungerade med de nya servona.

Men det funkade om jag skrev:

Kod: Markera allt

fram ;subrutin för att köra
bsf h_servo
call del_clock ;paus för att få servona att gå medsols.
bcf h_servo
call del_20ms ;pausa i 20 millisekunder.
bsf v_servo
call del_clock ;paus för att få servona att gå medsols.
bcf v_servo
Alltså satte en till paus i mellan dem.

Det som gör att servona inte fungerar är att när de inte är inkopplade (eller när de gammla är inkopplade) så är där en fin signal, men så fort som jag kopplar in det nya så blir signalen konstant hög... Någon som kan förså varför?

Mvh

Edit: Jag har kommit framm till att jag inte behöver ha en 20ms pause imellan dem, utan det räcker med en NOP, så det kan jag ju acceptera, men jag vill ju ändå veta vad det beror på.. Tack på förhand!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> jag har kopplat in ett gammalt Parallax servo, och där fungerar det, men när jag kopplar in de nya servona går det inte..

Är det *BARA* den skillnaden ??
I så fall är väl koden ganska oinstressant,
Vad är det sm skilljer servona åt ?

> men så fort som jag kopplar in det nya så blir signalen konstant hög...

Låter som felkoppling,,,
Användarvisningsbild
Stinrew
Inlägg: 954
Blev medlem: 20 augusti 2006, 03:14:41
Ort: Motala
Kontakt:

Inlägg av Stinrew »

En fråga:

Det sär servot ser stort och kraftfullt ut. Hur ser matningsspänningen ut om du kollar med oscilloskåpet(jag tycker att det borde krävas en hel del ström för att driva det)??
JustNeed
Inlägg: 799
Blev medlem: 7 november 2007, 22:07:01
Ort: 08

Inlägg av JustNeed »

Jag höll på aslänge med att få digitalservon att funka för ett tag sedan. Det visade sig att problemet var att de behövde lite mer spänning/ström(körde från batterier).
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

"Låter som felkoppling,,, "
Verkar inte så, jag kopplar in dem likadant, och om jag läggen in en pause på en "NOP" emellan dem så hjälper ju det :S

Jag körde från labbagget, det drar ungefär 1Amp och jag har satt kondingar lite här och var, strömmen ser ganska bra ut tycker jag..

mvh
Användarvisningsbild
Stinrew
Inlägg: 954
Blev medlem: 20 augusti 2006, 03:14:41
Ort: Motala
Kontakt:

Inlägg av Stinrew »

Är du säker på att din PIC går stabilt, så det inte är den som startar om vid varje försök att köra servot? Har dom samma strömförsörjning, eller kör du PICen separat?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> och om jag läggen in en pause på en "NOP" emellan dem

Jag har inte en aning om hur signaleringen till "digitala" servon ser ur,
om det nu var det som det handlar om. Menar du att du har en paus
motsvarande *enbart* en NOP istället för de vanliga ca 20 ms ?
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Vad jag rakt av ser är det ett av de vanliga read-modify-write-problemer och den borde speciellt sodjan känna till, du har ju skrivit om en del.

Anledningen är att när man kör bit-operationer läsas porten precis i början av instruktionens utförande och skrivs sist, detta gör att har man den minste kapacitiva belastning hinner portpinnen inte att gå '0' (/'1') innan man läser igen, alltså kommer den pinne att sättas omedelbart till det "gamla" värdet.

EDIT:
bcf h_servo:
1: Instruktionen dekodas
2: porten läsas
3: Bit'en modifieras
4: Porten skrivs
bsf v_servo
1: Instruktionen dekodas
2: porten läsas MEN h_servo HAR INTE HUNNIT BYTA LÄGE pga. kapacitiv belastning.
3: Bit'en modifieras
4: Porten skrivs MEN DEN SKRIVS MED FEL VÄRDE FÖR h_servo!

Med en NOP mellan hinner den kapacitiva belastningen att laddas ur och den läsas som '0'.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Icecap har sannolikt rätt, nu när man togs sig tid att läsa *all* kod... :roll:
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Ok, Tack! Ska kolla om det beror på det. Jag misstänkte lite att det kunde vara något sånt, men jag viste inte riktigt hur det fungerade. :)

Återkommer med ressultat!

Mvh
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Re: PIC och RC servo vill inte..

Inlägg av squiz3r »

Hej. Dags att väcka en gammal tråd!

Som Icecap trodde så var det just det som var felet, och nu har jag samma problem igen!

Saken nu är bara att det är en PIC18F4620, och på 18 serien har man ju ett till register just för att ta bort detta problemet om jag fattat det rätt? (LAT-registeren)

Så varför får jag samma problem nu i så fall??

För övrigt skriver jag i c nu. (MCC18 från microchip)

// Danne
bearing
Inlägg: 11677
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: PIC och RC servo vill inte..

Inlägg av bearing »

Du kanske använder portarna på fel sätt? eller bara en bugg?
Har du simulerat?
Har du kollat med oscilloskåp?
Hur ser koden ut?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC och RC servo vill inte..

Inlägg av sodjan »

Håller med bearing... :-)
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Re: PIC och RC servo vill inte..

Inlägg av squiz3r »

Hur menar du med att jag använder portarna på fel sätt?

Först döper jag porten till något:
#define ettServo LATbits.LATD5

Sen sätter jag dem till utgånger:
TRISD = 0b00000000;

också sätter jag dem höga:
ettServo = 1;
ettAnnatServo = 1;
..osv


Sen sätter jag dem låga:
ettServo = 0;
ettAnnatServo = 0;
..osv


och då blir det felet... Men om jag sätter en NOP innan jag tilldelar nästa port ett värde så fungerar det...

Om jag har fattat det rätt så kan man lika gärna skriva till PORTX istället för LATX för det skrivs ändå bara till LATX oavsett vad man skriver?

Har inte simulerat, vet inte vad jag ska leta efter i så fall...
Jag har kollat med oscilloscope, och det blir exakt som jag beskrev i mitt första inlägg, nämligen att värdet ändras tillbaks..

Edit: Sodjan: Håller med om vad??
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC och RC servo vill inte..

Inlägg av sodjan »

> Om jag har fattat det rätt så kan man lika gärna skriva till PORTX istället för
> LATX för det skrivs ändå bara till LATX oavsett vad man skriver?

Ja, om du alltid skriver *hela* registret. Om du även läser porten
(t.ex genom att använda BCF/BSF mot den) så kan LAT-registret
underlätta.

Hur har du gjort med analoga funktioner på porten/portarna ?

> Edit: Sodjan: Håller med om vad??

Det bearing sa, så klart. :-)
Att det saknas/saknades information för att kunna uttala sig.
Skriv svar