Glödstiftsdrivaren GD3

Berätta om dina pågående projekt.
Användarvisningsbild
Glenn
Inlägg: 33799
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: Glödstiftsdrivaren GD3

Inlägg av Glenn »

Den boken hade mitt lokala bibliotek, lånades ett anytal gånger men var lite för hög nivå för mej då :)
piano_jonas
Inlägg: 42
Blev medlem: 10 mars 2014, 11:51:49
Ort: Åseda

Re: Glödstiftsdrivaren GD3

Inlägg av piano_jonas »

Ä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
Användarvisningsbild
4kTRB
Inlägg: 18390
Blev medlem: 16 augusti 2009, 19:04:48

Re: Glödstiftsdrivaren GD3

Inlägg av 4kTRB »

Står det 12V så kan det väl inte vara fel.
Palle500
Inlägg: 4494
Blev medlem: 6 juni 2015, 14:53:06

Re: Glödstiftsdrivaren GD3

Inlägg av Palle500 »

Tänk på att du använder ett bilbatteri som har minst 12,5V i vilospänning vid fulladdat.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Glödstiftsdrivaren GD3

Inlägg av sodjan »

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.
piano_jonas
Inlägg: 42
Blev medlem: 10 mars 2014, 11:51:49
Ort: Åseda

Re: Glödstiftsdrivaren GD3

Inlägg av piano_jonas »

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:

Bild

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
Ett normalt flöde är:
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 }
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):

Kod: Markera allt

if (u_plug > 0.2 && (u_R5 - u_plug) < 0.2) { disconnected }
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:

Kod: Markera allt

if (!off && ((u_R5 - u_plug) / u_plug) >= 1.1) { shortened }
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.

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);
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.

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);
}
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 :P


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.
piano_jonas
Inlägg: 42
Blev medlem: 10 mars 2014, 11:51:49
Ort: Åseda

Re: Glödstiftsdrivaren GD3

Inlägg av piano_jonas »

sodjan 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.
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 het :humm:

/jonas
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Glödstiftsdrivaren GD3

Inlägg av sodjan »

Så, R&T artiklarna scannade...
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.
senmathal
Inlägg: 56
Blev medlem: 9 november 2009, 18:29:54

Re: Glödstiftsdrivaren GD3

Inlägg av senmathal »

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
Skriv svar