hej,
jag är ny i forumet och tänkte börja här med en fråga
Kan ni ge mig ett exempel på hur en C kod kan se ut om:
PIC16F877 ska generera servopuls (1-2 ms) i en interruptrutin + att watchdog ska vara aktiv ( som inte får resttas av interruptrutinen) ?
jag vill styra en robotarm som har 4st motorer. servopulsen ska vara 1,5 ms (mittläge) + 500 us (till höger) - 500 us (till vänster), dvs ( 1- 2 ms).
servopulsen ska genereras var 5:e ms och pulslängden till resp. servo var 20:e ms...
jag är faktiskt förvirrad och har nästan ingen aning om hur jag ska börja med det ...
Det du ber om är en ganska öppen fråga och jag tror inte att någon kommer skrva ett komplett exempel åt dig som du kan använda.
Varför väljer du just den processorn som är så gammal?
om du börjar från nytt så skulle jag rekomendera en dsPIC till det du ska göra (antar att det är för hobby bruk) om din programmerare klarar av att programmera en sådan. Annars rekomenderar jag en pic från 18F familjen.
anledningen till att jag rekomenderar dspic istället för 16 el 18 picen är för att den är mer optimerad för C-programmering. Dessutom har varje perferienhet (timer, extern interrupt, ad interrupt mm) en egen address i minnet som programpekaren hoppar till. Samtidigt är de snabbare och har en roliga matte funktioner för fft beräkningar, regulatorer, filter mm. Jag antar nämligen att du vill göra nått mer med pic processorn t.ex att läsa in sensor värden eller kommandon från serieporten för att styra din robotarm.
vissa dsPIC processorer har upp till 8st pwm utgångar som styrs hårdvarumässigt. Ska du lösa det i din 16f eller 18f så blir det en ganska stor och tung interrupt rutin, men det går säkert att optimera på nått sätt.
Mitt tips till dig är:
1. fundera lite på vad du vill göra och vad du behöver för något. läs gärna lite i databladen för t.ex 18f familjen och 33f familjen så du själv får en bild av vad de kan och vilka egenskaper du vill använda för att lösa problemet.
2. gå in på microchips hemsida och tryck på deras länk "Product Selection Tools" välj "web version" och där kan du lätt fylla i vad du behöver så väljer programmet automagiskt ut vilka alternativ du har till processorer.
3. ladda ner en kompilator C-18, C-30 eller Hi-Tech och titta lite på kodexempeln som följer med, det. Man kan oftast köra simulatorn i mplab för att testa sin kod innan man har en färdig hårdvara. t.ex skulle du kunna testa starta en timer, ställa in de portar du vill använda och försöka få igång din applikation så gott det går.
dsPIC är ganska olämplig till detta, den kör på 3,3V och RC-servo kör på 5V.
Då ska man fixa en del mivåskift osv, inte värd det.
På min hemsida under "Freebies" finns det en RC-servostyrningsenhet med schema och program i C, det är gjort för att styra 12 RC-servos men mindre kan ju göra det, programmet innehåller iaf. allt som behövs, det är bara att klippa och klistra.
RC-Servos kör på 4.8V - 6V för att vara mer exakt.
Så vill man ha full kräm på servot (6V) så måste man ändå köra nån nivåskift.
Annars är PWM (automatisk, modulering av pulsbredden blir det ju även om man gör det "för hand") egentligen inte optimalt att köra RC-styrning eftersom tiden som de är på är så mycket kortare än tiden de är av, så för att få godtagbar upplösning bör man ha minst 16-bits PWM.
Nu är det risk för att vi hamnar OT men är det inte så att ett RC-servo får sin power från gnd och Vcc medan utslaget styrs av PWM ingången? Jag har styrt andra enheter t.ex displayer som behöver 5V eller i2c mellan en 5V och en 3.3V pic. Oftast brukar logiken hitta rätt mellan 1a och 0a även om man inte når max-spänning.
Någon som testat mata sitt servo med 6V och bara 3.3v PWM?
RC-servon styrs inte med PWM, de styrs med pulsbredd!
De styrs med pulsbredden medan paustiden på styrpulsen är ganska likgiltig i styrsammanhang.
I PWM har båda puls och paustid en funktion.
Att många "normala"(? iaf. de äldre typerna) RC-servos sedan bara kan skicka en puls till motorn för varje styrpuls och därför behöver dom relativt ofta för att röra sig alls är en annan sak.
Det du säger är korrekt, men är det någon som påstått något annat?
EDIT: Informationen skadar iofs inte även om någon inte påstått annat.
Det enda som sagts är att det går att styra RC-Servon med PWM.
Sen finns det en annan aspekt varför man bör hålla en 15-20 ms paustid, det är inte nödvändigtvis ett servo du vill styra utan det kan även t.ex. vara ett
fartreglage till en elmotor och då kan paustiden ha betydelse (dock inte nödvändigtvis).
tack för alla svar, trodde inte jag skulle få så många
iaf, jag har endast tillgång och möjlighet till att använda pic16f877 ... därför jag använder den. men det är inget problem för det går ju att köra servo-styrning med den, dvs det finns allt man behöver i den.
jag tänkte använda antingen potentiometrar eller knappar ( en till resp. servo ). använder jag pot så måste jag använda ADC eller hur?
Icecap skrev:
...
Att många "normala"(? iaf. de äldre typerna) RC-servos sedan bara kan skicka en puls till motorn för varje styrpuls och därför behöver dom relativt ofta för att röra sig alls är en annan sak.
Stämmer bra även på nya servon. Det är enbart dyra digitala servon som konternueligt skickar pulser till motorn även mellan styrpulserna från mottagaren.
Ett tips kan vara att köpa en servostyrningsmodul som matas seriellt. Sök på "mini SSC ii". Förutsatt att inte poängen är att lära dig att styra servon direkt från en PIC.
"Sök på 'mini SSC ii'".... eller kolla på det projekt på min hemsida som styr 12 RC-servos, det är just designat till att omvandla seriella kommandon till servopositioner.