PIC - Parallella processer

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Glenn Fridén
Inlägg: 5
Blev medlem: 22 oktober 2009, 07:23:19
Ort: Hisingen, Göteborg

PIC - Parallella processer

Inlägg av Glenn Fridén »

Hej,

Jag är nybörjare på PIC men knåpar på så gott jag kan. Nu vill jag använda en PIC12F683 (eftersom den är billig, liten och har inbyggd PWM) för att göra en ventilstyrning. Kretsen ska mäta temperaturen med en Dallas DS1820 och sedan styra ett RC-servo till rätt läge beroend på det uppmätta temperaturen.

Jag har fått till mätningen med DS1820 (lite halvklumpigt kanske, har nån skitsnygg kod för detta är jag givetvis nyfiken) men fattar inte hur jag ska göra för att styra RC-servot i bakgrunden. Det behöver ju sina pulser hela tiden och det måste göras i bakgrunden när jag mäter temperaturen. Hur gör jag för att uppnå detta - jag vet inte om det kallas parallella processer, bakgrundsprocess etc.

Den kod jag hittills producerat är ju helt sekventiell. Jag måste ha missat något! Är det någon som gjort samma sak och kan dela med sig?

/Glenpa
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: PIC - Parallella processer

Inlägg av Micke_s »

Du ska kolla på interrupt och använda en timer.
http://www.epanorama.net/documents/motor/rcservos.html

Edit: Jag har gjort till avr. men då har den bättre lämpad 16bitars timer för skapa servopulser från hårdvaran.
eqlazer
Inlägg: 923
Blev medlem: 22 september 2007, 13:53:45
Ort: Göteborg

Re: PIC - Parallella processer

Inlägg av eqlazer »

Antar att du tänkte styra servot med PWM. PWM använder en timer som själv ligger och räknar och sköter utgången. Det enda du gör är att uppdatera några register som talar om pulsbredden och det går att göra när som, tex efter temperaturmätningen.
ristomemo
Inlägg: 1028
Blev medlem: 29 mars 2004, 14:12:18

Re: PIC - Parallella processer

Inlägg av ristomemo »

Har aldrig försökt kontrollera en rc-servo från en PIC, men efter att läst länken Micke_s postade så tycker jag att detta borde vara smidigast att göra med en PIC med hårdvaru-PWM. (har ej kollat närmare på PIC12F683 om den har det eller ej)

Edit: eqlazer var snabbare
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC - Parallella processer

Inlägg av sodjan »

Hårdvaru-PWM-moduler är generellt olämpliga til RC-server styrning.
Det är för låg frekvens för att fungera smidigt. Enklast är att ha ett
timer-interrupt som ligger i bakgrunden och sköter servot. Det bör
inte vara något problem alls att samköra detta med 1-Wire hanteringen.
Du borde väl kunna läsa av DS1820 i 20 ms pausen mellan två pulser
till servot, eller något liknande. Jag antar att ventilen även står kvar
i sitt läge om pulserna uteblir en lite längre tid, eller glider ventilen iväg ?
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: PIC - Parallella processer

Inlägg av Micke_s »

Det går i avr att använda en 16bitars timer som gör rc-servopulser i alla fall, fast då får man max 64step på servot. Men som sodjan skriver så är timer interrupt bättre att sköta detta i, du måste vara rätt så noga med att pulserna kommer samtidigt så du slipper ha ett servo som hoppar lite.

edit: ändrade pwm till rc-servopulser
edit2: tror det kan bli svårt att använda 16-bitars timern i pic12f att skapa rc-servopulser.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: PIC - Parallella processer

Inlägg av Icecap »

Precis som sodjan skriver: det är INTE PWM man styr RC-servon med, det är bredden på en puls som är viktig.

Och själva styrningen är ganska enkel: En puls på 1,0ms = ytterställning åt ena hållet, 2,0ms = ytterställning andra hållet och 1,5ms = mittställning. Dessa pulser bör komma med runt 20ms mellan.

Jag har tidigare gjort så att jag avläste en DS18S20 vid att ha en timer-interrupt på 10Hz (som jag hade till mycket annat), jag lade till att den läste/skrev 1 bit varje interrupt till DS18S20'an, temperaturen ändrar sig ju inte så snabbt att det är viktigt att det går snabbt.

Sedan är det frågan för vilken upplösning du vill ha på servon, jag löste det på en PIC och fick en upplösning på 1000 steg, sannolikt alldeles för många för att mekaniken kan följa med. Det projekt finns på min hemsida, under "Freebies".

