Sida 1 av 2

PIC med A/D omvandling och PWM styrning?

Postat: 29 juli 2005, 19:26:51
av Henry
Jag har en testat med kretsar såsom 555 och att med en potentiometer på enklaste sätt kunna styra ett vanligt servo med full kontroll. Har hittat massor av scheman på detta till 555 och 556 men det har inte gått att få pulserna exakta. Detta har gjort att jag varit nära att förstöra kugghjulen i servot flertalet gånger.

Så då tänkte jag på att en processor kan skapa dessa signaler i stället. Jag hade tänkt styra servot med en potentiometer kopplad till kretsen eftersom jag vill kunna styra det snabbt. Ett servo har väl 200 steg eller om det var 300 så jag vill kunna styra PWM signalen i lika många steg för att ha full kontroll på det. Så ett 8 bitars PWM register behövs väl då, om det nu finns vls.

Vet någon en IC för en billig summa som skulle kunna klara av detta?


Programmeringen sen är en del för sig för det kan jag inget om för tillfället. Om inte annars så får man väl ta och haffa någon som kan och muta honom. :D Men det är i alla fall bra att veta om det finns någon krets som kan ha potential för det innan man sätter igång.

Postat: 29 juli 2005, 19:37:48
av Schnegelwerfer
En PIC klarar detta galant!
De PICar som har CCP-modul (hårdvaru-PWM) har just 8 bitars upplösning (ex. PIC16F628). Tyvärr har just denna PIC ingen A/D-omvandlare, men Sodjan har säkert stenkoll på en lämplig PIC-krets.

Angående programmeringen så kommer den att bli väldigt enkel, det krävs inte många rader assemblerkod för åstadkomma det du vill göra. :)

Postat: 29 juli 2005, 19:48:36
av Henry
Allt det där lät som ljuv musik för mina öron. Speciellt det där med programmeringen. :D

Postat: 29 juli 2005, 21:45:05
av sodjan
"men Sodjan har säkert stenkoll på en lämplig PIC-krets."

Hmm, smakade bättre en den ljumma öl jag nyss fick till maten... :-)

PIC12F683 !!!

