Ako funguje zapalovanie?

Ak máte problém s elektronikou v aute a motorke, alebo proste chcete do auta a motorky niečo zapojiť

Moderátori: mirosne, Moderátori

TomasNM
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1371
Dátum registrácie: 22 Jan 2012, 19:24
Bydlisko: Nové Mesto nad Váhom
Vek: 43

Re: Ako funguje zapalovanie?

Príspevok od používateľa TomasNM » 03 Jún 2020, 11:20

Pani,

trochu casu som sa vcera tomu povenoval.
Prehodil som to na spinanie minusu.
Pouzil som trenzistor na 800V, iskra dobra.
Pri spinanom pluse som mal kontakt 15 na kostre a vsetko bolo fajn.
So spinanym minusom musi byt kostra na inom mieste.
Pri tomto pokuse som aj ten 800V N-MOSFET upalil a to som sa s kostrovym kablom ani nestihol priblizit k VN.
Potom som ho vymenil za velky IGBT, iskra este lepsia, ale tiez po chvili odisiel.
Je pravda, ze som tam nemal kondenzator cez D-S, co bola asi chyba, preto vsetko islo cez tranzistor, ktory tie spice nezvladol.
Zial, tieto vysokovykonove boli posledne, co som doma mal. Nasiel som N-MOSFET na 500V v puzdre TO220, tam som mu dal aj kondenzator cez D-S a aj pomocnu diodu, nech netrpi ta vnutorna. To funguje celkom OK.
Presne typy teraz poruke nemam, ale doma ich viem pozriet a hodim ich sem.

Potom som skusal kostru (minus obvodu) ako druhu elektrodu. Tu vsak nastal problem - kedze nemozem uz pouzit 15 a ani 1 ako kostru, musel som ju natiahnut od zdroja. Tym sa zasa vyrazne zvysilo rusenie a kedze sa jedna o samostatny vodic, nemam predstavu, ako by som to skrutil.
Ked mam ako ukostrovaciu elektrodu pouzitu svorku 15, vsetko OK. To znamena, ze asi minus celeho zapojenia bude musiet byt plavajuci, popr. potrebujem odhalit inu variantu vedenia vodicov, aby to nerusilo.
Mozno teraz bude dobre sa vratit k scenaru, kedy by mal byt spinaci tranzistor co najblizsie k cievke. S tym P to nevadilo, ked som do inducky natiahol aj meter skrutenej dvojlinky.

Co sa tyka tych napatovych obmedzeni, myslel som, ze to je max, co vydrzia, ale nemyslel som, ze by sa spravali ako kvazizenerky a by to obmedzovali. Ratal som s tym, ze ak by to nemali vydrzat, tak ich jednoducho odpali a nie, ze by to napatie stahovali.
Tiez som nepisal, ze neviem ako funguje obycajna cievka, len som si v uvode temy nevsimol suvislosti, ktore som nasledne pochopil.

Ono teraz je jasne, ze elektronickou induckou by to bolo najjednoduchsie, ale beriem to ako vyzvu, spravit z niecoho nieco a popritom sa priucit par novinkam.

Laborujem dalej, ako cas dovoli...
0

Používateľov profilový obrázok
misocko
Ultimate člen
Ultimate člen
Príspevky: 4317
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: Ako funguje zapalovanie?

Príspevok od používateľa misocko » 06 Jún 2020, 17:22

mal som chvilu cas a pravdu povediac dost ma zaujima ci je skutocne tak narocne na odtienenie
zas som to hodil len tak na hulvata. Zas , necakane , este aj vsetko pokope na stole , metrove kable pod stolom , nestocene, hroza. vysledok ? do 150Hz bez zavahania. Nechapem.
mosfet s napajanim som dal k inducke, k tomu natiahnute tri kable , plus , minus , a spinany plus od optoclena na G mosfetu. nejake kondiky na napajani , priamo na doske s mofetom. G mofetu prizemnene cez 500R na zem - tento odpor rozopina mosfet , optoclen mu spina plus tym ho spina.
layout prikladam...
Prílohy
inducka.jpg
0

