Motorstyrning - 32 bit @ 72MHz

Planering och tankar kring eventuella framtida projekt.
eFFeT
Inlägg: 70
Blev medlem: 13 oktober 2009, 20:23:29
Ort: Luleå

Re: Motorstyrning - 32 bit @ 60MHz

Inlägg av eFFeT »

du tänker så.. :) Jo jag tänkte batterispänningen. är nog närmare 13,6 volt iofs.. Jo jag hade tänkt köra mina mosfetsdrivare på de. Nog tror jag dom borde funka bakom en transientskyddsdiod, polyswitch, EMI filter och några kondingar... :P
eFFeT
Inlägg: 70
Blev medlem: 13 oktober 2009, 20:23:29
Ort: Luleå

Re: Motorstyrning - 32 bit @ 60MHz

Inlägg av eFFeT »

Projektet har tagit en vändning till det mer avancerade hållet..

Det kommer nu att ha:
CDI med justerbar 90-300mJ gnista för att kunna tända allt från bensin till metanol i alla tänkbara laddtryck. (MSD har 115mJ på deras Street versioner och 325mJ på deras dragracing modeller)


Ion-sense. Känner ledningsförmågan av gaserna i cylindern efter den skickat gnista och kan på så sätt få fram vid vilken punkt man har högst cylindertryck och om knack eller misständning inträffat. Justera tändningen automatiskt individuellt på varje cylinder så att trycktoppen är ca 15grader efter TDC och justera den om det knackar.


Automatisk identifiering av fördröjning, ramp up och ramp ner tid på varje spridare. Känner av om det är låg eller hög ohm och justerar för de.
AndreasL
Inlägg: 253
Blev medlem: 2 mars 2009, 20:17:25
Ort: Mantorp

Re: Motorstyrning - 32 bit @ 72MHz

Inlägg av AndreasL »

Som sagt, jag kan tänka mig att "offra" en rätt trevlig sugmotor jag har liggandes i hyllorna (I delar mao.) för att testköra systemet. :wink: (Jodå, jag förstår att du troligen inte har brist på egna testobjekt eller andra i kö på att få använda detta system.)

Sen är det väl "bara" att fila fram en dieselvariant oxå så kan jag nog komma med ytterligare behov. :roll:

Väldigt imponerande för en mekanist som mig och otroligt hög ambitionsnivå må jag säga.

Lycka till i fortsättningen.
backeliten
Inlägg: 58
Blev medlem: 24 maj 2005, 20:43:10
Ort: Örnsköldsvik

Re: Motorstyrning - 32 bit @ 72MHz

Inlägg av backeliten »

Grymt intressant tråd måste jag säga!

Har pysslat väldigt mycket med Megasquirt och har väl som du sett en hel del begränsningar som du sett med VEMS.
VEMS har jag pysslat en hel del med också, men jag är kluven till om den verkligen är så bra som den utger sig för att vara. Mycket saker som ska rulla i den processorn och med en kodutveckling som verkar vara av modell "spagettikod".

Nåja, jag är grymt intresserad av detta projekt och bidrar gärna med erfarenheter, designförslag och testning.
Jobbar just nu med utveckling av styrsystem för hydrauliska drivsystem, vilket faktiskt har en del gemensamt med motorstyrningar.
Kör själv MS nu i en gammal volvo med andningshjälp som gärna ställer upp som testplattform.

Ett förslag kanske kan vara att upprätta ett forum (eller en forumdel) som är skyddat så att intressenter kan få ett login och bidra med information.

/Jonas
eFFeT
Inlägg: 70
Blev medlem: 13 oktober 2009, 20:23:29
Ort: Luleå

Re: Motorstyrning - 32 bit @ 72MHz

Inlägg av eFFeT »

Tack! Jo alla är välkomna att lägga in förslag och ideer på extrafunktioner. Tanken med systemet är att det nästan ska vara en Plug and Play enhet. Om man bara drar alla kablar rätt och ställer in grundparametrerna som tex. Trigger hjul, offset, antal cylindrar, tändordning och lite annat så ska den sen kunna bygga upp en skaplig tänd/soppa mapp bara genom att korrigera efter WBO och Ion-sense.

Kommer inte publicera ren kod eller scheman så att alla får se. Eller vi får se hur det blir med det. :)

Jag har inte läst så mycket av VEMS-kod men MS har jag skummat genom. Och det verkar ju verkligen vara spagetti. Men tusan använder goto nu för tiden?!

Håller på att bygga en prototyp för CDI, Ion-sense och knack just nu. Den är bara till en cylinder.
eFFeT
Inlägg: 70
Blev medlem: 13 oktober 2009, 20:23:29
Ort: Luleå

