Sida 2 av 2

Postat: 17 oktober 2003, 08:28:50
av marvin
Har du lust att beskriva en PI-regulator lite utförligare?
Förstod inte så mycket :)

Postat: 17 oktober 2003, 10:16:48
av erixon
Det är ganska enkelt....
P är proposonelt mot felet delvis felet * konstant = styrsingnal (= sp)
för delen med detta system hyffsat snabbt och enkelt, nackdel är att systemet blir instabilt om konstanten är för stor, delvis självsvänger eller går sönder

I är Intgrerade felet för att minmera felet delvis integralen av felet ( * konstant) = styrsingnal (= si)
fördeln med detta sytem är att felet går mot noll med tiden
nakdel blir instabilt om integral verkan är för stor, så händer samma sak som åvan

man får en bättre regulator om man kombinera dessa två
sp+si = styrsingnal

felet är helt enkelt bör - ärvärdet....

Postat: 29 oktober 2003, 22:25:44
av marvin
Ursäkta en tids frånvaro, va mycket annat att göra.
Ledsen, förstår fortfarande inte vad en PI-regulator gör :(
Men men, jag undrar om någon vet om man kan reglera en PWM-signal från en microdator, är just nu inne på Atmel, men om någon har en ide om hur man kan reglera en PWM med någon microdator skall jag byta :). Börjar bli desperat. Har försökt att kolla lite faktablad från Atmel (mega8515), men förstår inte hur det skulle gå till.

Postat: 29 oktober 2003, 22:48:53
av danei
Vad är det du vill bygga? Är det en regulator som styr ett modellservo eller en PWM regularot till en dc motor/servo?
Jag antar att det är mickrokontroller du syftar på. är inte mega8515 en mickrokontroller det med?
Jag förstår inte vad du är ute efter.

I en digital PI-regulator har du:
P * (felet i senaste samplet) + I * (summan av felen i alla sampel)

Där P och I är reglerparametrarna
Det är bra om man har skydd för integrator uppvridning, i form av villkorlig integration eller liknande. Med det är grundformen.

Postat: 31 oktober 2003, 00:16:24
av marvin
Jag är ledsen för min oklarhet.
Jag vill bygga en "manick" som jämför varvtalet från en glödstiftsmotor med en PWM-signal som kommer från en vanlig R/F hobby-mottagare. Jag vill sedan skapa en utgående PWM-signal som styr ett modellservo (kopplad mekaniskt till motorn) till det läget som gör att varvtalet ändras till det som PWM-signalen motsvarar (så nära som det är möjligt).
Anledningen till att jag tog upp att det är en ATmega8515 var att det känndes som folk blev "avskräckta" när jag sade att jag endast hade kunskaper om motorola-processorer. Det antagande var kanske dumt av mig.
Åter igen, min fråga är hu man får ut en PWM-signal från en microkontroller. Det står i faktabladet att det går, men jag lyckas inte hitta hur man gör :)
Hoppas att dina funderingar reder ut sig

Postat: 31 oktober 2003, 10:52:53
av fredde76
Vilken motorola? HC12 eller?

Fredrik

Postat: 31 oktober 2003, 13:44:35
av RDX*
Du blandar i hop begreppen lite :?
Vad datablad menar med PWM är inte vad du menar med PWM.

Databladen PWM: (Tidhög*n) +(TidLåg*(1-n)) = En period [0=< n =<1]

Servosignal: (Tidhög*n) + (TidLåg*(1-n)) = En period [0=< n =<0,1]

Det är stor skillnad. Sen servosignal är visserligen också en PWM signal men det är ett specialfall som inte benämns som PWM.

Att skapa servosignaler är inte svårt. Ett Bascom exempel:

Kod: Markera allt

Servo =1500
do
Pulseout Portb , 1 , Servo             ;Pin1b är hög i 1500 us [1,5 ms]
Waitms 20
loop  
Detta program kommer att centrera servot. Om man vill styra servor så är det bara att ändra Servo. [1000<=servo<=2000] Gränserna kan variera lite beroende på RC-system.

