William Sandqvist DA-omvandling, oftast PWM.

Slides:



Advertisements
Liknande presentationer
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Advertisements

William Sandqvist Simulera med ModelSim ModelSim kan användas till att simulera VHDL-kod, för att avgöra om den är "rätt" tänkt. Man kan.
hej och välkomna EKVATIONER Ta reda på det okända talet.
IE1206 Inbyggd Elektronik F1 F2
Många studenter använder en LCD-display till sin programmeringsuppgift
William Sandqvist Internet består till största delen av kabelanslutna datakommunikationsutrustningar Att bygga ett stabilt globalt täckande.
Funktioner och programorganisation
William Sandqvist Störskydd William Sandqvist
William Sandqvist Maurice Karnaugh Karnaugh-diagrammet gör det enkelt att minimera Boolska uttryck! William Sandqvist
Komplexa tal inför Laborationerna
Spolen och Kondensatorn motverkar förändringar
PICKit2 programmer-to-go
Datakomprimering a) Komprimering för att spara lagringsutrymme.
William Sandqvist Programmet onoffred.c.
SmartCard laborationen
William Sandqvist Varför använda en liten 8-bitars processor när det finns billiga kraftfulla 32-bitars? William Sandqvist
William Sandqvist PIC Comparator Tips 'n Tricks William Sandqvist
C-programmering ID120V William Sandqvist Länkad lista
Komparatorn en 1 bits AD-omvandlare
Kretselement på grafisk form
Programmeringsteknik K och Media
Att programmera i språket Java
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Kommunikation Först några nya PIC-instruktioner
Text och bild från wikipedia
Realtidsprog. - Anders Arvidsson1 Realtidsprogrammering En introduktion – Implementering (med exempel från PIC)
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
VAD ÄR BRÅK? täljare bråkstreck nämnare täljare = kvot nämnare.
Repetition inför slutprovet
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Problemlösning, andragradare och kubikrötter Sid 75-85
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
William Sandqvist AD-omvandling. William Sandqvist Ny processor med AD-omvandlare PIC16F628 saknar AD-omvandlare. När vi.
Bakgrunden till PIC-kursen IL131V
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
ARITMETIK – OM TAL.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
För utveckling av verksamhet, produkter och livskvalitet. -Algoritmer och Datastrukturer- -Algoritm analys och sökning algoritmer- Kap 5 -Algoritmer och.
William Sandqvist Databuffer Omvandlar mellan olika storlekar på dataobjekt Anpassar mellan olika dataöverföringshastigheter Databuffer.
William Sandqvist Låskretsar och Vippor Låskretsar (latch) och vippor (flip-flop) är kretsar med minnesfunktion. De ingår i datorns minnen.
William Sandqvist PIC PIC (Peripheral Interface Computer) är en datorkrets med ”allt i ett”. Prog Mem. Programminnet är 2048 instruktioner.
William Sandqvist PIC 16F628 Timers William Sandqvist
William Sandqvist Melodispelaren Denna demonstrationslaboration visar, steg för steg, hur man skriver ett kort program i programspråket.
Frågor Allmän IT-kunskap avsnitt 1 kapitel 1 Repetition 3
Anders Sjögren Bitfält exempel Nu kommer ett förbättrat program. Det är funktions- uppdelat och kan lägga till poster som lagras på fil.
Problemlösningsmetodik
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
William Sandqvist Räknare En räknare är en speciell typ av sekvensnät som registrerar antalet inkommande klockpulser. Registreringen sker.
William Sandqvist Polling och Interrupt Antag att Du sitter i en skön fåtölj och läser en bok. Plötsligt blir Du avbruten av att telefonen.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
William Sandqvist Binärkod och Graykod 7 Bitars Kodskiva för avkodning av vridningsvinkel. Skivans vridnings-vinkel finns tryckt som binära.
Digitalteknik 7.5 hp distans: 4.6 Adderare 4.45 Adderare Addition av två tal innebär att samma förfarande upprepas för varje position i talet. För varje.
William Sandqvist Melodispelaren Denna demonstrationslaboration visar, steg för steg, hur man skriver ett kort program i programspråket.
William Sandqvist ReadModifyWrite-problemet PORTB = 0; PORTB.0 = 1; PORTB = PORTB; Vilket värde har portpinnen RB1 nu ? Förmodligen ”1”,
William Sandqvist Många spännande komponenter passar inte 2,54 mm modulen? Därför finns det ”Breakoutboard” som anpassning, för den som.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
Programmering i C# Laborationer.
William Sandqvist Flera saker samtidigt? /* Blink1: 1s ON - 1s OFF */ /* Blink2: 0,2s ON - 0,2s OFF - 1s ON - 1s OFF */
William Sandqvist Binärkod och Graykod 7 Bitars Kodskiva för avkodning av vridningsvinkel. Skivans vridnings-vinkel finns tryckt som binära.
William Sandqvist Är Du bra på for-loopar? Ge triangelns höjd: 12 1> * > *** > *****
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
William Sandqvist PWM Sinusoidal Hur tillverkar man en sinusformad spänning? En PWM-signal kan ge en sinusapproximation. Efter filtrering.
Kronljusströmställaren 0, 1, 2, 3
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
IE1206 Inbyggd Elektronik F1 F2
Shannon dekomposition
DA-omvandling, oftast PWM William Sandqvist En DA-omvandlare tar stor plats på processor- chippet. Den vanligaste DA-lösningen är i stället.
KPP053, HT2015 MATLAB, Föreläsning 4
Microprocessor / Microcontroller
Presentationens avskrift:

