Glödstiftsdrivaren GD3
Re: Glödstiftsdrivaren GD3
Den boken hade mitt lokala bibliotek, lånades ett anytal gånger men var lite för hög nivå för mej då
-
- Inlägg: 42
- Blev medlem: 10 mars 2014, 11:51:49
- Ort: Åseda
Re: Glödstiftsdrivaren GD3
Är det någon här som har personlig erfarenhet om 12V är en OK drivspänning för en Arduino Nano? Enligt Arduinos webbsida skall den kunna matas med en spänning mellan 7-12V, men spänningsregulator är liten och sitter på undersidan. Förvisso är det inte så långa inkopplingstider men man vill ju inte grilla upp den. Jag kopplade in en diod i serie för att få ned spänningen något under 12V, men det är kanske inte till så stor hjälp...
/jonas
/jonas
Re: Glödstiftsdrivaren GD3
Tänk på att du använder ett bilbatteri som har minst 12,5V i vilospänning vid fulladdat.
Re: Glödstiftsdrivaren GD3
Det beror ju lite på hur mycket du driver från samma regulator som normalt
bara driver själva Arduinon. D.v.s. om du har kopplat in något mer.
bara driver själva Arduinon. D.v.s. om du har kopplat in något mer.
-
- Inlägg: 42
- Blev medlem: 10 mars 2014, 11:51:49
- Ort: Åseda
Re: Glödstiftsdrivaren GD3
Prototypen
För att få till alla funktioner jag drömt om fick kretsen utökas med ytterligare några komponenter. Jag gillar riktiga knappar och en gammal av/på knapp från ett skrotat PSU hade en fin känsla i klicket . Den kopplas till en andra ingång som leder direkt till MOS-FET:en så jag kan slå av och på glödspänningen utan att koppla bort Arduinon:
Jag har även lagt till en lite tryckknapp till D12-ingången för att kunna bläddra bland olika displayvisningar. Men mer om sedan. Jag har inte tidigare gjort en så stor Arduino-sketch, och jag gick in för att köra ren C-kod (typ ärkekonservativ K&R) eftersom jag inbillar mig att det kan snåla in ytterligare några dyra bytes. Först började jag med att definiera alla tänkbara tillstånd kretsen kan befinna sig i. Jag kom fram till 7 lägen:
startup -> off -> const_u -> const_r
Om brytaren står i läge till när GD3 kopplas in börjar den arbeta direkt:
startup -> const_u -> const_r
Alternativt att den börjar när stiftet kopplas in:
startup -> disconnected -> const_u -> const_r
Om det blir ett avbrott i kretsen under uppvärmning/resistansmätning:
startup -> off -> const_u -> disconnected/off -> const_u -> const_r
Om det blir ett kortvarigt av i kretsen efter att resistansen mätts upp (t.ex. om motorn stannat efter man kopplat bort glödströmmen och man måste starta igen) återgår programmet till uppmätt resistans:
startup -> off -> const_u -> const_r -> disconnected -> const_r
Om avbrottet är längre än 1 minut görs mätningarna om igen:
startup -> off -> const_u -> const_r -> disconnected (+60 sek) -> const_u -> const_r
Om man stänger av glödströmmen görs alltid mätningarna om:
startup -> off -> const_u -> const_r -> off -> const_u -> const_r
Vid kortslutning stängs omedelbart PWM:en av och försöker göra en ny återinkoppling var 1,5 sek till problemet lösts:
startup -> off -> const_u -> const_r -> shortened (1,5 sek) -> const_r -> shortened (1,5 sek) -> const_r -> shortened (1,5 sek) o.s.v.
Pollfunktioner
Efter uppstart går GD3-an in i en loop som pollar vilket tillstånd kretsen befinner sig i och justerar vid behov spänningen. Det krävdes lite experimenterande för att på ett tillförlitligt sätt kunna identifiera de olika lägena. Tillslut fastnade jag för följande algoritmer (u_R5 = mätvärde för A0; u_plug = mätvärde för A1):
off: Det går inte riktigt att lita på Arduinon mäter 0V när spänningen till MOS_FET:en är avslagen, så bäst var att betrakta 0.2V som typ 0V
disconnected: Vid avbrott i kretsen blir spänningsfallet över R5 obefintligt eftersom i stort sett hela spänningsfallet hamnar över R6 (≈12V då spolen går i mättnad):
shortened: Kortslutning var luring att säkert identifiera. Teoretiskt sett skall då spänningen över stiftet (A1) vara 0V och spänningen över spolen (A0) > 0V . Men så verkar det inte riktigt bli. Efter lite experimenterande till doften av varm epoxiharts visade det sig att det säkraste sättet var att mäta förhållandet mellan R5 och pluggen. För det komponenter jag valt blev förhållandet:
const_u: Här är inga konstigheter, spänningen över plugg och R5 mäts upp, sedan kollas om något hänt som indikerar på att runmodet ändrats. Sedan blir det intressantare. Om det gått mer än 4 sek (HEATUP_TIME) sedan inkoppling, görs en löpande medelvärdesberäkning av glödstiftets resistans. Om det gått mer än 7 sek (HEATUP_TIME + ANALYZE_TIME) är vi färdiga med konstant strömlaget och sätter runmodet till const_r.
Men innan vi kommit så långt fram i tiden måste vi finjustera spänningen över stiftet, och det görs sist i do while-loopen. Om spänningen ligger +- 2% (DRIFT_U) från det önskade värdet 1.15V (GLOW_U) justeras pulsbredden upp/ned med 8 steg (U_STEP_DOWN / U_STEP_UP) och sedan gör vi om mätningarna och eventuella justeringar till spänningen är stabil (ok = true) . Därefter återvänder funktionen till programmets huvudloop.
const_r: Konstant resistansläget ser ut ungefär som const_u läget - först görs mätningar och en runmode-check. Sedan körs ett löpande medelvärde av resistansen och avviker detta med mer än 2% (DRIFT_R) så justeras PWM-cykeln. För att inte få svängningar i systemet så finns det en inbyggd dämpning i form av delay-funktioner. Detta är viktigt eftersom det tar några millisekunder för glödtråden att ändra temperatur. CONST_R_UP_DELAY = 20ms och den något lägre CONST_R_DOWN_DELAY = 10ms för att snabbare kunna sänka så inte stiftet eldas upp.
Justeringarna fortsätter till resistansen är stabil (ok = true) varvid funktionen återvänder till huvudloopen.
Allt det här gick oförskämt bra att programmera - spänningen justerades snabbt och elegant och det fanns mycket plats kvar i program och dataminne. En amatörvideoupptagning som av en händelse kommit oss till handa visar hur Arduinon reglerar när glödspiralen kyls ned av Biltemas "blåsrentspray" - smakfullt ackompanjerat av ett belastat Velleman labbaggregat
Länk
Nu är det bara displayen kvar, ja, just det...
/jonas
För att få till alla funktioner jag drömt om fick kretsen utökas med ytterligare några komponenter. Jag gillar riktiga knappar och en gammal av/på knapp från ett skrotat PSU hade en fin känsla i klicket . Den kopplas till en andra ingång som leder direkt till MOS-FET:en så jag kan slå av och på glödspänningen utan att koppla bort Arduinon:
Jag har även lagt till en lite tryckknapp till D12-ingången för att kunna bläddra bland olika displayvisningar. Men mer om sedan. Jag har inte tidigare gjort en så stor Arduino-sketch, och jag gick in för att köra ren C-kod (typ ärkekonservativ K&R) eftersom jag inbillar mig att det kan snåla in ytterligare några dyra bytes. Först började jag med att definiera alla tänkbara tillstånd kretsen kan befinna sig i. Jag kom fram till 7 lägen:
Kod: Markera allt
enum runmodes { m_err, startup, off, disconnected, shortened, const_u, const_r };
- m_err: Något har gått fel. Ännu har jag inte kommit på vad som kan orsaka detta läge, men bäst att vara förberedd
- startup: ett läge som kretsen startar upp i för att under 2 sek stabilisera komponenterna och visa en splash-screen
- off: on/off knappen är i läge av, dvs. ström till Arduinon, ej ström till buck-konvertern
- disconnected: inget glödstift är inkopplat
- shortened: glödstiftsutgången är kortsluten
- const_u: glödstiftet matas med en konstant spänning och resistansen mäts upp efter 6 sek
- const_r: glödstifet har mätts upp och spänningen justeras så resistansen hålls kontant
startup -> off -> const_u -> const_r
Om brytaren står i läge till när GD3 kopplas in börjar den arbeta direkt:
startup -> const_u -> const_r
Alternativt att den börjar när stiftet kopplas in:
startup -> disconnected -> const_u -> const_r
Om det blir ett avbrott i kretsen under uppvärmning/resistansmätning:
startup -> off -> const_u -> disconnected/off -> const_u -> const_r
Om det blir ett kortvarigt av i kretsen efter att resistansen mätts upp (t.ex. om motorn stannat efter man kopplat bort glödströmmen och man måste starta igen) återgår programmet till uppmätt resistans:
startup -> off -> const_u -> const_r -> disconnected -> const_r
Om avbrottet är längre än 1 minut görs mätningarna om igen:
startup -> off -> const_u -> const_r -> disconnected (+60 sek) -> const_u -> const_r
Om man stänger av glödströmmen görs alltid mätningarna om:
startup -> off -> const_u -> const_r -> off -> const_u -> const_r
Vid kortslutning stängs omedelbart PWM:en av och försöker göra en ny återinkoppling var 1,5 sek till problemet lösts:
startup -> off -> const_u -> const_r -> shortened (1,5 sek) -> const_r -> shortened (1,5 sek) -> const_r -> shortened (1,5 sek) o.s.v.
Pollfunktioner
Efter uppstart går GD3-an in i en loop som pollar vilket tillstånd kretsen befinner sig i och justerar vid behov spänningen. Det krävdes lite experimenterande för att på ett tillförlitligt sätt kunna identifiera de olika lägena. Tillslut fastnade jag för följande algoritmer (u_R5 = mätvärde för A0; u_plug = mätvärde för A1):
off: Det går inte riktigt att lita på Arduinon mäter 0V när spänningen till MOS_FET:en är avslagen, så bäst var att betrakta 0.2V som typ 0V
Kod: Markera allt
if (u_R5 < 0.2) { off }
Kod: Markera allt
if (u_plug > 0.2 && (u_R5 - u_plug) < 0.2) { disconnected }
Kod: Markera allt
if (!off && ((u_R5 - u_plug) / u_plug) >= 1.1) { shortened }
Men innan vi kommit så långt fram i tiden måste vi finjustera spänningen över stiftet, och det görs sist i do while-loopen. Om spänningen ligger +- 2% (DRIFT_U) från det önskade värdet 1.15V (GLOW_U) justeras pulsbredden upp/ned med 8 steg (U_STEP_DOWN / U_STEP_UP) och sedan gör vi om mätningarna och eventuella justeringar till spänningen är stabil (ok = true) . Därefter återvänder funktionen till programmets huvudloop.
Kod: Markera allt
do {
ok = true;
u = measure(); // mät R5 och u_plug
m = checkmode(&u); // kolla runmode
if (m < const_u) // om runmode är ändrat - avsluta
return;
if ((mode.changetime + HEATUP_TIME) <= millis()) {
r_avg = (r_avg + calc_r(&u)) / 2; // löpande medlevärdesberäkning
} else {
r_avg = 0;
}
if ((mode.changetime + HEATUP_TIME + ANALYZE_TIME) <= millis()) {
r_glow = r_avg; // vi har ett resultat - klart!
setmode(const_r);
return;
}
cycle = getcycle();
if (u.plug < (GLOW_U * (1-DRIFT_U))) {
setcycle(cycle + U_STEP_UP);
ok = false;
}
if (u.plug > (GLOW_U * (1+DRIFT_U))) {
setcycle(cycle - U_STEP_DOWN);
ok = false;
}
} while (!ok);
Kod: Markera allt
do {
ok = true;
u = measure();
m = checkmode(&u);
if (m < const_r)
return;
cycle = getcycle();
r_avg = (r_avg + calc_r(&u)) / 2; // löpande medelvärde
if (r_avg < (r_glow * (1-DRIFT_R))) {
setcycle(cycle + U_STEP_UP);
delay(CONST_R_UP_DELAY);
ok = false;
}
if (r_avg > (r_glow * (1+DRIFT_R))) {
setcycle(cycle - U_STEP_DOWN);
delay(CONST_R_DOWN_DELAY);
ok = false;
}
} while (!ok);
}
Allt det här gick oförskämt bra att programmera - spänningen justerades snabbt och elegant och det fanns mycket plats kvar i program och dataminne. En amatörvideoupptagning som av en händelse kommit oss till handa visar hur Arduinon reglerar när glödspiralen kyls ned av Biltemas "blåsrentspray" - smakfullt ackompanjerat av ett belastat Velleman labbaggregat
Länk
Nu är det bara displayen kvar, ja, just det...
/jonas
Senast redigerad av piano_jonas 30 april 2020, 03:29:16, redigerad totalt 1 gång.
-
- Inlägg: 42
- Blev medlem: 10 mars 2014, 11:51:49
- Ort: Åseda
Re: Glödstiftsdrivaren GD3
Jo, jag har en liten oled och den kan nog vara strömtörstig. Dioden sänker spänningen med 0,8V så det borde finnas en lite reserv mot batterispänningen. Får väl försöka känna på regulatorn om den blir väldigt hetsodjan skrev:Det beror ju lite på hur mycket du driver från samma regulator som normalt
bara driver själva Arduinon. D.v.s. om du har kopplat in något mer.
/jonas
Re: Glödstiftsdrivaren GD3
Så, R&T artiklarna scannade...
Scanningen avbröts ibland så jag fick scanna om ett par sidor...
Scanningen avbröts ibland så jag fick scanna om ett par sidor...
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Glödstiftsdrivaren GD3
Intressant att läsa även för en som inte fattar ett dyft att det hela. Intresset grundar sig istället av att jag har en GD2 som jag tycker är helt super förutom att den är monterar i en gigantisk låda av pansarplåt. Något som jag läst om men aldrig själv upplevt är att man måste ställa om den för olika stift. Jag rör aldrig potentiometern och trots det startar motorerna oavsett stift. Någon sa att ett fyrtaktsstift inte alls fungerade men det är inga problem med min.
Om du får den att fungera hade den nog varit intressant för andra om det inte varit så att allt vad metanolmotorer är häller på att dö ut. Det finns dock en facebookgrupp för metanolflygare med viss aktivitet.
Lycka till med projektet!
/Mats
Om du får den att fungera hade den nog varit intressant för andra om det inte varit så att allt vad metanolmotorer är häller på att dö ut. Det finns dock en facebookgrupp för metanolflygare med viss aktivitet.
Lycka till med projektet!
/Mats