Vraag over stroboscoop tester


Om te debuggen ( probleem oplossen)

https://static.circuitsonline.net/camo/73ea96d7e98ad2ea89d9868a0f98ec189bbf9896/687474703a2f2f693135302e70686f746f6275636b65742e636f6d2f616c62756d732f733130332f536865726c6f636b486f6c6d6573416c62756d2f496e707574736368616b656c696e672e706e67

zou ik eerst even op de ingang van de schakeling waar nu je wikkeling zit even een gewone drukknop aansluiten naar de plus 5V van de schakeling. De andere kant van de drukknop via de 50k ohm weerstand. Voor het testen kan je parallel aan R3 een led met 1k ohm weerstand plaatsen.
Met de drukknop kan je zelf nu pulsen geven en als de led op de uitgang na de transistor uit en aan gaat weer je zeker dat je schakeling werkt.

Als de schakeling werkt ga je daarmee je programma testen en dan nog steeds met gebruikt van een drukknop of functie generator. En pas als dat allemaal werkt en fouten eruit zijn gehaald ga je pas life testen.
Want met life testen kunnen er allerlei onvoorziene storingen optreden die bv de arduino in de war gooit. Maar dan weet je in ieder geval dat de schakeling en de software goed zijn en je dan daarna moet zorgen dat de storingen eruit gefilterd word door bv extra veel condensatoren over de voeding naar de arduino te plaatsen.

Ik zou idd eerst testen met een schakelaar of functie generator. Dan kun je zien of het werkt en ook of de led zichtbaar aan gaat.

En test zo ook de arduino eens voor je verder gaat, zou me verbazen als hij nog werkt.