William Sandqvist DA-omvandling, oftast PWM

William Sandqvist PWM med Timer0 75% 25% void main( void) { Duty = 0; /* start with zero DutyCycle */ TRISB = 0b ; /* PORTB.0 is output */ /* PORTB.1 is input */ OPTION = 0b ; /* Timer0 1/256 */ while (1) /* forever */ { char i; if (TMR0 < Duty) PWM_out = 1; else PWM_out = 0; Duty = GetDuty(); /* Be back in one TIMER0-tick ! */ MoreToDo(); } } Tillbaks inom ett Timer0-tick!

William Sandqvist PWM med Timer0 75% 25% /* Function */ char GetDuty( void) { char Duty; if( Contact == ON ) Duty = 191; /* 191/255 = 75% Dutycycle */ /* _______ __ */ /* _| |__| */ /* */ else Duty = 64; /* 64/255 = 25% Dutycycle */ /* __ __ */ /* _| |_______| */ /* */ return Duty; }

William Sandqvist PWM med Timer0 /* Function */ void MoreToDo( void) { } Gör lite nytta här, men … Missa inte nästa Timer0-tick!

William Sandqvist Valfri färg med RGB Led Difus plast behövs för att färgerna ska ”blandas”. Så här skulle man kunna göra …

William Sandqvist Valfri färg med RGB Led while (1) /* forever */ { if(PORTB.0==0) intensity =75; else intensity =255; R_Duty = 0; G_Duty = 0; B_Duty = 0; if( PORTB.3 ) R_Duty = intensity ; if( PORTB.2 ) G_Duty = intensity ; if( PORTB.1 ) B_Duty = intensity ; /* PWM-generation */ if (TMR0 < R_Duty) RA0 = ON; /* Red PWM */ else RA0 = OFF; if (TMR0 < G_Duty) RA1 = ON; /* Green PWM */ else RA1 = OFF; if (TMR0 < B_Duty) RB5 = ON; /* Blue PWM */ else RB5 = OFF; }

William Sandqvist Styr färg med slumptal … Många algoritmer för slumptal utnyttjar multiplikation och division, något som inte är midrange PIC-processorernas starkaste sida. Nedanstående algoritm bygger i stället på tekniken med "återkopplade shiftregister", som ger hyfsade slumptal utan allt för mycket kod... /* Random number function */ char rand( void ) { /* 0x0000 won't run... */ bit EXOR_out; static char rand_hi, rand_lo; if( !rand_hi && !rand_lo ) rand_lo = 0x01; EXOR_out = rand_lo.0; EXOR_out ^= rand_lo.2; EXOR_out ^= rand_lo.3; EXOR_out ^= rand_lo.5; Carry = EXOR_out; /* rotate right */ rand_hi = rr( rand_hi); rand_lo = rr( rand_lo); return rand_lo; }

Så här ser de första bits slumptalen ut … William Sandqvist char rand( void ); …

William Sandqvist CCP - PWM Det finns ett uppenbart behov av en självständig enhet för generering av PWM. CCP-enheten kan programmeras till detta!

William Sandqvist För PWM används TIMER2

William Sandqvist TIMER2

William Sandqvist Samplingsklocka Har man en reglerloop är det viktigt med en konstant samplings- frekvens. Blir Du lovad löneförhöjning med 500 kr/varv så vill Du nog gärna veta om det är:  500:-/tim  500:-/vecka  500:-/månad TIMER2 postscaler overflow kan an- vändas som samp- lingsklocka.

William Sandqvist TIMER2 servoupdate TIMER2 postscaler overflow kan an- vändas som samp- lingsklocka. Man kan få interrupt efter tex. var 4:e, var 8:e, var 16:e PWM-puls och då passa på att uppdatera PWM-signalen. ( Se programmet PIC-talker ).

