• No results found

Kapitel 4 Resultat 18

4.2.2 Simuleringar med referens- och timingsignal

Figur 4.11 visar en simulering med en referens- och timingsignal i fallet med 6 tändspolar, d.v.s. en enda tändstyrenhet. Signalen signalType är satt till 1 vilket innebär att enheten är inställd för att hantera just en referens- och timingsignal. Några störningspulser är tillagda för att demonstrera ingångsltrens funktion även i detta fall. Signalen moduleId är satt till 0101 vilket betyder att enheten agerar modul 1 av 1 (se avsnitt 4.1).

Figur 4.11: Simulering med referens- och timingsignal för 6 tändspolar.

Figur 4.12 visar också en simulering med en referens- och timingsignal men denna gång för fallet med 12 tändspolar. Enheten är inställd att agera modul 1 av 2 eftersom moduleId är ställd till 0110. På grund av detta hanterar enheten endast varannan puls av timingsignalen och första pulsen efter referenspulsen är en av dem.

4.2. Simuleringar 27

Figur 4.12: Simulering med referens- och timingsignal för 12 tändspolar och modulId ställd till 0110 (1 av 2).

Om moduleId istället ställs till 1010 d.v.s. enheten är inställd att agera modul 2 av 2 blir resultatet motsatt. Detta kan ses i gur 4.13. På detta sätt kan två enheter med moduleId 0110 och 1010 arbeta tillsammans eftersom alla pulser i timingsignalen behandlas men av två olika enheter.

Figur 4.14, 4.15 och 4.16 visar de tre motsvarande fallen för 18 tändspolar med de olika moduleId inställningarna 0111 (1 av 3), 1011 (2 av 3) och 1111 (3 av 3).

4.2. Simuleringar 28

Figur 4.13: Simulering med referens- och timingsignal för 12 tändspolar och modulId ställd till 1010 (2 av 2).

Figur 4.14: Simulering med referens- och timingsignal för 18 tändspolar och modulId ställd till 0111 (1 av 3).

4.2. Simuleringar 29

Figur 4.15: Simulering med referens- och timingsignal för 18 tändspolar och modulId ställd till 1011 (2 av 3).

Figur 4.16: Simulering med referens- och timingsignal för 18 tändspolar och modulId ställd till 1111 (3 av 3).

4.3. Laborationer 30

4.3 Laborationer

För att göra resultatet från laborationerna lättöverskådligt har jag försökt få oscillo-skopskärmen att likna gurerna från avsnitt 4.2 så mycket som möjligt. Det gör det lättare att jämföra resultatet från de verkliga mätningarna och simuleringarna.

Figurerna i detta avsnitt är direkta skärmdumpar från Agilent 54622D oscilloskopet.

Jag hade dock bara 16 kanaler till mitt förfogande och kunde därför inte mäta på samtliga signaler som jag har med i simuleringarna. Därför valde jag bort moduleId, signalType och enableMux eftersom dessa är signaler som ställs in manuellt med DIP-switchar.

Första mätningarna med multitrigg gav ett resultat som inte stämde överens med si-muleringarna. Utsignalerna från demultiplexern, betecknade med OUT i samtliga gurer, var endast höga när respektive ingång var hög. Jag drog slutsatsen att det måste vara problem med triggSel modulen. Utgångarna från modulen uppdaterades på stigande ank för någon av ingångarna men det visade sig att detta inte var optimalt, mest troligt p.g.a.

att det resulterade i att en latch skapades i hårdvaran. Jag skrev om programkoden för modulen så att den istället använde sig av den inbyggda oscillatorn för att uppdatera utgångarna. Detta löste problemet och programmet fungerade som simulerat.

Signalen timingInFromMCU tas från mikrokontrollern och är konsekvent hög i alla mätningar för att visa när triggOut utgångarna är aktiva. Figur 4.17 visar en mätning med multitrigg som signaltyp.

Figur 4.17: Laboration med multitrigg som insignal.

I gur 4.18 används en referens- och timingsignal för 6 tändspolar som triggsignal.

Signalen signalType är ställd till 1 och moduleId till 0101 d.v.s. modul 1 av 1. Signalerna

4.3. Laborationer 31

AMUX02, där AMUX0 är den minst signikanta biten, är signalerna till den analoga multiplexern. Dessa signaler motsvarar numret på den för tillfället aktiva utgången om de tolkas som ett binärt tal.

Figur 4.18: Laboration med referens- och timingsignal för 6 tändspolar.