Om du vill använda atmels kretsar så rekommenderar jag AT90s2313.

Postat: 31 oktober 2003, 15:04:33
av danei
RDX* fick till en bra förklaring. Det är det som har rört till diskusionen lite. Det som gör det lite svårare är att man vill mäta motorns RPM och insignalens pulslängd samtidigt. Att göra en av sakerna är inte svårt. men att göra alla samtidigt är svårt. En förutsättning för att lyckas är nog att ha en mikrokontroller med inbyggd timer. gärna fler. då kan man med hjälp av timern mäta in inpulsens längd och tiden för att varv. Om man lägger en interupt när varvtalsgivaren triggar kan man ta tiden mellan två inteupt. och någon liknande lösning på insignalen. Utsignalen kan man klocka med en timer. (om man har någon kvar) PIC 18F452 har 4 timrar. Det kanske är något att satsa på.

Postat: 31 oktober 2003, 16:34:32
av EagleSpirit
nästan alla PIC och AVR kretsar med flash minne har väl timer funktioner i sig?

Postat: 1 november 2003, 01:58:30
av marvin
tack RDX och danei. Nu börjar det ljusna lite för mig :)
Skall fundera lite på det hela, Varvtalet hade vi hoppats att lösa genom nån "frekvens till spänning"-krets, har inte tänkt så mycket på det om jag skall vara ärlig :)
Men nu känns det som jag har lite mer kött på benen...
/Kristoffer

Lågpassfilter på utgången

Postat: 1 november 2003, 12:18:22
av karlstedt
Om du lägger på ett enkelt lågpassfilter (RC) på PWM-signalen så får du en analog spänning som beror av pulsvidden..

Övre gränsfrekvensen på filtret bör vara ca 100 ggr mindre än repetionsfrekvensen på PWM-signalen.

Testa dig fram lite på värdena på motstånd och kondning...

Postat: 3 november 2003, 09:45:13
av RDX*
Angående RPM mätningen så skulle man kunna ha en binär-räknare som räknar upp med hjälp av en läsgaffel eller något. Sedan kopplar man MSB till en bistabil vippa. Beroende på hur stor räknare man har dividerar man RPM:en med olika stora tal. Med hjälp av detta borde en mikrocontroller kunna hinna med att avläsa RPM:en

Om man använder en 4-bit räknare på en motor med 10,000 RPM borde man få en signal på lite över 10 Hz. Vilket är kanske lite för låg samplingshastighet. Men det är lätt att ändra på.

Postat: 4 november 2003, 01:20:14
av Alex
Precis som alla har föreslagit. Apropå mätning av varvtalet kan du enkelt göra med hjälp av en MCU t.ex. PIC. Nästan alla PICar har klockfrekvens från 10Hz (RC krets) till 20MHz(Xtal). Det finns PICar med inbyggd PWM och även ADC. Använder du dessa PICar så behöver du inte skriva någon rutin till PWM. Alla PICar arbeta enligt pipeline metoden och varje instruktion tar 1us att utföra. Detta räcker gått och väl för ditt proj.

Förslag på vartalsmätning. Två metoder. Den ena är induktivt (används i bilar), fördelen är att smuts eller fett hindrar inte mätningsprocessen, kräver lite kringkomponenter på tanken om att signalen du får är analog. Den andra är med hjälp av hallelement och en magnet. En puls genereras varje gång axeln vrider ett varv (då magneten passerar hallelementen. Används i HD, floppy driver mm).
En hallelement klarar en mätning med ca 1us intervall.

En möjlig lösning: Generera en intern interrupt (m.h.a. en intern timer) varje sekund. Under tiden räknar MCUn upp antal inkommande pulser från hallelementen och värdet sparas i en global variabel eller i en specifik adress (i minnet). Efter varje interrupt vet du exakt hur många varv går det per sekund.

Angående programmering. Du kan programmera PICen antingen i assembler eller i C. C är mycket enklare, däremot kan du ha mer kontroll om du använder assembler.
Det finns gratis C kompilatorer på nätet att hämta samt MPLAB (utvecklingsverktyget) från microchips hemsida.
Lycka till