Re: Motorstyrning - 32 bit @ 72MHz

Inlägg av eFFeT »

Jag tror inte jag orkar dra ihop ett forum i dagsläget. Blir väl att försöka få min encylindriga prototyp att funka först. Sen kan man ju bygga en flerkanalig lösning på det och dela ut till intresserade testare. Då kanske det är en bra idé att ha ett forum där alla kan skriva erfarenheter, fel, buggar å sånt på :).

Jag ska inte säga för mycket nu, men den MS-kod som jag läst så borde det bli timingproblem med tändning, spridare och liknande vid högre varv. I 95% av fallen kan den nog säkerställa rätt timing, men de andra 5% kan vara uppehållna av andra långa interupt handlers. Det är inte uppbyggt med trådar eller nån form av kösystem eller prioriteringar. Alla beräkningar är sker för sällan. Detta pga den statiska programeringstypen och för att säkerställa att den timar rätt i de flesta fallen.

Kan ju inte säga att jag med rak arm kan skriva bättre själv just nu. Men jag ska försöka iaf.

I och med att det kommer vara så många kanaler som ska timas in så kommer jag inte kunna använda ren hårdvaru timing. -> dvs. en kanal bunden till en compare output från en timer. Det kommer krävas 2 st per kanal för att bara styra tändningen. Det skulle isf vara om jag begränsade mig till 8 st tändkanaler, för det finns 16 PWM utgångar från STM32F103... Eller hitta en annan processor med mer PWM utångar... hmm... vet inte om jag orkar

Det går ju att lösa mjukvarumässigt. Hade tänkt ha en timer som skickar en int. vid comp. Ändrar de portarna som finns i en kölista (innehåller pekare till port, mask, värde, tid och pekare till nästa objekt i kön.) Hoppar fram i kön, ändrar comp till nästa tid den ska ändra en kanal och hoppar ut ur int.handlern. = under 50 cykler.
Detta borde kunna försäkra säker timing bara man vet hur lång tid det tar att gå in och ur int. handlern.
eFFeT
Inlägg: 70
Blev medlem: 13 oktober 2009, 20:23:29
Ort: Luleå

Re: Motorstyrning - 32 bit @ 72MHz

Inlägg av eFFeT »

Så om man håller vill göra en lågprio grej, typ mäta Ion-sense så blir den fördröjd med 50 cykler. @72MHz blir det 7*10^-7 sekunder vilket motsvarar 0.025 grader vid 6000rpm.
Eller säg att vid nått tillfälle så ska du slå på en spirdare och under tiden som int.handlern slår på spridaren och hoppar ut så har det kommit en ny int. för att slå på tändningen te.x. Då kan den bli försenad max 7*10^-7 sekunder. 0.025 grader är långt under de mekaniska toleranserna som finns på triggerthjulet.

Återkommer senare hur jag tänkt bygga upp min kernel.
bearing
Inlägg: 11674
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Motorstyrning - 32 bit @ 72MHz

Inlägg av bearing »

Jag tror det som begränsar precisionen i tändningen är motorns ojämna vinkelhastighet. Iaf på fåcylindriga motorer. Man förutsätter väl i programmet att vinkelhastigheten är konstant mellan två triggningar på triggerhjulet, men på t.ex. encylindrig motor stämmer inte det.

Jag skrev kod till en piggyback för encylindrig motor en gång. Då använde jag tekniken du beskriver, alltså att en lista som betas av i ett compareinterrupt. Problem kan uppkomma om flera händelser ska ske samtidigt/nästan samtidigt. Tiden i interruptet får inte vara längre än avståndet mellan händelserna. Fast, det problemet kan man undvika genom se till att listan, när den fylls, aldrig fylls med händelser som ligger omöjligt tätt, t.ex. genom att fördröja eller slå ihop täta händelser.

En annan lösning är att sätta upp en interruptklocka som tickar på med ett interrupt för varje grad vevaxeln roterar. Ifall 1° upplösning på tändningen duger. (Om det hinns med. Vid 16000 rpm blir det ett interrupt var 750:e klockcykel.)

Varför krävs två kanaler per tändspole?
eFFeT
Inlägg: 70
Blev medlem: 13 oktober 2009, 20:23:29
Ort: Luleå

Re: Motorstyrning - 32 bit @ 72MHz

Inlägg av eFFeT »

