Designplan mätning av acceleration hos bilbanebil version 1 Per-Emil Eliasson, Claes Fälth, Manne Gustafson, Andreas Gustafsson 22 juni 2003
INNEHÅLL Industriprojekt ISY Innehåll 1 Inledning 2 2 Design av delsystem 3 2.1 Scenario från mätning till MatLab...... 3 2.2 Accelerometer... 3 2.3 Allmänt om BASIC STAMP..... 5 2.4 Radiolänk..... 7 A Bilagor - datablad 11 sida 1
1 INLEDNING Industriprojekt ISY 1 Inledning Detta dokument avser att i detalj beskriva hur vi tänker oss att lösa uppgiften med att mäta acceleration hos bilbanebilen. Eftersom mycket av designen har skett utifrån datablad, kan den komma att behövas modifieras allt eftersom implementationen fortgår. Dock hoppas vi på att slippa genomföra stora strukturella förändringar. sida 2
2 Design av delsystem I detta avsnitt beskrivs de olika delsystem som krävs för att mäta och överföra information om bilens acceleration till datorn. Först beskrivs ett scenario där man kan följa hur de olika systemen interagerar vid en typisk mätning. Varje delsystem beskrivs sedan var för sig. 2.1 Scenario från mätning till MatLab Nedan beskrivs alla steg från det att en acceleration påverkar accelerometern till det att mätvärdet fås in i MatLab. Se även figur 1. De olika stegen beskrivs mer detaljerat i respektive delar av designplanen. 1. Accelerometern registrerar en acceleration och skickar ut en pulsbreddsmodulerad signal som anger hur stor accelerationen är. 2. Signalen läses av i en Basic Stamp II (BSII) m h a kommandot pulsein. Bredden på pulsen översätts till ett binärt tal (12 bitar) som sedan skickas seriellt till en sändare. Informationen skickas i två byte, á åtta bitar. Sex bitar i varje byte används till mätvärde, en bit till paritetsbit och en för att identifiera om det är byte ett eller två för mätningen. 3. Sändaren tar emot en byte i taget och skickar denna radiomodulerad till en mottagare, vilken i sin tur skickar den mottagna signalen seriellt till en BSII. Informationen läggs ut parallellt på pinnar från BSII:n. 4. Mätkortet i datorn (NI PCI-6602) läser in de parallella bitarna och kan sedan översätta dessa till ett absolut värde på accelerationen. Genom att anropa en dll-fil ifrån MatLab kan sedan detta värde användas vid reglering etc. 2.2 Accelerometer Vi har valt att mäta accelerationen med hjälp av en accelerometer av märket Memsic (MXD2125GW). I nedanstående tabell ges väsentlig grunddata, för ytterligare information se datablad i bilaga. Utsignalen är digital och pulsbreddsmodulerad. En puls med halva cykelns längd motsvarar accelerationen 0g, en puls med hela cykelns längd motsvarar 2g. Skalan är därtill linjär inom mätområdet. Cykellängden är 0,01 sekunder, vilket betyder att accelerationen 0g motsvarar en pulslängden 0,005 sekunder. Vidare är komponenten stöttålig (50000g), vilket underlättar hanteringen, och mätområdet passar vårt syfte väl. Effektförbrukningen är relativt låg (max 19,5 mw), varför det är möjligt att driva komponenten direkt från BSII-kretsen. Även detta underlättar vid implementationen. Här bör påpekas att det finns accelerometrar på marknaden som har ställbar cykeltid, vilket skulle kunna vara en fördel. De accelerometrar med denna sida 3
Figur 1: Översiktisschema för accelarationsmätning. Storlek Stöttålighet Upplösning Mätområde Vikt Spänning Ström Temperaturområde Cykeltid ca 11x10x2 mm 50000g 0,2mg / Hz (bandbredd) +/- 2g låg 3,0-5,25 V 2,5 3,9 ma vid 5,0 V 0-70 C 0,01 s Tabell 1: Grunddata för accelerometern sida 4
egenskap vi hittat har dock avsevärt lägre stöttålighet. Detta anser vi olämpligt då bilarna ofta kör av och utsätts för omild hantering som kan ge upphov till mycket kraftiga accelerationer. Vi har därför anpassat resten av designen så att en cykeltid på 0,01 sekunder kan användas. Upplösningen beror på hur snabbt accelerationen som mäts varierar, se tabell??. Hur mycket detta påverkar noggrannheten är svårt att uppskatta, då accelerationens bandbredd är svåråtkomlig. Ett försök har dock gjorts, se avsnitt?? om feluppskattning. 2.3 Allmänt om BASIC STAMP I bilen samt på mottagarsidan sitter en modul kallad Basic Stamp tillverkad av företaget Parallax Inc. Basic Stamp är en mikrokontroller som är designad för att användas i en rad olika tillämpningar. Basic Stamp består av ett Basic Interpretor chip", ett minne i form av ett EEPROM, en 5-volts regulator och 16 I/O pinnar som programmeras enligt önskemål. I mikrokontrollern finns ett antal inbyggda kommandon för matematiska operationer samt operationer för I/O pinnarna. Mikrokontrollern programmeras med en förenklad variant av BASIC kallad PBASIC. PBASIC är utvecklat av Parallax och innehåller många traditionella BASIC kommandon men också helt unika kommandon avsedda för Basic Stamp. Programmeringen av mikrokontrollern sker med hjälp av BASIC Stamp Editorsom finns tillgänglig både för Windows och DOS. Genom att placera Basic Stamp på ett s.k. "Carrier boardförsett med en DB9 kontakt överförs sedan programmet via datorns serieport till EEPROM:et. Brädan innehåller förutom DB9 porten och sockel för BS2-IC även en resetknapp och en kontakt för ett 9-volts batteri. I vårt fall använder vi den medföljande Basic Stamp II Carrier board vid programmering av mikrokontrollern. I bilen och på mottagarsidan använder vi oss, på grund av utrymmesskäl, istället av rena monteringskort som vi förser med sockel för BS2-IC samt kontakt för spänningsmatning. Mikrokontrollerns uppgift i bilen Mikrokontrollerns uppgift i bilen är att ta emot signalen från accelerometern och omvandla denna till en binär signal som är väl anpassad för den aktuella sändaren. Signalen från accelerometern utgörs enligt ovan beskrivning alltså av en pulslängd beroende av uppmätt acceleration. Denna signal appliceras på en utav mikrokontrollerns I/O-pinnar som definierats som ingång. Mikrokontrollern har ett antal inbyggda kommandon för operationer på I/O-pinnarna. I detta fall använder vi PULSIN. PULSIN tar följande tre argument som definierar funktionen: Pin: Variabel (0-15) som specificerar vilken I/O-pinne som skall användas. Denna sätts automatiskt till ingång. sida 5
Figur 2: Basic Stamp II Carrier board med BS2-IC. Figur 3: Platta för montering i bilen sida 6
State: Variabel (0-1) som anger om signalen som ska mätas är hög (1) eller låg (0). En hög signal inleds med en positiv flank medan en låg signal inleds med en negativ flank. Variable: Variabel där den uppmätta tiden lagras. PULSIN fungerar som ett stoppur som triggar på signalens inledande flank (Positiv eller negativ beror av State). Tiden mäts i enheter av 2µs (BSII). Mikrokontrollerns uppgift är nu att göra om denna tidssignal till ett 12 bitar långt digitalt ord. För accelerometerns utsignal gäller T 2 = 0.01 [s] = 5 000 [2µs]. Eftersom vi ska mäta accelerationer i området ±1g kommer den av PULSIN lagrade variabeln vara av storleken 1250 [2µs] 3750 [2µs]. Detta medför att 1250 [2µs] representeras med enbart nollor i det 12 bitar långa ordet medan 3750 [2µs] utgörs av enbart ettor. Detta ger en upplösning på 2g/2500=0,8mg. Detta kan jämföras med accelerometern som med 100 Hz ger en upplösning på 0,02mg. Följden blir alltså en förlust i upplösning som vi dock anser acceptabel, förutsatt sändning 2*8 bitar inkl. paritet och del-bit. Följande PBASIC-sekvens mäter tiden T1 och omvandlar värdet till ett binärt ord med 16 bitar. Read_Force: raw_data VAR Word PULSIN 7, 1, raw_data GForce = ((raw_data/5) -- 500) * 8 RETURN Deklarerar raw_data Räknar tiden från pos. till neg. flank på ing. 7. Omvandlar till milli-g. Kommandot som används för att skicka signaler seriellt är SEROUT. I kommandot finns ett flertal funktioner inbyggda för att öka flexibiliteten. Nedan ges ett exempel på användning. SEROUT 1,24972,[Value_ls,BIN7] Ovanstående rad skickar ut data på pinne 1 som automatiskt sätts till utgång. Andra värdet, 24972, anger Baudmode vilket i detta fall innebär 7 bitar plus en inverterad jämn paritetsbit. Innanför klammern anges vilket data som ska skickas och i vilket format. 2.4 Radiolänk Den uppmätta pulsbredden skickas seriellt från Basic Stamp II till en sändare. Datan skickas sedan via radio till en mottagare. Radiomoduleringen sker i komponenterna, vilket gör att vi slipper skriva egna protokoll för överföringen mellan sändare och mottagare. P g a bristande information i datablad hos tillverkare (RFDigital) så finns det vissa frågetecken vad gäller sändningshastighet etc. för radiolänkarna. Dock sida 7
är dessa anpassade för att användas med Basic Stamp, vilket gör att vi gärna vill använda dem trots den bristande informationen. En typ av länk (RF Digital, RFD27986/RFD27987) kan ta emot data med 9600 bps, men skickar den radiomodulerade data endast med 1200 bps, vilket gör att det finns en minsta tid (15 ms) mellan det att två bytes kan tas emot av sändaren. Eftersom vi behöver skicka minst 12 bitar för att bibehålla önskad noggrannhet på mätningarna måste vi skicka två bytes (á 8 bitar) för varje mätning. För att utnyttja väntetiden hos sändaren kan vi göra en ny mätning på accelerometern medan vi väntar de 15 ms. Denna mätning kan sedan medelvärdesbildas med den förra mätningen för att utnyttja alla värden från accelerometern. En nackdel med denna sändare är att den är stor (8,3 * 4,4 cm). Figur 4: Tidsschema för sändning av data länkar från RF Digital. Beteckningarna av typ 1.2 betyder sampling 1, byte 2. Övriga siffror anger ungefärlig tid i millisekunder för varje aktivitet. Tiden mellan pilarna kan användas för att medelvärdesbilda mätningarna etc. Figur 5: Sändare & mottagare av typ RFD27995/ RFD27996. sida 8
En annan länk (RF Digital, RFD27995/ RFD27996 - se figur 5) är betydligt mindre(c:a 5* 1 cm). Eftersom storleken är relativt viktigt, skulle vi helst använda oss av denna länk. Dock är dokumentationen om länken bristfällig, vilket gör att vi har svårt att göra en tydlig design för länken. Den maximala sändningshastigheten är 2400 baud enligt användarmanualen. Det är osäkert om man behöver vänta något mellan varje byte man skickar, vilket är fallet för RFD27986/RFD27987. Om det inte skulle behövas någon tidslucka mellan varje byte som skickas kommer vi att skicka alla 16 bitar (2 byte) i ett sträck, vilket skulle göra att vi slipper medelvärdesbilda mätningarna och istället kunna skicka varje mätning från accelerometern. Om även denna enhet fungerar enligt RFD27986/RFD27987 kan en design enligt figur 4 användas. Cykeltiden ges av accelerometern som skickar nya mätvärde med 100 Hz. I detta fall kommer endast vart annat av mätvärdena användas. Kommunikation med datorn För att göra beräkningar och presentera uppmätta data väljer vi att använda en PC. Data tas in i PC:n med befintligt mätkort, DAQ 6602 från National instruments. Detta kommunicerar med programmet MatLab, i vilket integrering av accelerationen och presentation av beräknad hastighet kommer utföras. Program för att styra datahanteringen utvecklas i programpaketet LabWindows/CVI och skrivs i C-kod. Koden kompileras sedan till en.dll-fil som kan köras i MatLab. För att åstadkomma kompatibiliteten med MatLab används MatLabtoolboxen, Data Acquisition Toolbox 1.0 från Math Works Inc. I denna finns en funktion, mexfunction, vilken man sätter som huvudfunktion i C-koden och vid kompilering är det sedan denna funktion som gör kopplingen till MatLab. Mätkortet har 32 digitala in- och utgångar och kan därför både ta emot seriell och parallell data. På Mätkortet finns också åtta stycken räknare vilka delar pinnar på kortet med de digitala in- och utgångarna. Räknarna används av befintliga program för styrning av bilbanan, vilket medför att en del av de digitala ingångarna är upptagna. Det finns dock tillräckligt många lediga för både seriell och parallell kommunikation. Vid seriell kommunikation kommer en startbit tala om när det är dags att läsa från ingången. För att sedan läsa in de olika bitarna rätt måste man ha någon sorts tidmätning i datorn/programmet. Problemet är att det kan bli tidsfördröjningar i datorn och då kan någon bit bli missad och fel data fås. Seriell kommunikation kan alltså bli instabil. På grund av denna instabilitet väljer vi att använda parallell kommunikation. Det räcker då att veta när det är dags att läsa och då läses hela accelerationsvärdet in på en gång. En ytterligare fördel med detta är att processorn inte behöver användas lika mycket eftersom parallelliseringen av data görs utanför datorn. I LabWindows/CVI finns färdiga funktioner för att läsa av kortets ingångar och användbara funktioner är: Dig_In_Line sida 9
Dig_In_Prt Huvudprogrammet som skapas kallas Get_acceleration och utför föjande: Inläsning av data vid rätt tidpunkter. När data är färdig för läsning skickar BSII ut en puls på en särskild pinne. Programmet ligger hela tiden och väntar på denna puls och när pulsen kommer läses datan på mätkortets ingångar in i MatLab. Programmet väntar sedan på nästa puls och inläsning sker igen osv. På grund av pulsgenereringen fås en fördröjning i dataflödet, men denna kommer som mest bli 0.04 sekunder eftersom data skickas med 25 Hz. Behandling av data. Omvandling av inläst värde till binärt tal. Kontroll av paritetsbitar signalera om data är felaktig Räkna ut accelerationsvärdet dvs dra bort bidrag från paritets- och startbitar. Tidpunkten för mätningen ska på något sätt bestämmas och returneras med accelerationsvärdet. sida 10
A BILAGOR - DATABLAD Industriprojekt ISY A Bilagor - datablad sida 11