Atlan
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1146
Dátum registrácie: 01 Feb 2008, 00:00
Bydlisko: Kosice okolie

Re: Ako funguje zapalovanie?

Príspevok od používateľa Atlan » 06 Jún 2020, 22:22

Poprve ziadne elektronicke zapalovanie sa neskusa bez iskrista, bez cievky. Pokial chce odpalovat tranzistory a prerazat cievky tak pokracujte. Inak po uzite sviecku s medzerou 1,1mm.

Mosfet sa budu driverom, uz to tu bolo spomenute. Ale ked uz, otvaraj mosfet odporom ale skratuj G k zemi optoclenom pac iskra sa tvori pri preruseni prudu cievkou, cim strmsie rozopnutie tym vecsi prekmit. Tak ze rozopinat cez odpor 500R je kontraproduktivne.
Irfp460 lacny a vydrzi, ano su aj lepsie ale zatial ti ostaci. Ale chapem, najlepsie sa naucis na vlastnych chybách. Pokracuj svetlo tam je.
0

Používateľov profilový obrázok
misocko
Ultimate člen
Ultimate člen
Príspevky: 4317
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: Ako funguje zapalovanie?

Príspevok od používateľa misocko » 06 Jún 2020, 23:05

:-)
ja nic bez iskriska neskusam , foto je sice v mizernej kvalite ale aj tam je 5mm iskrisko dokonca s iskrou , uplne vpravo tensne pod cervenou pinzetou. 1,1mm , ano pod tlakom vo valci , vonku na vzduchu minimalne 5mm aby si mohol porovnat preskok pod tlakom vo valci (nizsi tlak - skor preskoci iskra)
tu najdes moje meranie s pouzitim budica cez 16R a 560R , ja sam som cakal ze s 560R to bude uplne zle , ze sa mosfet bude zatvarat pomaly a energia sa prepali na mosfete , nevyslo, v oboch pripadoch som dosiahol maximum mojej indukcnej cievky - iskra na 2cm
zrejme je nabijanie kondika paralelne k cievke ovela pomalsie ako rozopnutie mosfetu cez 560R , ale kedze uz pri tomto kondiku je strmost dostatocne velka na to aby som presvihol schopnosti indukcej cievky (nad 2cm iskrisko, to preskakovalo vnutri inducky) , nevidim teda realny dovod ist nizsie s odporom v mojom pripade , pripadne cokolvek riesit na strane budenia.
Samozrejme , a ja sam som bol uz aj v spomenutom vlakne za ovela nizsi odpor / rychlejsie zatvorenie fetu , ale meranim na mojom konkretnom kuse sa mesim odporom iskra nezvecsi.

ja to v reale nepotrebujem , otestujem , pomeriam, nieco sa naucim , vyhodim :lol:
0

TomasNM
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1371
Dátum registrácie: 22 Jan 2012, 19:24
Bydlisko: Nové Mesto nad Váhom
Vek: 43

Re: Ako funguje zapalovanie?

Príspevok od používateľa TomasNM » 08 Jún 2020, 21:29

Pani,

Troska meskam, ale predsa.
Minuly tyzden som to zapojenie so spinanim minusu skusal znova a znova a v urcitom momente som sa dopracoval k uspokojivemu vysledku.
Tak som to hodil na DPS a tu je vysledok. Toto mi zabralo par vecerov - sa to nezda, ale taka blbost ako design, vyroba, osadenie, otestovanie DPS dokaze na peknych par hodin zabavit.
Modul je pripraveny na skusku v praxi, cakam na nahradu vacky, ktora sa aktualne vyraba.
Potom este musim nadesignovat drziak senzora a pojdem to nahodit.