8-pin DIP (alltså samma storlek som en 555'a !)
4 kanalers 10 bitars AD.
10-bitars PWM (standard CCP modulen, även 628'an har 10-bitars PWM !).
Prec internal osc (1%), du behöver ingen extern kristall.

Så totalt blir det färre komponenter med en 12F683 än med en 555'a.
Och betydligt exaktare (jag vet inte,men jag antar att det är svårt att
få 1% noggranhet med en 555'a)

Jag har en 12F683 sittades i en labbplatta. Jag testade PWM modulen för en vecka sedan med anledning av ett visst "projekt"... :-)

Personligen tycker jag att 12F683 är en av de trevligaste nyheterna från Microchip under våren.

Men, med det sagt, det är inte säker att just PWM modulen är enklast för att generera servo signaler (det är väll 20 ms period med 1-2 ms puls vi talar om, eller hur ? Det är nästan lika enkelt att låta en timer ge de två tider som behövs. PWM ger inte alltid full 10-bitars upplösning, man måste kolla databladet och räkna lite på det...

Mvh
Janne.

Postat: 29 juli 2005, 23:24:50
av speakman
Jag tycker det låter knepigt att inte 555:an ger tillräcklig exakthet? Det är väl den lösning vanlig R/C-styrning använder?

Mvh
speakman

Postat: 30 juli 2005, 00:36:23
av sodjan
Visst kan en 555'a styra ett servo, och med bra kvalitet på komponenterna kan det kanske fungera ganska bra.

Men det finns en del trevliga saker man kan fixa med in microcontroller mellan potten och servot (som är betydligt besvärligare att fixa med en 555'a).

Man kan t.ex sätta max hastighet, eller accelerations/retardations kurvor (om den last som servot styr/drar är lite tyngre och inte kan "ryckas" från ett läge till ett annat). Eller för att ge mer realistiska (skalenliga) rörelser om det t.ex gäller att styra skalamodeller av broar eller liknande i t.ex modelljärnvägar.

Man kan också bygga in utjämning om potten skulle lämna ojämn spänning (som när det "raspar" om volympotten på en radio). Man kan naturligtsvis även lägga en konding på potten för att jämna ut spänningen.

Med ett par knappar kan man sätta max/min lägen för servot som man inte kan överskrida med potten senare.

Man skulle kunna använda en "table lookup" för att få en olinjär rörelse, som när ett servo med roterade utgång skall styra en linjär rörelse (i princip en sinus funktion som beräknas i förväg och läggs in som en tabell).

Man skulle även kunna lägga in förprogrammerade rörelser som skulle kunna triggas med en ingång (t.ex en tryckknapp eller från någon sensor).

Ett par saker från det ursprungliga inlägget :

"...det har inte gått att få pulserna exakta. Detta har gjort att jag varit nära att förstöra kugghjulen i servot flertalet gånger."

Man kanske skulle verifiera pulserna med t.ex ett oscillioskop innan man koplar på servot.

"Ett servo har väl 200 steg eller om det var 300..."

Är inte vanliga R/S servon analoga ? Vad är detta för "steg" ?


"...annars så får man väl ta och haffa någon som kan och muta honom.... :-) "

Hm, vad tänker du på lite mer specifikt ? :-) :-)

/Janne.

Postat: 30 juli 2005, 02:23:14
av Henry
sodjan: trodde inte det fanns så pass advancerade kontrollers med så mycket inklämt i sig i en så liten kapsel med bara 8 ben, kan ju inte bli så mycket bättre. Helt perfekt!

Ja det är 20 ms period med 1-2 ms puls som det handlar om.

Angående stegen: både ja och nej skulle man kanske kunna säga. Om man styr ett servo långsamt så styrs armen i ett antal mycket små hack/steg om man så vill, inte i en helt jämn rörelse. Styr man det däremot snabbt så märks inte dessa hack utan det uppfattas som en jämn rörelse. Styr man däremot servot väldigt långsamt, så märker man detta. Eftersom motorn i servot inte går konstant eftersom det finns definierade minsta antal grader servo armen kan röra sig så skapas det små hack pga detta. Det är förmodligen för att det inte behövs hur stor presicion som helst i ett servo. Du kan inte ställa in i ett servo i precis vilken vinkel som helst utan det finns en viss minimigräns och denna minimigräns definieras av dessa grad hack.

Jodå, jag har ett oscilloskop inkopplat hela tiden för att verifiera signalen. Problemet var att få 555ans signal att hålla sig stabil och inte reagera på motor störningarna från motorn m.m. Jag avkopplade allt till förbannelse med både drosslar och kondingar men det var ibland ändå hopplöst med vissa scheman för dom var visst väldigt känsliga för spänningsvariationer. Sen så hade dessa scheman också en irriterande gemenskap; servot går inte lika snabbt på båda hållen och det är jag inte så glad över. Men dessa scheman var sen inte heller gjorda för precisions styrning. utan mer bara att kolla så att ett servo fungerar.

Angående haffningen så menar jag som så att eftersom jag inte är så inne på programmering så får jag väl ta och haffa någon och muta honom att skriva programmet till mig. :D



speakman: visst går det nog att få det att fungera genom att pilla med komponent värden hit och dit för att få det hyffsat bra men jag har hållit på med just detta nu i nästan 2 dagar utan någon radikal förbättring så nu får det räcka. Sen så har ändlägena på potentiometern, vilket är det samma som ändlägena på servot, en viss tendens att vilja driva lite, vilket gör att servot går förbi ändlägen. Detta har hänt ca 4 ggr för mycket, så det är lite av ett under att kugghjulen fortfarande är hela. Så jag vill inte riskera något mer utan tar nog till en PIC istället för att vara på den säkra sidan. Sen så skall jag även driva annat med denna signal och då vill jag ha den i princip perfekt.


Edit: Kom precis på att jag har en helt annan design som jag använder för PWM styrning till diverse experiment som jag har märkt är mycket stabil och säker. Den består av en LM324. Så jag skall se om jag kan modifiera denna istället så jag kan få ut de rätta signalerna vilket jag tror skall kunna gå. Annars så är det en PIC som gäller.

Ni skall ha tack för hjälpen! :D

Postat: 30 juli 2005, 14:52:29
av $tiff
Går det att få PWM-frekvensen ner till 50 Hz med en PIC och en kristall i MHz-området? Iståfall har jag missat något.

Postat: 30 juli 2005, 15:09:39
av cyr
Det var väl tal om intern oscillator?

Om man kör med 31kHz intosc så är det nog inga problem att få väldigt låg frekvens.

Å andra sidan krävs det kanske lite extra trick för att skapa servo-pulsen med CCP-modulen med hög precision (den långa dödtiden).

Så det kanske är minst lika lätt att göra i mjukvara med bara ett timer-int?

Postat: 30 juli 2005, 15:12:57
av sodjan
Det var därför jag la in en "brasklapp" i mitt tidigare inlägg om att man behöver kolla databladet och "räkna på det". PWM modulen fungerar bäst vid PWM frekvenser kring ett par KHz till kanske ett par 10-tals KHz. Men får den del problem med att inte alla 10-bitarnas upplösning kan användas (dock främst mot högra PWM frekvenser).

Det är mycket möjligt att man inte ens kommer ner till 50Hz !

Men, som jag också skrev, servosignalen är så pass långsam så man kan låta en timer ta hand om "timingen" i signalen och ställa om timern "on the fly" för de två perioderna (1-2 ms och det som "blir kvar" till 20 ms).

Man kan även göras det lite enklare genom att låta "off" delen av servosognalen ha en fast tid på ca 19 ms och bara justera "on" delen mellan 1 och 2 ms. Servon tittat bara på "on" delen och är normalt inte speciellt känsliga för hur ofta pulserna kommer.

Dock, 12F683 *är* en trevlig modell... :-)

Jan-Erik.

Postat: 30 juli 2005, 15:38:29
av $tiff
Missade att man kunde ställa ner den interna klockreferensen så lågt som 31 kHz. Då är det helt klart möjligt att använda PWM i 50 Hz, även om en lösning med timer-interrupt antagligen skulle vara smidigare ur upplösningssynpunkt.

Postat: 30 juli 2005, 18:41:27
av Chribbe76
Jag sitter just och leker lite med rc-servon.

Så jag passade på att testa det du skrev med 200 steg.

Mitt servo hoppar fram lite varje microsekund-förändring av signalen, men om man vänder så krävs typ 8 microsekunder för att det ska röra på sig.

Det är nog så enkelt att det inte finns några steg, det är en analog konstuktion men olika servon har olika bra precision i pot, styrelektronik och kugghjul så den verkliga positions-noggrannheten kan variera mycket mellan olika servon.

Postat: 30 juli 2005, 18:46:26
av sodjan
Exakt !
Det finns inget "digitalt" i normala standard R/C servon.
Att det finns "glapp" i mekaniken är en helt annan sak :-)