Figur 4.19 och 4.20 visar mätningar med en referens- och timingsignal för 12 tändspolar.

I båda gurerna är signalType ställd till 1 men i gur 4.19 är moduleId ställd till 0110 och i gur 4.20 till 1010.

Det uppkom några mycket korta pulser på några av kanalerna under mätning med Agilent oscilloskopet. Dessa var så pass korta att jag inte kunde bestämma längden på dem trots att jag zoomade in oscilloskopbilden kraftigt. När jag mätte på kanalerna med ett annat oscilloskop med analoga kanaler fanns det inga spår av pulserna. Jag märkte även att er pulser uppstod om jag rörde på kablarna till mätproberna. På grund av detta drog jag slutsatsen att det var störningar eller överhörning i kablaget som genererade dessa pulser.

4.3. Laborationer 32

Figur 4.19: Laboration med referens- och timingsignal för 12 tändspolar och modulId ställd till 0110 (1 av 2).

Figur 4.20: Laboration med referens- och timingsignal för 12 tändspolar och modulId ställd till 1010 (2 av 2).

De tre fallen med referens- och timingssignal för 18 tändspolar visas i gur 4.21, 4.22 och 4.23. I samtliga fall är signalType ställd till 1 men moduleId inställningen skiljer sig.

4.3. Laborationer 33

I gur 4.21 är moduleId ställd till 0111, i gur 4.22 till 1011 och i gur 4.23 till 1111.

Figur 4.21: Laboration med referens- och timingsignal för 18 tändspolar och modulId ställd till 0111 (1 av 3).

Figur 4.22: Laboration med referens- och timingsignal för 18 tändspolar och modulId ställd till 1011 (2 av 3).

4.3. Laborationer 34

Figur 4.23: Laboration med referens- och timingsignal för 18 tändspolar och modulId ställd till 1111 (3 av 3).

K APITEL 5 Slutsats och diskussion

Detta arbete visar att och hur det är möjligt att skapa en krets som, på ett enkelt sätt, går att anpassa för olika signaltyper. Det är självfallet möjligt att utöka programmet för

er typer av signaler om det är önskat. På grund av en CPLDs uppbyggnad skulle dessa tillägg inte påverka de bentliga funktionerna.

Det visas även att och hur det är möjligt att få era tändstyrenheter att arbeta till-sammans, genom att tilldela varje enhet ett id, trots att de får samma insignal. Hur detta id ska tilldelas är då nästa fråga. En idé är att använda kablaget till tändspolarna, via någon bygling, för att utföra detta. Ett annat alternativ är att göra det med byglingar, lödningar eller strömställare på kretskortet. Det skulle även vara möjligt att använda mikrokontrollern för detta, antingen via några digitala utgångar eller via en seriell data-buss. En SPI-controller skulle t.ex. kunna implementeras i CPLDn för att kommunicera med MCUn.

Det smidigaste sättet skulle nog vara att kablaget till tändspolarna bestämmer id, då skulle inte tändstyrenheterna behöva kongureras innan de kopplas in. På liknande sätt skulle det gå att låta kablaget till motorstyrsystemet, via någon bygling, bestämma signaltypen. Vinsten med detta skulle vara att identiska tändstyrenheter kan levereras till kunder med olika motorer och så länge kablaget till tändspolarna är korrekt tillverkat skulle enheterna fungera direkt vid inkoppling.

Det skulle vara önskvärt att minska antalet diskreta komponenter på kretskorten i och med införandet av ingångsinterfacet. Om detta är möjligt är svårt att förutsäga utan att skapa ett fungerande kretsschema men en grov uppskattning kan göras. De komponen-ter som skulle kunna plockas bort från kretskortet är framförallt de som används för de bentliga digitala funktionerna (se avsnitt 2.2). Till dessa funktioner används 17 kompo-nenter och 35 lödningar för ICD4 och 26 kompokompo-nenter och 57 lödningar för ICD5. Antal komponenter som tillkommer vid införandet av ingångsinterfacet är svårare att uppskatta men det som är säkert är, en MAX V CPLD (5M160ZE64A5N) som kräver 64 lödningar samt någon 1,8 V spänningsregulatorkrets för att driva CPLDn. En sådan krets skulle t.ex. kunna bestå av 2 kondensatorer och en spänningsregulator d.v.s. 3 komponenter

35

36

och 7 lödningar.

