Robotarm m.h.a. PIC

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Watchdog
Inlägg: 3
Blev medlem: 31 december 2008, 00:42:05
Ort: Jönköping

Robotarm m.h.a. PIC

Inlägg av Watchdog »

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 ...

Väldigt tacksam om ni kan hjälpa mig
Gott nytt år :)
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Inlägg av dangraf »

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.

Lycka till!
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

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.
Användarvisningsbild
stekern
Inlägg: 453
Blev medlem: 2 november 2008, 08:24:18
Ort: Esbo, Finland

Inlägg av stekern »

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.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

I det projekt jag har på hemsidan använder jag just Timer1 som ju är en 16-bit timer...

Och servon kan fint köra på 6V och styras av 5V pulser.
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Inlägg av dangraf »

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?
Användarvisningsbild
stekern
Inlägg: 453
Blev medlem: 2 november 2008, 08:24:18
Ort: Esbo, Finland

Inlägg av stekern »

Min kommentar var inte riktad åt ditt program Icecap, bara mer som generell information.

Men det går säkert som du säger att köra på 6V och styra med 5V (och eventuellt då också styra med 3.3V)
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

Hur svårt är det att få nivåomvandling till servo:na
kör en npn transistor ut och ha pull-up till rc-servot:s matspänning.
Användarvisningsbild
stekern
Inlägg: 453
Blev medlem: 2 november 2008, 08:24:18
Ort: Esbo, Finland

Inlägg av stekern »

Nä, det är inte svårt.
Precis så gör jag här:
http://elektronikforumet.com/forum/view ... hp?t=30715
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

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.
Användarvisningsbild
stekern
Inlägg: 453
Blev medlem: 2 november 2008, 08:24:18
Ort: Esbo, Finland

Inlägg av stekern »

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).
Watchdog
Inlägg: 3
Blev medlem: 31 december 2008, 00:42:05
Ort: Jönköping

Inlägg av Watchdog »

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?
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Inlägg av pheer »

Icecap: "dsPIC är ganska olämplig till detta, den kör på 3,3V och RC-servo kör på 5V."

Det är skillnad på dsPIC30Fxxxx och dsPIC33Fxxxx. Här är några:

dsPIC30F
Upp till 5V matning
Finns i DIP-kapsling
Har inte dma

dsPIC33F
Upp till 3,3V matning
Finns inte i dip-kapsling
Har dma
Användarvisningsbild
Walle
Moderator
Inlägg: 7701
Blev medlem: 14 december 2004, 10:32:18
Ort: Stockholm

Inlägg av Walle »

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.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

"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.
Skriv svar