Postat: 30 juli 2005, 20:22:54
av speakman
Hm, med dessa krav; är inte en stegmotor vad du behöver?

Mvh
speakman

Postat: 31 juli 2005, 17:17:54
av Henry
Chribbe76: ja så kan det mycket väl vara. Dessa "steg" uppstår ju förstås inte pga av att det skulle varit digitalt. Dessa steg kan man bara märka om man kör servot väldigt långsamt. Det är ju sen också så att vad är den minsta vinkel som utgående axel kan röra sig? Det finns ju en minsta rörelse som den kan röra sig på och om man precis ger den en signal att röra sig denna så rör sig axeln en liten liten bit. Är signalen mindre så rör den sig inte överhuvudtaget. Det är detta som, vid låg hastighet, skapar dessa små steg när insignalen till servot går över denna tröskel. För det är då det hoppar fram i dess minsta steg som servot klarar av och upprepar man detta så kan det då (om jag förstått det rätt) göras 200 - 300ggr.

Detta med steg är bla också från AoE som skrev någonting om detta för några år sedan. För om man matar servot med den allra minsta pulsbredd som servot klarar, enskilda gånger tills servot nått sina stopp, så borde man då kunna mata det ca 200 - 300 gånger innan det har gått från det ena stoppet till det andra stoppet men det har jag inte testat. Så om man då tex skall styra det med en pic så måste då denna kunna ändra en pulsbredd i lika många steg (då inte att förväxla till en stegmotor som ju är digital) som det är från servot stop till det andra stoppet. Detta för att få ut den precision som servot kan ge. Så man hade kanske kunnat säga att även om ett servo är 100% analogt så är inte den utgående axeln det, om man kör servot mycket långsamt. För ett servo har ju inte en oändlig vinkelupplösning på utgående axel pga elektroniken och ev glapp i kugghjulen. För kör man det väldigt långsamt så blir det inte en helt jämn rörelse utan den hoppar liksom fram i mycket små steg, men detta har förstås inget med att göra att det skulle varit digitalt.

Jag bara läste något om detta i AoE för något år sedan där det snackades om 200 - 300 steg, men jag har inte räknat dessa på detta servo.


speakman: jag skall även ha dessa signaler till en annan grej, det är därför jag vill ha en bra signal. Min fråga gällde bara om det fanns en pic som kunde styra ett servo men jag skall inte ha signalerna till något digitalt. Jag ville bara ha bättre precision på signalen och det tänkte jag att jag nog får med tex en pic.