Laboration: Frekvensmätning och PWM-DC-motor. Inbyggd Elektronik IE1206 Observera! För att få laborera måste Du ha: löst ditt personliga web-häfte med förkunskapsuppgifter som hör till laborationen. gjort alla förberedelser och förberedelseuppgifter som nämns i labhäftet. en bokad laborationstid i bokningssystemet (annars bara deltagande i mån av plats). Vid laborationen arbetar ni i grupper om två studenter, men båda studenterna ansvarar var för sig för förberedelserna och för genomförandet. Ha med er var sitt labhäfte till laborationen. Framsidan används som ditt kvitto på att laborationen är genomförd. Spar kvittot tills Du fått hela kursen bokförd i Ladok. Eftersom detta är ditt labkvitto måste Du fylla i tabellen med bläck. 1
Inledning Att mäta digitala pulser, antal, period, frekvens, pulsbredd mm. är en av de allra vanligaste uppgifterna för ett inbyggt system. Många sensorer har som utstorhet digitala pulser - Du har redan tidigare träffat på resistiva sensorer som ingått i en RC-oscillator med utstorheten frekvens. Frekvens är en storhet som kan mätas mycket noggrant, men de olika frekvensområdena hög/låg kräver olika metoder. PIC-processorerna har en självgående CCP-enhet som kan användas för att avlasta processorn arbetet med att följa signalerna under mätningen. Vid laborationen kommer Du att mäta periodtid och frekvens. Du kommer att prova en LC-oscillator, och använda den som en beröringsfri proximity-sensor (närhet) för olika metaller. PIC-processorns CCP-enhet kan alternativt användas till att generera PWMsignaler. Ett vanligt användningsområde är då att styra en motor. Enhenced CCP, ECCP, som hos PIC16F690 är tänkt att "direkt" kunna driva en likströmsmotor med varierande varvtal och rotationsriktning. Målet med laborationen Visa några olika metoder för frekvensmätning. Orientera dig om IO-enheter för mätning av digitala pulser. Visa hur dessa kan användas tillsammans med sensorer. Orientera dig om oscillatorer och fasvridande nät. Orientera dig om IO-enheter för elmotorstyrning. Visa hur man kan styra en likströmsmotors varvtal. Praktisera mätning med oscilloskop på en bipolär PWM signal. Observera! Det kan hända att din laborationstid ligger före det att alla kursmoment som kan behövas för laborationen har förelästs. Du måste i så fall själv läsa på i förväg - det finns länkar till alla föreläsningar och övningar. 2
Frekvensmätning och periodtidmätning Läs i Microchips PIC16F690-manual om hur ECCP-enheten konfigureras för capture. frequency.c Förberedelseuppgift 1 (görs innan lab) 74HC4040.pdf Ett enkelt sätt att skaffa sig test-frekvenser att mäta på, är att använda ett 12-stegs frekvensdelarchip (typ 4040, pris under 10 kr). PIC-processorn kan konfigureras så att den inre systemklocklan fosc/4, 1 MHz, finns tillgänglig på en av pinnarna. Allt som allt så får man tolv olika frekvenser att mäta på! 3
Antag att frekvensdelarchippet klockas med 1 MHz. Räkna fram, och skriv upp vilka värden de tolv mätfrekvenserna har i Tabell 1. Tabell 1 mätfrekvenser 74HC4040 f CLK = 1 MHz PIN freq [Hz] Uppmätt [Hz] Period [us]? 1 10 6 /2 12 = 2 10 6 /2 6 = 3 10 6 /2 5 = 4 10 6 /2 7 = 5 10 6 /2 4 = 6 10 6 /2 3 = 7 10 6 /2 2 = 9 10 6 /2 = 12 10 6 /2 9 = 13 10 6 /2 8 = 14 10 6 /2 10 = 15 10 6 /2 11 = Labuppgift 1 Anslut pinne 3 CLKOUT till frekvensdelarens ingång CLK. Nu finns det tolv frekvenser från 244 Hz till 500 khz tillgängliga för mätning med f_in ( CCP1 pinnen 5 ). Mät nu de 12 frekvenserna med programmet frequency.c och läs av värdena med UART Tool. Fyll i frekvens och periodtid i Tabell 1. För att få en noggrann periodtidmätning behöver man samla in många TIMER1- tick under en period av den okända mätfrekvensen, men totalt färre än 16-bitars maxvärdet 65535 eftersom vi i programmet inte tar hänsyn till om TIMER1 "slår runt". (Det skulle ske vid c:a 15 Hz, men så låga frekvenser har vi inte tillgång till). 4
Ett noggrannt frekvensvärde bygger sedan på att heltalsdivisionen ger tillräckligt många siffror. Eventuella decimaler "kastas bort" av programmet. Högre frekvenser än 65535 Hz ryms inte i 16-bits variabeln f så för dessa blir mätvärdena "felaktiga". Markera i kolumnen märkt? vilka av mätningarna som ger bra, och vilka som ger dålig noggrannhet. Diskutera sedan med labassistenten. Dom flesta mätvärden blir "otroligt" bra, vad beror det på? Hur skulle mätvärdena förändras om PIC-processorns interna oscillator var ändå bättre trimmad? ( Den går ju att trimma ). Förberedelseuppgift 2 (görs innan lab) Problem med höga frekvenser De höga frekvenserna blir lätt fel eftersom TIMER1 bara hinner räkna ett fåtal klockpulser. Då kan man i stället konfigurera CCP-enheten att räkna klockpulser mellan var 16:e flank hos mätsignalen. Man presenterar sedan mätvärdet multiplicerat med 16. Om frekvensen sedan anges med prefixet khz måste man också dividera med 1000. Detta gör man genom att ändra konstanten i programmet, det är onödigt att införa fler mattematikoperationer för PIC-processorn. khz-mätare. Spara programmet frequency.c som frequency_high.c och ändra CCP1 mode från varje flank till var 16:e flank. Ändra också divisionskonstanten "1000000" till ett nytt värde som passar för khz-mätning. Programmets utskrift ska se ut som ( vid mätsignalen 500 khz ): Frequency f is [khz] 00500 Period T(*16) is [us] 00032 Labuppgift 2 Problem med höga frekvenser De höga frekvenserna kan bli fel eftersom TIMER1 räknar få klockpulser. Kompilera och kör ditt khz-program från förberedelseuppgift 1. Mät och fyll i Tabell 2 nedan. Tabell 2 Höga mätfrekvenser [khz] 74HC4040 f CLK = 1 MHz PIN freq [khz] Uppmätt [khz] Period T*16 [us]? 5 10 6 /2 4 = 62,5 6 10 6 /2 3 = 125 7 10 6 /2 2 = 250 9 10 6 /2 = 500 Nu gick det bra att mäta och skriva ut de höga frekvenserna? 5
Förberedelseuppgift 3 (görs innan lab) cd4069ub.pdf Från Digital Design kursen kommer du kanske ihåg ring-oscillatorn? Ett udda antal inverterare kopplade i ring bildar ett ostabilt asynkront sekvensnät, som börjar oscillera med hög frekvens. Denna koppling kan användas för att "mäta upp" en inverterares grindfördröjning - med enkla medel. Tag fram, och skriv upp, en formel för hur grindfördröjningen kan beräknas ur ringoscillatorns periodtid. t PD = Kan Du hitta någon uppgift om grindfördröjningen i kretsen 4069's datablad? Labuppgift 3 Laborationens inverterarkrets 4069 är konstruerad på 1980- talet, och därmed långsam i jämförelse med dagens blixtsnabba kretsar. Koppla 5 av inverterarna som en ringoscillator som figuren visar. Inverterarna är redan kopplade som en grupp med två och en annan grupp med tre i serie. Koppla bort ledningen CLKOUT från PIC-processorn och anslut i stället frekvensdelarchippets CLK till ring-oscillatorns Out. Du ska nu mäta ringoscillatorns periodtid med programmet frequency.c. Välj lämplig utgång från frekvensdelaren till f_in så att mätningen blir noggrann. Beräkna därefter grindfördröjningen för en 4069-inverterargrind. Använd formeln från förberedelseuppgift 3, med hänsyn tagen till hur mycket Du delat ned mätfrekvensen. t PD [ns] = Kommentera/jämför denna siffra med de uppgifter Du hittade i databladet? Din inverterare är monterad på ett kopplingsdäck, där kopplingspunkterna har högre kapacitans än vad som gäller på ett kretskort. Samtidigt så verkar databladet "gammalt" - kretsen han ha förbättrats genom åren. 6
Förberedelseuppgift 4 (görs innan lab) LC-oscillator. Den 6:e inverteraren, den som inte användes till ring-oscillatorn, använder vi som LC-oscillator. En CMOS-inverterare med ett motstånd mellan utgång och ingång, "fastnar" mitt mellan "1" och "0" och blir en "analog" förstärkare i stället för en digitalkrets. Inverteringen kan nu ses som att förstärkaren fasvrider 180 ( "-" tecken ). Förutom inverteraren/förstärkaren så har vi ett växelströmsnät med en resonanskrets. Denna krets fasvrider ytterligare 180 - totalt blir det 360 vilket är samma sak som "ingen fasvridning alls". För en frekvens, nära resonansfrekvensen, som allt detta stämmer för, blir det en förstärkt "rundgång" som startar oscillatorn! Beräkna resonansfrekvensen med formeln här i labhäftet. L = 100 µh, C = 470 pf. f 0 [MHz] = Labuppgift 4 Ta bort de ledningar Du kopplade ring-oscillatorn med. Koppla i stället frekvensdelarens CLK med LC-oscillatorns LCosc. Mät LC-oscillatorns frekvens med ditt program frequency_high.c. Prova fram en lämplig inkoppling av f_in så att mätningen blir noggrann. Jämför med den beräknade resonansfrekvensen från förberedelseuppgift 4. (Spolen har 5% tolerans, kondensatorerna 20% tolerans, PIC-processorns inbyggda oscillator är fabrikstrimmad till 1% tolerans.) f 0 [MHz] = 7
Förberedelseuppgift 5 (görs innan lab) För en parallellresonanskrets gäller att resonansfrekvensen ändrar sig både med spolens induktans L, och med förlusterna i spolen och i magnetfältet, det som vi symboliserar med "resistansen" r. Metallföremål nära spolen kommer därför att påverka resonansfrekvensen på flera olika sätt. Förbered ett tillägg/ändring till ditt program frequency_high.c som tänder den röda lysdioden (RC0) om periodtiden minskar några procent, och som tänder den gröna lysdioden (RC1) om periodtiden ökar några procent. Annars ska båda lysdioderna vara släckta. Lämpligt programnamn är metalsensor.c. OBSERVERA! här finns det risk för att man råkar ut för PIC-processorns RMWproblem. Labuppgift 5 Beröringsfri metalldetektor. Till labutrustningen hör en ferritstav (som är magnetiskt påverkbar) och en annan vanlig mässingsstav (som är magnetiskt opåverkbar). Välj nu inkoppling av f_in så att Du får ett bra mätvärde på periodtiden med många siffror. Anteckna det mätvärdet. Modifiera programmet frequency.c med lysdioder som tänds av ökad och av minskad periodtid, enligt förberedelse 5. Visa labassistenten att din metalldetektor kan skilja mellan järn och andra metaller! Komersiella metallsensorer som är känsliga över större avstånd har spolar som sprider ut magnetfältet i avkänningsriktningen - se principfiguren! 8
PWM-styrning av en likströmsmotor Läs i Microchips PWM. speed.c PIC16F690-manual om hur ECCP-enheten konfigureras för Så fort ett inbyggt system ska påverka omgivningens mekanik med olika krafter behöver man motorer. Vid laborationen studerar Du hur PWM-enheten utnyttjas till att styra en likströmsmotor. Förberedelseuppgift 6 (görs innan lab) Studera programmet speed.c. Det tar ett 8-bitarsvärde med AD-omvandlaren från potentiometern, och för över det till PWM-enheten som 8 bitars DutyCycle. Med potentiometern kan man därmed direkt styra DC-motorns varvtal. Din uppgift är att modifiera programmet så att det styr motorns varvtal och rotationsriktning. Programmet är förberett för dina ändringar. Fundera ut i förväg hur Du ska göra. Ratt Rotation ADvärde PWMvärde Max vänster 0 CCW Max Mittläge 128-0 Max höger 255 CW Max 9
Labuppgift 6 Ta bort ledningen f_in från PICprocessorn. Anslut potentiometerns mittuttag SpeedControl till ADomvandlarens kanal AN9. Anslut P1D till PWMochP1B till PWM+. Kompilera och ladda ned programmet speed.c. Det kör motorn i en rotationsriktning med ett varvtal som ökar med medurs vridning av potentiometerratten. Din uppgift är nu att modifiera programmet speed.c så att det styr motorns varvtal i två rotationsriktningar, stillastående i mittläget och med maxvarvtalet i de två ändlägena. Motorns varvtal får inte "rycka till" i något läge. Lämpligt programnamn är dir_speed.c. Visa för labassistenten. Spänningsmatningen till motorn kommer från USB-kontakten och är då begränsad till 5V. LEGO-motorn är en 9V motor. Motorns drivkrets ( 7667 ) kan arbeta med en separat spänning upp till 15V. Kanske labassistenten har ett 9Vbatteri att koppla in - i så fall kan vi fördubbla motorns varvtalsområde. ( Assistenten tar först bort bygeln till 5V, och ansluter sedan ett 9V batteri ) OBSERVERA! 5V-bygeln måste tas bort när man ansluter en annan spänning till motorns drivkrets! Mät den bipolära PWM-signalen med oscilloskop 10
Har Du tid över? Om Du är väl förberedd inför laborationen, så har Du förmodligen nu tid över för en "frivillig" uppgift. CMOS inverteraren, ring-oscillatorn, LC-kretsen, LC-oscillatorn, kan simuleras med LT-spice. Simulera med LT-Spice Ett färdigritat schema finns som cmos_inv.asc cmos_model.txt Simulera kretsen. Ett färdigritat schema finns som inverter_ring.asc Simulera kretsen. Ett färdigritat schema finns som LC_resonance.asc Simulera kretsen. Ett färdigritat schema finns som LC_osc.asc Simulera kretsen. Lycka till! När Du är klar. Återställer Du utrustningen inför nästa labgrupp. Se den inledande bilden på laborationsutrustningen. Städa labplatsen. Material-lista Om Du någon gång skulle behöva bygga en liknande experimentutrustning, kan Du här se vilka komponenter vi använt. Kopplingsdäck GL-23F ELFA 48-427-95 Microcontroller 8 Bit DIL-20, PIC16F690-I/P ELFA 73-793-58 Hex Inverter DIL-14, CD4069UBE ELFA 73-474-53 12-Bit Binary Count DIL-16, 74HCT4040N ELFA 73-550-84 Trimpot cermet 10 k Linjär 500 mw, 72PTR10KLF ELFA 64-634-75 Resistor 1 st 10k. Resistorer 1 st 8.2k, 1 st 4.8M. Kondensatorer 2 st keramiska 470 p Induktor 1 st 100 uh 170 ma B82141-A1104-J ELFA 58-654-36 Resistorer 2 st 500 k. 1 st Lysdiod med seriemotstånd 5V röd ELFA 75-012-59 1 st Lysdiod med seriemotstånd 5V grön ELFA 75-014-99 Byglar: 13 orange, 9 gul, 11 grön, 1 röd, 1 brun. 5 st metallbygel. William Sandqvist william@kth.se 11