Största vinsten med ingångsinterfacet är inte att antalet komponenter kan minskas utan att en enda typ av modul skulle kunna användas för ett stort antal tillämpningar. MCUn skulle enbart behöva styra tändförloppet när den får en timingpuls från ingångsinterfacet och behöver inte hålla reda på vilken tändspole som ska tändas vid nästa puls. Program-met i MCUn kan vara mer eller mindre identiskt i produkterna och kan därmed optimeras för att styra själva tändförloppet istället. In- och utgångar på MCUn skulle även frigöras och istället kunna användas för andra funktioner. Om endast en programvara till MCUn behöver administreras och utvecklas skulle tid och pengar kunna sparas.

R EFERENSER

[1] S. Åke Andersson, Four soft-core processors for embedded systems.

http://www.eetimes.com/design/microcontroller-mcu/4404578/

Four-soft-core-processors-for-embedded-systems, 2013. [Online; 2013-03-01].

[2] Wikipedia, Field-programmable gate array. http://sv.wikipedia.org/wiki/

Field-programmable_gate_array, 2013. [Online; 2013-02-06].

[3] Wikipedia, Complex programmable logic device. http://sv.wikipedia.org/

wiki/Complex_programmable_logic_device, 2013. [Online; 2013-02-06].

[4] Wikipedia, Programmable logic device. http://en.wikipedia.org/wiki/

Programmable_logic_device, 2013. [Online; 2013-03-01].

[5] Wikipedia, Microcontroller. http://en.wikipedia.org/wiki/Microcontroller, 2013. [Online; 2013-02-09].

[6] Wikipedia, Maskinkod. http://sv.wikipedia.org/wiki/Maskinkod, 2013. [Onli-ne; 2013-02-09].

[7] Wikipedia, Reduced instruction set computing. http://en.wikipedia.org/wiki/

Reduced_instruction_set_computing, 2013. [Online; 2013-02-09].

[8] www.embedds.com, Basic understanding of microcontroller interrupts. http:

//www.embedds.com/basic-understanding-of-microcontroller-interrupts, 2010. [Online; 2013-02-09].

[9] Wikipedia, Field-programmable gate array. http://en.wikipedia.org/wiki/

Field-programmable_gate_array, 2013. [Online; 2013-02-06].

37

B ILAGA 1

Programkod i Verilog för MAX V CPLD

B1.1 Toppnivå

1 module I n p u t I n t e r f a c e 3 ( t r i g g I n , signalType , moduleId , triggOut , timingOutToMCUinverted , timingOutToMCU , timingInFromMCU , enableMux , enableMuxOut , analogMux ) ;

2

10 parameter BP2_2 = 4 ' b1010 ; //Module 2/2

11 parameter BP2_3 = 4 ' b1011 ; //Module 2/3

12 parameter BP3_3 = 4 ' b1111 ; //Module 3/3

13

14 parameter FILTER_BITS_TIMING = 6 ; //Number o f b i t s f o r the input f i l t e r i n g o f the timingInFromMCU s i g n a l .

15 parameter FILTER_LENGTH_TIMING = 6 3 ; //Max : 2^FILTER_BITS_TIMING − 1

16 parameter FILTER_BITS_TRIGG = 6 ; //Number o f b i t s f o r the input f i l t e r i n g o f the t r i g g I n s i g n a l s .

17 parameter FILTER_LENGTH_TRIGG = 6 3 ; //Max : 2^FILTER_BITS_TRIGG − 1

18

19 input [ 5 : 0 ] t r i g g I n ;

20 input signalType , timingInFromMCU , enableMux ;

21 input [ 3 : 0 ] moduleId ;

22 output [ 5 : 0 ] triggOut ;

23 output timingOutToMCUinverted , timingOutToMCU , enableMuxOut ;

24 output [ 2 : 0 ] analogMux ;

25

26 wire timingMulti , timingRefTim , timingInFromMCUFiltered ;

27 wire [ 5 : 0 ] t r i g g I n F i l t e r e d ;

B1.2. inputFilterX6 39 osc_sig ) , . out ( timingInFromMCUFiltered ) ) ;

39

48 moduleSelector #(BP1_1, BP1_2, BP1_3, BP2_2, BP2_3, BP3_3) moduleSelector ( . in ( counterValue ) , . timingIn ( t r i g g I n F i l t e r e d [ 1 ] ) , . moduleId ( moduleId ) , . out ( coilNrRefTim ) , . timingOut ( timingRefTim ) ) ;

49