Je wil niet weten hoeveel scoopmeters er automotive worden vermoord met dit soort experimenten. Ben voorzichtig met de uitkoppeling en massa aansluitingen (en voor testen het even weglaten van beveiliging (diode/weerstanden/condensators). Het moet een net sterk genoeg triggersignaal zijn, geen stroom/spanning trafo worden. De oppiklus is open, als je die open kant aan massa hangt wordt het een trafo (primair 5.000V wordt dan secundair 100.000V, een Arduino is absoluut niet beveiligd tegen dat soort inductie pieken)

www.pa4tim.nl, www.schneiderelectronicsrepair.nl, Reparatie van meet- en calibratie apparatuur, ook oud en exotisch

Hallo beste mensen,

Heb met een drukknop 5v (wanneer ingedrukt) op de ingang van de spoel gezet. In de seriële plotter van arduino is nu helaas niets te zien. Heb erna eens een 1K weerstand i.p.v. 50k weerstand gebruikt. Wanneer ik nu 5V op de ingang van de spoel zet met de Button zie ik wel op de seriële plotter de waarde 1024 naar 0 gaan.

Nu heb ik die 1K weerstand erin gelaten en met een draaiende stihl motor de massa aan de gnd van mijn schema gezet en de ingang van de spoel naar de bougiekabel. Nu is er helaas nog steeds niks te zien in de seriële plotter.

Weet iemand wat ik fout doe? De arduino werkt goed, deze heb ik erna ook nog getest en functioneert naar behoren.

Groeten,

Sven

Zonder een scoop word het moeilijk. Je zal het signaal op de basis van de transistor moeten meten.

Wat heb je aan apparatuur? heb je een signaal of functie generator? Heb je een scope?

Wanneer ik nu 5V op de ingang van de spoel zet met de Button zie ik wel op de seriële plotter de waarde 1024 naar 0 gaan.

Waarom lees je een analoge waarde in? Dat is veel en veel te traag. De getoond schakeling is een digitaal signaal een 0 of 1 dus lees hem dan ook digitaal in.

Ik zou als eerste test in de arduino enkel een counter zetten die het aantal pulsen telt.

Ik heb de schakeling even in Falstad geduwd:

code:


$ 1 0.000005 16.817414165184545 50 5 50
t 368 224 400 224 0 1 -5034.032785666176 -5029.0327856671765 100
r 400 144 400 208 0 10000
r 368 224 304 224 0 8200
r 288 224 208 224 0 50000
w 304 224 288 224 0
c 288 224 288 288 0 1e-11 -5029.032785668005
g 288 288 288 304 0
v 160 224 160 288 4 5 40 5000 0 0 0.1
g 160 288 160 304 0
R 400 144 400 112 0 0 40 5 0 0 0.5
g 400 240 400 304 0
p 448 208 448 288 1 0 0
g 448 288 448 304 0
w 400 208 448 208 0
c 160 224 208 224 0 1e-10 29.03278567259258
o 11 64 0 4098 5 0.1 0 1
o 7 64 0 4099 10240 0.05 1 2 7 3

Daar werkt hij met een ingangs-c van 100 pF wel, maar dan moet de andere condensator weg. En allicht is de capaciteit in werkelijkheid nog kleiner.

De pulsjes zullen smal zijn. Ik zou proberen ze op de Arduino te vangen in een interrupt:

c code:



// Interrupt voor ontstekingstest

volatile long tel; 
const int input_pin = 2; 

void Update() { // ISR
  tel++; 
}

void setup() {
  // debug output
  Serial.begin(9600); 
 
  // interrupt
  pinMode(input_pin, INPUT);
  attachInterrupt(digitalPinToInterrupt(input_pin), Update, RISING);
  
}

void loop() {
   Serial.println(tel); 
   delay(1000); 
}

Input_pin moet hier een pin zijn met interrupt hardware.

Bedankt voor de reacties. Heb hem net even als digitaal input gezet en in de code gezet dat de arduino een ledje moet aansturen wanneer de input van de stroboscope tester hoog is. Dit werkte niet met de 50K maar wel met de 1K.

(Waarom is de analoge read trager dan de digitale? en als de frequentieperiode 6ms is van een draaiende motor, kan de analoge read dit dan aan?)

Kwa apparatuur heb ik een philips 3232 scope en een aantal fluke-meters. Helaas geen functiegenerator (eindelijk een reden om er 1 te halen).

Misschien kan ik inderdaad een waarde initialiseren in arduino die ik telkens ophoog wanneer de ingang van de schakeling hoog wordt.

(Ik verwacht dat dit wel werkt met de button maar met een lopende motor weet ik niet)
Deze waarde zou ik dan in serial print kunnen zetten.

Is het eigenlijk wel de bedoeling dat ik de gnd van de arduino aan de massa van het blokje hang? En waarom wel/niet?

Tips/info is welkom

Met vriendelijke groeten,

Sven

ps: waarvoor zijn die diodes in mijn schakeling? Is dit om het signaal te gelijkrichten ofzoiets? En waarvoor die 3,3 zener?

(Waarom is de analoge read trager dan de digitale? en als de frequentieperiode 6ms is van een draaiende motor, kan de analoge read dit dan aan?)

De ADC in de cpu heeft gewoon veel tijd nodig om de omzetting van analoog naar digitaal te doen. In 10 bits resolutie duurt dat minimaal 13 klokpulsen + instellen van de registers nodig voor de omzetting. Het instellen hoeft eigenlijk maar 1x , maar dat moet je wel apart opgeven. Nu heb je dat niet gedaan en word bij elke ADC omzetting alles opnieuw ingesteld. De arduino code wacht ook net zolang totdat de omzetting klaar is en gaat dus niet verder met andere opdracht regels. Dat kan allemaal wel anders maar is niet standaard.

Maar zelfs als je alles optimaal instelt en met anterups werkt is Analoog altijd trager dan digitaal. En je gebruikt analoog dan ook echt als je een analoge waarde wilt weten. Maar je bent niet interesseert in de hoogte van de puls maar of de puls er wel of niet is en dat is puur digitaal.

Wat is een interrupt vraag je misschien af?
De microcontroller op de Arduino bestaat uit veel verschillende eenheden IO poorten, timers, geheugen, CPU, Uart(serieel), ADC omzetter en nog meer. Het leuke van al die units is dat ze min of meer apart kunnen werken onder aansturing van de CPU.
Nu doe je programma de ADC aansturen en wachten totdat deze klaar is en dan verder met de volgende opdracht.
Via een interrupt werkt dat anders. Je stuurt de ADC en verteld de ADC dat als deze klaar hij de cpu een seintje geeft. Dit seintje heet interrupt. De cpu gaat meteen daarna verder met de volgende opdrachten. Zodra de ADC klaar is met omzetting geeft het dat aan met de interrupt. De CPU stopt dan met wat het aan het doen was en gaat nu verder met de interrupt routine uitvoeren als deze klaar gaat de cpu weer verder waar het gebleven was.

Aha, dit heeft weer dingen verduidelijkt.
Weet iemand waarvoor de diodes in mijn schema voor dienen?
En ik zal eens met een intetrupt testen of de arduino die pulsjes opvangt.

En die condensator c1 weghalen? Is dat wel een goed idee? Hoe kan ik de pulsjes zo duidelijk mogelijk weergeven in de arduino?

Met vriendelijke groeten,

Sven

De diodes worden hier gebruikt als klamp diodes. De bovenste diode klamp aan de 5V lijn. Dan wil zeggen als de ingang van het bobine signaal hoger word dan 5V + Uf(diode) = 5,7V dan gaat de bovenste diode in geleiding waardoor het ingangssignaal niet hoger kan worden dan 5,7V. Echter kan hier door de diode een hele grote stroom gaan lopen en vandaar de 50k ohm weerstand.
De onderste diode klamp aan de 0V en daardoor kan de ingang nooit lager woorden OV - Uf = -0,7V.De je vind klamp diodes in vrijwel in elke microcontrollechip als beveiliging van ingangen.
De zenerdiode van 4,7V zorgt voor een begrenzing van het ingangssignaal op ca 4,7V en werkt dus net iets eerder dan de klamp diodes. Ook bij een zenerdiode moet de maximum stroom begrenst worden met een weerstand.
De condensator vormt samen met de 50k weerstand een filter om ongewenste signalen uit te sluiten maar kan als verkeerd berekend ook problemen geven. Maar filter berekeningen is niet mijn ding.

De 50k weerstand is naar mijn mening wel heel erg groot en mag ook een stuk kleiner zeker omdat er al klamp en zener diodes aanwezig zijn.
De andere weerstand 8k2 vind ik zelf ook aan de hoge kant ik zou zelf beide weerstand iets van 4k7 maken.

Heb de interrupt code getest met een schakelaar aan de ingang van de 50K weerstand. De waarde bleef 0 in de seriele monitor. Nu heb ik ipv e 50K een 1K weerstand geprobeerd. DIt werkte goed. Bij elke aanraking ging de waarde omhoog.

Bedankt Ben, ik zal eens een 10K proberen op een motor ipv de 50K. De zener diode die ik gebruik is wel een 3v3 versie. Zou dit misschien de fout zijn?

Zal morgen dit project met de 50K ohm eens testen op een draaiende solex motor.

Gr Sven

[Bericht gewijzigd door SvenTech op 22 september 2020 17:41:16 (21%)]

@SvenTech. Je bent goed bezig en verteld netje wat je gedaan hebt. Echter is het op een Forum ook wel fijn als je ook de vragen van onze kant beantwoord.

Ik had je gevraag of je een functie of signaal generator hebt en of je een scope hebt. Ik zou daar graag nog antwoord op.

De zener diode die ik gebruik is wel een 3v3 versie. Zou dit misschien de fout zijn?

Nee dat maakt niet zo veel uit. Een transistor heeft 0,7V nodig om in geleiding te gaan dus 3,3V is hoog zat. Wel kan bij 3,3V zener de 8K2 weerstand een stukje kleiner om die weerstand nu bij 4,7V hoort. Omdat de transistor enkel een ingang van chip moet schakelen hoeft deze maar heel weinig stroom te schakelen kleiner dan 1mA. Pas als de transistor veel stroom moet schakelen zeg 50mA dan wordt de 8k2 weerstand pas belangrijk om die goed berekend te hebben.

Zal morgen dit project met de 50K ohm eens testen op een draaiende solex motor.

Zelf denk ik dat die weerstand zelf nog 1k op zijn kleinst mag zijn. Ik zou gewoon steeds een kleinere weerstand proberen totdat je een betrouwbaar signaal hebt.

Beste Ben,

Over mijn apparatuur: Heb thuis een philips 3232 oscilloscope en een aantal fluke meters. Verder helaas nog geen functie of signaalgenerator.

De weerstanden zal ik eens aanpassen (1Kohm ipv 50K, en inderdaad steeds kleiner totdat er een duidelijk signaal zichtbaar is).

Bedankt voor uw snelle reactie en hulp. Ik hoop snel weer vooruitgang met dit project te maken.

Met vriendelijke groeten,

Sven

Goedenavond mannen,

Heb net even het schema getest (met de 50K weerstand)en het werkt. Bij het draaien van het vliegwiel zag ik dat de interrupt de waarde telkens ophoog telde. Helaas ging bij elke slag (360 graden) de waarde soms 10 omhoog of 5 ipv 1.

En hoe kan ik nu een led aansturen (of transistor met power led) afhankelijk van die interrupt waardes?

Dit is de code die ik gebruik om de pulsen mee op te vangen in een interrupt:

code:


// Interrupt voor ontstekingstest

volatile long tel; 
const int input_pin = 2; 

void Update() { // ISR
  tel++; 
}

void setup() {
  // debug output
  Serial.begin(9600); 
 
  // interrupt
  pinMode(input_pin, INPUT);
  attachInterrupt(digitalPinToInterrupt(input_pin), Update, RISING);
  
}

void loop() {
   Serial.println(tel); 
   delay(1000); 
}

Met vriendelijke groeten,

Sven

c code:

// interrupt
  pinMode(input_pin, INPUT);
  attachInterrupt(digitalPinToInterrupt(input_pin), Update, RISING);

In dit stuk word de interrupt (attach)gekoppeld aan de input_pin bij een rising edge. Dus bij een stijgende puls. Zodra er een stijgende puls word waargenomen word het stukje programma onder update uitgevoerd.

c code:


void Update() { // ISR
  tel++; 

Dit stuk word automatisch uitgevoerd bij elke stijgende puls
TEL++ beteken tel = tel + 1.

Hier zou je dan ook elke keer een led aan en uit kunnen zetten.

Helaas ging bij elke slag (360 graden) de waarde soms 10 omhoog of 5 ipv 1.

Dit komt waarschijnlijk omdat de contact punten last hebben van contact dender en dus meerdere pulsen tegelijk geeft, voor de onsteking maakt dat niet uit maar omdat de microcontroller zou snel is ziet hij de afzonderlijke pulsen wel.

Zoek even op Google onder contact dender
https://nl.wikipedia.org/wiki/Denderen

Meten met de oscilloscoop geeft uitsluiting van wat er precies gebeurt

Aha, dat zou ik ook even kunnen meten.

Had nog niet met condensator getest. Misschien dat ik dat denderen eruit kan filteren wanneer ik die condensator plaats.

Een led aansturen gelijk met die tel++ zal ik eens proberen.
En even de spanning meten over de gestuurde transistor met de oscilloscoop.
Dus onder Tel++: digitalwrite(led,high)
En dan else led=low.

Zal morgen dit eens proberen, ik ben benieuwd hoe ik dit voor elkaar kan krijgen om die puls duidelijk weer te laten geven met een led.

Voor tips of opmerkingen hoor ik heg graag.

Met vriendelijke groeten,

Sven

Helaas niets zichtbaar op de scope. Heb hem ingesteld op 10us, dc, 5v/d, ik meet hier met een dso138.

Ook de led gaat niet flitsen wanneer ik een slinger geef aan het blok.

Waarde telt wel omhoog in seriële monitor.

Weet iemand hoe ik dit probleem kan oplossen?

Mischien een delay ofzoiets extra om led iets langer te laten branden? Mischien dat ie nu een paar microseconde flitst maar dit niet zichtbaar is voor het oog.

(Edit) heb even de led in slowmotion gefilmd, hierop is te zien dat de led wel flitst. Hoe moet ik de led zichtbaar maken voor het oog en hoe kan ik hiermee een powerled aansturen?

[Bericht gewijzigd door SvenTech op 24 september 2020 11:07:25 (17%)]

Op je scope zie je alleen ruis maar niet dat de led schakelt. Dan zou je toch steile flanken moeten zien.

IK denk dat er toch een fout in programma zit met je led

c code:


int ledState = LOW;     // the current state of LED plaats bovenin het programma  onder const int input_pin

    // toggle state of LED     // plaats dit in de ISR routine Update()
    ledState = !ledState;

    // control LED arccoding to the toggled state  // plaats dit in je hoofd programma loop()
    digitalWrite(LED_PIN, ledState); 

Misschien dat ik dat denderen eruit kan filteren wanneer ik die condensator plaats.

Daarvoor zat die condensator er al op die plaats, zit er niet voor niets.

Dankuwel,

Ik had de volgende code:

code:


// Interrupt voor ontstekingstest

volatile long tel; 
const int input_pin = 2; 
int LED = 3;

void Update() { // ISR
  tel++; 
  digitalWrite(LED, HIGH);
}

void setup() {
  // debug output
  Serial.begin(9600); 
  pinMode(LED, OUTPUT);
 
  // interrupt
  pinMode(input_pin, INPUT);
  attachInterrupt(digitalPinToInterrupt(input_pin), Update, RISING);
  
}

void loop() {
  digitalWrite(LED, LOW);
   Serial.println(tel); 
}

Zal deze eens aanpassen naar uw code. Is het de bedoeling (ook bij moderne stroboscopes) dat de flits precies flitst wanneer de vonk aanwezig is of moet er een vertraging in? (omdat hij anders niet met het blote oog zichtbaar is(?))

Heb net even de code getest. De hele ochtend al getest met een paar slagen aan het vliegwiel, dit werkte goed(led veranderde steeds van status). Maar toen dacht ik laat ik dit eens doen bij een draaiende motor. Dus bij het aansluiten met een draaiende motor zag ik het ledje snel knipperen. Maar toen bleef hij opeens uit dus heb snel de massa losgekoppeld maar helaas is poort 2 kapot(vermoed ik). Hierna toch nog even gecheckt of deze signalen zag maar dit doet hij met een heel aparte frequentie (zie bijlage).

Voor de rest werkt de arduino nog goed. Hoe kan ik dit de volgende keer voorkomen? Apart want ik had toch echt alle diodes goed aangesloten (precies zoals op het schema). Mischien die 50K vervangen voor een 100K?

En ik heb de interrupt nu alleen geprogrammeerd als er een uprising pulse zich voordoet. En als de led dan aangaat is de led de gehele arbeidsslag aan. Hoe kan ik dit zo programmeren dat de led alleen flitst bij het sluiten van de contactpunten?

Ik zie jullie reacties met belangstelling tegemoet.

Edit: Waarschijnlijk alle ingangen van de arduino kapot ivm adc converter? Poort 4 doet hetzelfde

Met vriendelijke groeten,

Sven

Ik begrijp het even niet meer?

Heb je de door mij gegeven schakeling ook exact nagebouwd dus inclusief transistor of heb je de transistor weg gelaten.
Als de bobine wikkeling te veel spanning geeft dan zou enkel de transistor kapot moet gaan en niet de arduino. De transistor moet je ook de led laten schakelen die gaat direct mee met de contactpunten.

Wat voor voeding heb je gebruikt?

Is het de bedoeling (ook bij moderne stroboscopes) dat de flits precies flitst wanneer de vonk aanwezig is of moet er een vertraging in? Geen idee?

c code:


void Update() { // ISR
  tel++; 
  digitalWrite(LED, HIGH);

Je zet de led nu aan maar je zet hem verder nergens meer uit en dan blijft die dus ook gewoon aan.

Wat raar inderdaad. Ik heb het schema met een transistor gebruikt en de 50Kohm weerstand. Dit schema had ik gestuurd. De digitale waarde wordt dan ingelezen met een interrupt en de arduino stuurt afhankelijk van deze gegevens de led aan.

Bij het aansluiten van dit systeem op een draaiende motor ging de arduino vrijwel direct stuk. De led flitse even en bleef daarna uit. Ik heb de massa van het motorblokje aan de gnd van de arduino gehangen en de input van de 50k weerstand met een aantal wikkelingen om de bougiekabel heen gedaan.

Waardoor zou de arduino defect kunnen zijn?

Zou het mischien kunnen dat de 3,3 v zener defect is gegaan waardoor de transistor geen 3,3 v (max) binnenkreeg maar een aantal kilovolts?

Op 26 september 2020 20:16:56 schreef SvenTech:

Waardoor zou de arduino defect kunnen zijn?

Fred101: En test zo ook de arduino eens voor je verder gaat, zou me verbazen als hij nog werkt. Je wil niet weten hoeveel scoopmeters er automotive worden vermoord met dit soort experimenten. Ben voorzichtig met de uitkoppeling en massa aansluitingen (en voor testen het even weglaten van beveiliging (diode/weerstanden/condensators). Het moet een net sterk genoeg triggersignaal zijn, geen stroom/spanning trafo worden. De oppiklus is open, als je die open kant aan massa hangt wordt het een trafo (primair 5.000V wordt dan secundair 100.000V, een Arduino is absoluut niet beveiligd tegen dat soort inductie pieken)

www.pa4tim.nl, www.schneiderelectronicsrepair.nl, Reparatie van meet- en calibratie apparatuur, ook oud en exotisch

Zou het mischien kunnen dat de 3,3 v zener defect is gegaan waardoor de transistor geen 3,3 v (max) binnenkreeg maar een aantal kilovolts?

Dan nog zou de transistor het moet begeven en de Arduino is dan veilig.

Ik denk zelf dat het aan de klamp diodes ligt. Ik had al uitgelegd hoe die werken. Als er teveel energie via de klamp diode naar de 5V gaat word die spanning hoger en niet elke voeding kan daar goed mee omgaan en dat heeft dan weer gevolgen voor de arduino.

Oplossing zit hem door het gebruik van een optocoupler.
type opto maakt niet zoveel uit neem bv de 4N35 . De led van de opto plaats je dan achter de transistor. Dus vanaf de 5V de opto-led dan een weerstand van 330 ohm en dat naar de uitgang van de transistor.
Als je nog een extra led wilt om te zien of de opto schakelt kan je de 330 ohm weerstand vervangen door een led + 120 ohm weerstand

De uitgang van de opto sluit je aan zoals nu de transistor heeft gezeten en dan met een weerstand van 10k ohm van de 5V naar de ingangspin waar ook de opto-transistor zit.

Je hebt nu door de opto 2 gescheiden schakelingen en een extra beveiliging. Omdat je 2 gescheiden schakelingen hebt moet je nu ook 2 apparte 5V voedingen gebruiken en mag de min van de schakeling en of voedingen absoluut niet verbonden zijn.

Het zou goed zijn om nu eerst even het schema te tekenen zoals je het nu begrijpt.

Sine

Moderator

Merk op dat er in het originele schema een 2n7000 staat, dat is een mosfet, welliswaar met het verkeerde symbool. Je kunt je oberigens afvragen of dit gaat helpen sinds er niets is om de gate te ontladen.