Om man vet hur lång tid det tar att göra en händelse när man bygger upp "kön" så kan ju dessa problem lösas på flera sätt om du vill att tändningen alltid ska ha prio över spridartiden tex.
Sen om tändningshändelsen börjat och du vill börja en spridarhändelse så snabbt som möjligt är ju det bara att ändra comp så tidigt i int.handlern som möjligt. Om den på nått sätt redan räknat förbi din händelse redan före du hunnit ändra comp tiden så får du ju bara manuellt slå på interuptflaggan igen och den kommer starta automatiskt efter att den kört klart int.handlern första gången. :) En liten adhoc lösning. men men :P Så då kan det köas en händelse, inga mer. Men då den kommer in i int.handlern igen så kommer den ju kolla igen om den räknat förbi den där nästa händelse och köar den också. Så detta borde funka även om du sätter många händelser tätt bakom varann. Men den kan bara göra en ändring var 700e nanosekund.

Jo jag behöver 2 utgångar till varje tändkanal. Den ena till en IGBT för att ladda upp en konding till 300-600V sen den andra till en Triac för att ladda ur den. Det är lite roliga spänningar och strömmar man leker med :P. Enligt simuleringar så borde jag komma upp till ca 200A och 600V över Triacen när jag ska tända. Sen på sekundärsidan så kommer jag upp till ca 10-30kV :P

VEMS och MS har ju bara vanlig induktionständning. Man drar pri.spolen i en bestämd tid och när man släpper den så får man gnista. Jag ska ju ha CDI på min (Capacitiv discharge ignition). Då laddar man en kondensator till en bestämd spänning och sedan laddar ur denna över pri.spolen. På så sätt kan man få mer energi i gnistan. Bra vid höga laddtryck och svårantändlig soppa tex. etanol och metanol.

Som du nämnde med ojämn vinkelhastighet: VEMS och MS är ju helt värdelösa när det gäller att använda multi-tooth triggerhjul. Dom använder bara lika många tänder som tändpunkter du har. Så även om du har en 4 cylindrig motor och 36-1 hjul så använder den bara 2 av tänderna för att räkna ut när den ska tända! Så från att den fått en triggersignal så kan det vara ca 60-40 grader tills den ska tända å enda sättet att ungefär räkna ut det är att ta den genomsnittliga hastigheten och räkna ut en tid när den BORDE vara där.

Jag har tänkt lösa det så att om jag ska tända 43 grader efter jag fått triggersignalen så ska jag först räkna 4 tänder sen räkna ut en tid när den borde roterat de sista 3 graderna. (på ett 36-1 tex.) Så den uppskattade tiden sträcker sig max över 10 grader och jag borde få en MYCKET MYCKET exaktare timing.
eFFeT
Inlägg: 70
Blev medlem: 13 oktober 2009, 20:23:29
Ort: Luleå

Re: Motorstyrning - 32 bit @ 72MHz

Inlägg av eFFeT »

Om jag får Ion-sense att funka som jag vill, så kom jag på en annan smidig lösning. Vet inte om den är beprövad, men den borde fungera.

Jag kan köra motorn helt sekvensiellt utan att ha nån sek. trigger från kammen.

För att köra den sekvensiellt så startas motorn som wastespark. Jag mäter joniseringsnivån i alla cylindrarna efter tändning. De cylindrarna som inte har nån jonisering har inte tänt och det betyder att dom är på nästa vevaxelvarv. Efter ett antal varv som wastespark borde jag ha nog mycket data för att säkert säga i vilken cykel motorn befinner sig i. Om jag får nån triggerfel så får jag göra om proseduren. :D
bearing
Inlägg: 11674
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Motorstyrning - 32 bit @ 72MHz

Inlägg av bearing »

:D hah! bra idé!
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: Motorstyrning - 32 bit @ 72MHz

Inlägg av E85 »

Kanske dags att börja fundera över programmerbar logik för att få fler pinnar och/eller mer tid över?
eFFeT
Inlägg: 70
Blev medlem: 13 oktober 2009, 20:23:29
Ort: Luleå

Re: Motorstyrning - 32 bit @ 72MHz

Inlägg av eFFeT »

Kommer bygga det på 2 MCUs. En för tändning och en för soppan... Annars blir det tight med både pinnar och CPUpower :)
bearing
Inlägg: 11674
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Motorstyrning - 32 bit @ 72MHz

Inlägg av bearing »

Kommer det här projektet bli klart?

Det är ju enkelt och roligt att planera in all världens häftigaste finesser, men när planerna blir för avancerad i förhållande till motivationen att implementera det hela så blir det istället ingenting gjort.
eFFeT
Inlägg: 70
Blev medlem: 13 oktober 2009, 20:23:29
Ort: Luleå

Re: Motorstyrning - 32 bit @ 72MHz

Inlägg av eFFeT »

Tändsystemet måste blir klart och fungera med Ion-sense. Det är en del av ett projekt jag gör genom universitetet.
Skriv svar