50 s i g n a l S e l e c t o r O u t p u t #(ST1 , ST2) s i g n a l S e l e c t o r O u t p u t ( . inNrMulti ( c o i l N r M u l t i ) , . inNrRefTim ( coilNrRefTim ) , . inTimMulti ( timingMulti ) , . inTimRefTim ( timingRefTim ) , . outNr ( c o i l N r ) , . outTim (timingOutToMCU) , . signalType ( signalType ) ) ;

51

52 a s s i g n timingOutToMCUinverted = ~timingOutToMCU ; //Only f o r monitoring the timing s i g n a l with one o f the LEDs on the developement card .

53 a s s i g n enableMuxOut = ~enableMux ; //Only f o r monitoring the enableMux s i g n a l with one o f the LEDs on the developement card .

54 a s s i g n analogMux = c o i l N r ; // B i t p a t t e r n to s e t the e x t e r n a l analog mux .

7 parameter BITSIZE = 3 ;

8 parameter FILTERWIDTH = 7 ;

9 reg [ BITSIZE −1:0] counter ;

B1.3. inputFilter 40

6 parameter BITSIZE = 3 ;

7 parameter FILTERWIDTH = 7 ;

8 reg [ BITSIZE −1:0] counter ;

9 reg prev_sample , out ;

10

B1.5. counter 41

B1.6. moduleSelector 42

6 | through the module to the timingOut port in some c a s e s and blocked

7 | in other c a s e s . Ex . BP1_3 ( Module 1 o f 3) are read at moduleId port :

8 | " out " w i l l be 1/3 o f " in " ( i n t e g e r ) and timing s i g n a l w i l l pass

9 | through on 0 , 3 , 6 , 9 , 1 2 , 1 5 and blocked o t h e r w i s e .

10 /

11

12 module moduleSelector ( in , timingIn , moduleId , out , timingOut ) ;

13

14 parameter BP1_1 = 4 ' b0101 ; //Module 1/1

15 parameter BP1_2 = 4 ' b0110 ; //Module 1/2

16 parameter BP1_3 = 4 ' b0111 ; //Module 1/3

17 parameter BP2_2 = 4 ' b1010 ; //Module 2/2

18 parameter BP2_3 = 4 ' b1011 ; //Module 2/3

19 parameter BP3_3 = 4 ' b1111 ; //Module 3/3

20

B1.6. moduleSelector 43

B1.7. signalSelectorOutput 44

3 | depending on the value on the signalType port .

4 /

12 input inTimMulti , inTimRefTim ;

13 input signalType ;

B1.8. demux 45

19

20 always @ ( inNrMulti [ 0 ] or inNrMulti [ 1 ] or inNrMulti [ 2 ] or inNrRefTim [ 0 ] or inNrRefTim [ 1 ] or inNrRefTim [ 2 ] or inTimMulti or inTimRefTim or signalType )

21 begin

22 c a s e ( signalType )

23 ST1 : begin outNr <= inNrMulti ; outTim <= inTimMulti ; end

24 ST2 : begin outNr <= inNrRefTim ; outTim <= inTimRefTim ; end

25 endcase

B ILAGA 2

Blockschema över toppnivå till program för MAX V CPLD

Den mest övergripande modulen i ett HDL-program, vars portar kopplas direkt till kret-sens I/O, kallas för toppnivå. Figur B2.1 på sida 47 visar ett blockschema över toppnivån för programmet till MAX V CPLDn.

46

47

Figur B2.1: Blockschema över toppnivå till program för MAX V CPLD.

B ILAGA 3

Funktionssimuleringar av program till MAX V CPLD utan ingångsfilter

Filtrering av insignalerna genom modulerna inputFilterX6 och inputFilter skapar en ofrånkomlig fördröjning. Denna fördröjning blir i praktiken obetydligt kort eftersom stör-ningarna som ska ltreras bort är mycket korta relativt signalpulserna. I avsnitt 4.2 visas simuleringar med ingångslter för att demonstrera dess funktion. Simuleringar utan in-gångslter är dock mer lika verkligheten. Figur B3.1 på sidan 49 föreställer en simulering med multitrigg och gur B3.2 på sidan 50 visar motsvarande simulering med referens-och timingsignal. Inget ingångslter är använt i dessa simuleringar.

48

49

Figur B3.1: Simulering med multitrigg, utan ingångslter.

50

Figur B3.2: Simulering med referens- och timingsignal, utan ingångslter.

Related documents