William Sandqvist PWM frekvens T2CON postscale 1/1 … 1/16 ON/OFF prescale 1/1, 1/4, 1/16 PR2 förkortar räknecykeln  Frekvensinställning görs således med ”prescale” och ”PR2”.

William Sandqvist PWM-mode PWM-mode = 11xx CCP1X, CCP1Y Två extra bitar

William Sandqvist PWM-frekvens och DutyCycle  PWM-frekvens  DutyCycle

William Sandqvist PWM till 1000! PWM-frekvens 1000 Hz DutyCycle 50% för att testsignal … 1000 Hz DutyCycle 50%

William Sandqvist pwm1k62x.c void main( void) { TRISB.3 = 0; /* CCP1 is output at RB3 ( pin 9 ) */ /* Setup TIMER 2 */ /* 0.xxxx.x.xx - x.0000.x.xx 1:1 postscaler x.xxxx.1.xx TMR2 on x.xxxx.x.01 1:4 prescaler */ T2CON = 0b ; PR2 = 249; /* PWM frequency 1000 Hz */ /* Setup CCP1 PWM-mode */ /* 00.x.x.xxxx -- xx.0.0.xxxx CCP1X=0 CCP1Y=0 xx.x.x.1111 PWM-mode (11--) */ CCP1CON = 0b ; /* 50% 10 bit Duty 0b = 500 */ CCPR1L = 125; /* 0b */ while(1) nop(); } Lyssna med hörluren, och mät frekvensen och DutyCyclen med Scopemeter123 PWM-enheten är helt självgående …

William Sandqvist

Varvtalsratt till LEGO-motor

William Sandqvist PWM till motor  Enklast. PR2=255, ingen förkortning.  Enklast. 8 bitars PWM, rör ej CCP1X=0 och CCP1Y=0. CCPR1L = Duty; /* %...100% */ PWM-frekvensen blir då vad den blir … ( Om PWM-frekvensen < Hz kan den ”höras” när motorn kör )

William Sandqvist Varvtalsratten Interruptrutinen /* read encoder new value */ trans.0 = quad_A; trans.1 = quad_B; /* compare with old value */ if( (trans == 0b00.01) && (count != 255) ) count ++; if( (trans == 0b01.00) && (count != 0) ) count --; /* replace old value with new value */ trans.2 = trans.0; trans.3 = trans.1; OBS! Max och mingränserna!

William Sandqvist DutyCycle while(1) { speed = count; CCPR1L = speed; /* new PWM-value */ } count uppdateras av interruptrutinen!

William Sandqvist Utmaningen – Fram/Back

William Sandqvist 1 bit Riktning i ”tal med tecken” int count; Kör moturs för negativa tal, de har teckenbiten = 1 Kör medurs för positiva tal, de har teckenbiten = 0 /* rotate cw or ccw */ PORTA.1 = count.7;

William Sandqvist ”tal med tecken” och invertering av Dutycycle Vid moturs rotationsriktning måste DutyCycle inverteras. Detta innebär att motorn går snabbt vid låg DutyCycle och att motorn går långsamt vid hög DutyCycle. Men detta stämmer ju helt med hur negativa tal representeras! Ökande negativa tal , , , … ger ökande moturs hastighet. Vi behöver därför inte göra någon extra invertering!

William Sandqvist 8 bitars hastighet ? Om pulsgivarens räknar hastigheten i en int så använder vi 7 bitar per riktning. PWM-enheten använder en char och behöver 8 bitar för full fart. Lösning: Multiplicera med 2. speed = count* 2; CCPR1L = speed; /* new PWM-value */ OBSERVERA! Nu behövs nya gränser för räknevärdet: if( (trans == 0b00.01) && (count != 127) ) count ++; if( (trans == 0b01.00) && (count != -128) ) count --;

William Sandqvist

Uni- eller Bipolär PWM PWM-signaler En bipolär PWM-signal kan köra motorn i två riktningar, men också hålla en motor stillastående med ett Hållmoment! Unipolär PWM signal kör en motor i en riktning.

William Sandqvist PIC16F690 har enhanced PWM! Byta rotationsriktning kan man då göra genom att styra över PWM-signalen till en annan utgång i stället för att invertera DutyCycle!

William Sandqvist Två drivsignaler (ex. halvbrygga) Undviker kortslutning! Två drivsignaler till helbrygga

William Sandqvist 4 drivsignaler Helbrygga

William Sandqvist Helbrygga Forward mode: PWM på P1D Reverse mode: PWM på P1B