I essens fungerar det såhär:
Via serieporten kommer det kommandon i form av "kanal X till läge Y", värdet sparas i rätt minneslokation.
Sedan kör en timer-interrupt kontinuerligt och varje av de 13 kanaler får var sin puls och längden är beroende på de värden som är sparat i de respektive minneslokationer.
Senast redigerad av Icecap 22 oktober 2009, 09:33:05, redigerad totalt 1 gång.
Användarvisningsbild
Glenn
Inlägg: 36772
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: PIC - Parallella processer

Inlägg av Glenn »

Om nu servot bara ska styra en ventil så är det jun inte hela världen om det blir lite ryck och så, och då kan man ju helt enkelt anpassa sin "läsloop" och en paus så timingen mot servot blir ungefär rätt, servon är lite olika kinkiga på det, men oftast ganska toleranta.

Och till trådskaparen: Snyggt förnamn :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC - Parallella processer

Inlägg av sodjan »

Antalet "steg" (eller "upplösning") som det där ventilen behöver är helt
centralt för designen av servo-rutinen. Det avgör vilken upplösning
räknaren som räknar behöver. Behövs det mer än kanske 10 lägen
på ventilen ?
Användarvisningsbild
Glenn Fridén
Inlägg: 5
Blev medlem: 22 oktober 2009, 07:23:19
Ort: Hisingen, Göteborg

Re: PIC - Parallella processer

Inlägg av Glenn Fridén »

Tackar för komplimangerna om mitt namn - det är inte varje dag som man hittar en namne på andra sidan Sverige! :-)

Kraven på upplösning är låga! Tio steg är kanske i minsta laget men det dubbla borde räcka.

Eftersom det är stor termisk tröghet i systemet så är kraven på tidsmässig uppdatering låga. Det räcker egentligen bra om jag mäter temperaturen en gång i timmen och ställer shunten efter detta mätvärde. Det är snarare en nackdel att vrida på shunten oftare.

Jag är osäker på hur R/C-servot uppför sig då det inte får någon signal. Shunten i sig påverkar inte servot med någon kraft då det står stilla. Det har ingen form av fjäderbelastning. Däremot vet jag inte om ett vanligt R/C-servo (typ Futaba från nån firma som säljer hobbygrejer) strävar efter att gå tillbaka till 0-läge då det inte får någon styrsignal - någon som vet? Om inte så räcker det med att skicka en skur med styrsignaler en gång i timmen och därefter låta servot vila.

/Glenn
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: PIC - Parallella processer

Inlägg av Micke_s »

En vanlig RC-servo gör inget om det inte kommer en insignal och eftersom det inte finns någon kraft som påverkar servot så kommer det inte flytta sig.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC - Parallella processer

Inlägg av sodjan »

Jahaja, ja då har du ju ett mycket enklare "läge" så att säga.
Du kan ju enkelt göra en sak åt gången. Mäta temperaturen då
och då (beroende hur hur din reglerloop ser ut) och köra lite med
servot. Det räcker ju att köra servot så pass länge så att det täcker
in gångtiden mellan fulla utslag. Och som sagt, ett RC server står still
utan insignal. Dock kan man vrida ett kvalitets servo bakvägen om man
belastar armen (eller skivan om det är en roterande servo).

En annan sak. Beroende på massan på det som ska flyttas (spjället)
så kan det vara snyggt att "rampa" servot, d.v.s inte bara låta det gå
med full fart direkt. Det kan (beroende på massan) kanske bli för stor
belastning direkt från stillastående. Samma sak när man närmar sig
börvärdet (-läget) så att det bromsar in snyggt. Eller så kör man det bara
långsamt med jämn hastighet hela tiden, du har ju inga stora krav
på att spjället ska flyttas snabbt i alla fall.
Gimbal
Inlägg: 8687
Blev medlem: 20 april 2005, 15:43:53

Re: PIC - Parallella processer

Inlägg av Gimbal »

Micke_s skrev:Det går i avr att använda en 16bitars timer som gör rc-servopulser i alla fall, fast då får man max 64step på servot.
Nja, 16 bitar utspridda på 20ms ger ca 3200 steg per ms. Det ger rätt bra upplösning och betydligt mer än 64 steg.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC - Parallella processer

Inlägg av sodjan »

Nja, byggde inte den tidigare beskrivningen på hur PWM modulen i sig fungerar också ?
Där kan det finnas andra begränsningar...
Skriv svar