Prikladam schemu finalnej spinacej koncovej casti.
Zohnal som aj par silovych MOSFET-ov navyse, takze mam dalsiu zasobu.
Okrem toho mam aj par IGBT modulov z 30kW menica, ak by bola nudza :)
Robil som aj dvojhodinovy zatazovy test, ked som tocil 6000RPM (100Hz), pri iskre cca 8mm.
Ziaden problem, stabilne bez rusenia a bez prehrievania suciastok.
To zodpoveda rychlosti cca 50km/h a prejdeni cca 100km, co bohato na vylet staci.
Priemerny odber do pol Ampera.

Chcel som najst tie odpalene tranzistory z min. tyzdna, ale neviem to v kosi najst medzi bordelom.
Jeden z nich bol ten, co tam je teraz, len zrejme absencia snubber kondenzatora ich odpalila.

Ako spomenul Atlan, otvaram tranzistor cez rezistor - mozno az zbytocne vysoka hodnota, otvara ho s viditelnou rampou.
Jasne, ze tak vznika na nom trocha strata, ale nehreje sa to takmer vobec, aj ked je to predsalen indukcna zataz a to sa moze inak prejavit z hladiska vykonovej straty.
Na druhu stranu mu stahuje gate ( :) ) tranzistor, aby to bolo co najrychlejsie.
Z original jawackej cievky vazne asi viac ako 1cm nevytiahnem - pocutelne to prskalo vnutri nej.
Misocko tam pouzil inducku z auta, ktore su celkovo vykonnejsie ako tieto male motorkove.
V minulosti som riesil ohradnik a pri rovnakom zapojeni s pouzitim Skodovackej inducky som mal mensiu iskru ako ked som pouzil CCCP Zigulacku.
Prílohy
schema 20066.png
20200604_210716.jpg
20200604_222141.jpg
20200604_222152.jpg
0

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12406
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: Ako funguje zapalovanie?

Príspevok od používateľa boraicho » 08 Jún 2020, 22:42

ach ten 10K
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

Atlan
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1146
Dátum registrácie: 01 Feb 2008, 00:00
Bydlisko: Kosice okolie

Re: Ako funguje zapalovanie?

Príspevok od používateľa Atlan » 05 Jún 2023, 14:22

Ako to vlastne skoncilo?
0

TomasNM
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1371
Dátum registrácie: 22 Jan 2012, 19:24
Bydlisko: Nové Mesto nad Váhom
Vek: 43

Re: Ako funguje zapalovanie?

Príspevok od používateľa TomasNM » 05 Jún 2023, 15:43

Stare riesenie nakoniec skoncilo v kosi,
Pouzil som nakoniec aktivnu inducku z Felicie/Favorita, ktorej staci uz iba impulz z MCU.
Kedze rusenie som nedokazal odstranit 100%-ne hardwarovo, tak som to vyriesil softwarovo - na cas iskry mu vypinam prerusenia davam delay na 2.5ms (dostatocna doba na zhasnutie iskry) a v tom case ignorujem vsetko, co sa na vstup prerusenia dostane. Potom prerusenie znova aktivujem, cakam na dalsi impulz od senzora.
S tymto riesenim uz mam najazdene cez 1000km a bez jedineho problemu.
Napajanie je riesene jednym polom magneta a je tam pridavna baterka, ktora je potrebna pre preklenutie bootovania MCU. Bez nej by bolo treba tocit motorom par sekund, kym sa MCU rozbehne.

Okrem Hall senzora som skusal aj opticky senzor (vidlicka z mysi), tiez to rusenie neodstranilo.
Ferit pri Hall senzore to rusenie tiez ciastocne dokazal eliminovat, ale nakoniec vyhralo softwarove riesenie rusenia a uz to funguje aj bez feritov.

Niektore fotky su zpred roka a po/pocas rekonstrukcie v aktualnom obdobi.
image.png

Kód: Vybrať všetko

#include <EEPROM.h>

#define GAUGEperiod 100 //ms
#define BLINKperiod 500 //ms
#define LOWRPMBLINKperiod 250 //ms
#define saturationTime 700 //us
#define sensorTimeout 500000 //us

#define buttonPin 10
#define RPMoutEnablePin 11
#define ignitionPin 12
#define blinkPin 13

//int advanceTable[]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,   0 }; // zero
//int advanceTable[]={ 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,   20 }; // 20 const
//int advanceTable[]={ 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,   25 }; // 25 const
//int advanceTable[]={ 0,2,5,10,15,20,25,30,35,37,39,40,41,42,43,44,45,   46 }; // original
//int advanceTable[]={ 10,20,22,24,26,28,30,32,34,36,38,40,41,42,43,44,45,   46 }; // 20 @ 500 max 45
//int advanceTable[]={ 10,20,23,26,29,32,35,38,41,44,47,50,51,52,53,54,55,   56 }; // 20 @ 500 max 55
int advanceTable[]={ 10,20,24,28,30,34,39,43,45,49,53,57,61,62,63,64,65,   66 }; // 20 @ 500 max 65


unsigned long time;
unsigned long GAUGEtime=0;
unsigned long BLINKtime=0;
unsigned long LOWRPMBLINKtime=0;
volatile unsigned long previousMicros=0;
float delayIgnition;
float advanceAngle;
int RPM=0;
int minRange=1000;
int maxRange=7200;
boolean ign,lowrpm,sig;
boolean manual,e;

void setup() 
{ 
  Serial.begin(115200);
  attachInterrupt(0, myinthandler, FALLING);
  pinMode(2,INPUT);//SENSOR
  pinMode(buttonPin,INPUT_PULLUP);//BUTTON
  pinMode(RPMoutEnablePin,INPUT_PULLUP);//RPMoutEnablePin
  pinMode(blinkPin,OUTPUT);//LED
  pinMode(ignitionPin,OUTPUT);//IGNITION
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(A2,OUTPUT);
  pinMode(A3,OUTPUT);
  pinMode(A4,OUTPUT);
  pinMode(A5,OUTPUT);
  ign=true;e=false;sig=true;
  if(!digitalRead(buttonPin)) 
  {
    manual=true;
    Serial.println("--------------");
    for(int i=0;i<20;i++) Serial.println(EEPROM.read(i));
    Serial.println("--------------");
  }
  else manual=false;
} 
 
void loop() 
{ 
  time=millis();
  if(digitalRead(buttonPin)) e=true;

// GAUGE
  if(time-GAUGEtime>=GAUGEperiod) { GAUGEtime = time;updateGauge();}

// IGNITION
  if(ign && micros()-previousMicros>=delayIgnition ) 
  { 
    ign=false;sig=false;
    digitalWrite(ignitionPin,true);
    delayMicroseconds(saturationTime);
    digitalWrite(ignitionPin,false);
    delayMicroseconds(2500);
    sig=true;
  }
  
// STI BLINK
  if(time-BLINKtime>=BLINKperiod) { BLINKtime=time;digitalWrite(13,!digitalRead(13));}

// LOW RPM BLINK
  if(lowrpm && time-LOWRPMBLINKtime>=LOWRPMBLINKperiod ) { LOWRPMBLINKtime=time;digitalWrite(A4,!digitalRead(A4));digitalWrite(A5,!digitalRead(A5));}

// SAVE ADVANCE
  if(manual && !digitalRead(buttonPin) && e) { e=false;saveAdvance();}
}

void updateGauge()
{
  int actual;
  if(!manual) {
    lowrpm=false;
    actual=map(RPM,minRange,maxRange,1,10);
    if(RPM<minRange) { actual=0;lowrpm=true;}
  } else
  {
    lowrpm=false;
    actual=map(analogRead(A0),0,1023,0,10);
  }
  if(actual>0) digitalWrite(3,true );else digitalWrite(3,false ); 
  if(actual>1) digitalWrite(4,true );else digitalWrite(4,false ); 
  if(actual>2) digitalWrite(5,true );else digitalWrite(5,false ); 
  if(actual>3) digitalWrite(6,true );else digitalWrite(6,false ); 
  if(actual>4) digitalWrite(7,true );else digitalWrite(7,false ); 
  if(actual>5) digitalWrite(8,true );else digitalWrite(8,false ); 
  if(actual>6) digitalWrite(A2,true);else digitalWrite(A2,false); 
  if(actual>7) digitalWrite(A3,true);else digitalWrite(A3,false); 
  if(!lowrpm) if(actual>8) digitalWrite(A4,true);else digitalWrite(A4,false); 
  if(!lowrpm) if(actual>9) digitalWrite(A5,true);else digitalWrite(A5,false); 
  if(micros()-previousMicros>sensorTimeout) RPM=0;
  if(!digitalRead(RPMoutEnablePin)) Serial.println(RPM);
}

void calculateDelay()
{
  int a;
  if(RPM>0    && RPM<=500) a=RPM; 
  if(RPM>500  && RPM<=1000) a=RPM-500; 
  if(RPM>1000 && RPM<=1500) a=RPM-1000; 
  if(RPM>1500 && RPM<=2000) a=RPM-1500; 
  if(RPM>2000 && RPM<=2500) a=RPM-2000; 
  if(RPM>2500 && RPM<=3000) a=RPM-2500; 
  if(RPM>3000 && RPM<=3500) a=RPM-3000; 
  if(RPM>3500 && RPM<=4000) a=RPM-3500; 
  if(RPM>4000 && RPM<=4500) a=RPM-4000; 
  if(RPM>4500 && RPM<=5000) a=RPM-4500; 
  if(RPM>5000 && RPM<=5500) a=RPM-5000; 
  if(RPM>5500 && RPM<=6000) a=RPM-5500; 
  if(RPM>6000 && RPM<=6500) a=RPM-6000; 
  if(RPM>6500 && RPM<=7000) a=RPM-6500; 
  if(RPM>7000 && RPM<=7500) a=RPM-7000; 
  if(RPM>7500 && RPM<=8000) a=RPM-7500; 
  if(RPM>8000) a=500; 

  int index=RPM/500;if(index>16) index=16;
  if(!manual) advanceAngle=map(a,0,500,advanceTable[index],advanceTable[index+1]);
  else
  advanceAngle=map(analogRead(A0),0,1023,0,60);

  float timePerRev=60000000.0/RPM;///Megahertz->microseconds
//  delayIgnition=((timePerRev/2.0)*(float(180.0-advanceAngle)/180.0))-float(saturationTime);//ignition on falling
  delayIgnition=((timePerRev/2.0)*(float(180.0-advanceAngle)/180.0));//ignition on rising
}

void myinthandler()
{
  if(!sig) return;
  unsigned long currentMicros = micros();
  unsigned long differenceMicros=currentMicros-previousMicros;if(differenceMicros==0) differenceMicros=1000000;
  previousMicros=currentMicros;
  RPM=60*(1000000.0/float(differenceMicros));
  ign=true;
  calculateDelay();
}

void saveAdvance()
{
  digitalWrite(3 ,false);
  digitalWrite(4 ,false);
  digitalWrite(5 ,false);
  digitalWrite(6 ,false);
  digitalWrite(7 ,false);
  digitalWrite(A2,false);
  digitalWrite(A3,false);
  digitalWrite(A4,false);
  digitalWrite(A5,false);
  int a=(RPM+250)/500;
  EEPROM.write(a,(byte)advanceAngle);
  Serial.print(a);Serial.print(" ");Serial.println(advanceAngle);
  delay(200);
}
Prílohy
20230521_115728.jpg
20230521_115735.jpg
20230521_125436.jpg
20220820_144451.jpg
20220820_144047.jpg
20220820_144359.jpg
20220820_144226.jpg
pionier - nove zapalovanie.pdf
(47.78 KiB) 30 stiahnutí
1
Obrázok 1

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok