Go Down

Topic: Injector aansturen met arduino (Read 1 time) previous topic - next topic

JanL

Hallo allemaal,

Een vriend van mij en ik bouwen voor een schoolwerkstuk (profielwerkstuk 6vwo) een injectiesysteem op een tweetakt verbrandingsmotor (puch maxi). We schieten al aardig op maar we zijn alleen nog op zoek naar een manier om de injector aan te sturen.

Wat dus moet gebeuren is dat er een signaal binnenkomt, dit signaal moet binnen bepaalde waardes zitten, bijvoorbeeld tussen 0,8 en 1,0 V. Wanneer de spanning lager is dan 0,8 V moet de arduino ingrijpen en bij een hogere spanning dan 1,0 V ook. Hij moet deze gegevens verwerken en aan de hand daarvan variabele pulsen afgeven naar de injector (tot +-100 pulsen per seconde). Wanneer de spanning te laag is moet hij steeds langere pulsen geven en wanneer de spanning te hoog is steeds kortere. Verder wordt het aantal pulsen en het moment van puls afgeven aangegeven door een externe lichtsluis.

Denken jullie dat dit mogelijk is met een arduino? Ik ben meer thuis op het gebied van verbrandingsmotoren dan elektra XD.

Bij voorbaat dank,

Groeten, Jan

pvanh

Hallo,

dat lijkt mij geen geen probleem. Met een analoge ingang en een PWM-uitgang lijkt me dit prima te realiseren.
Zijn er specificaties bekend van de toe te passen injector?

Quote
Verder wordt het aantal pulsen en het moment van puls afgeven aangegeven door een externe lichtsluis.


Dit laatste begrijp ik niet helemaal.

Mvg

MAS3

Quote from: JanL

Hallo allemaal,

Verder wordt het aantal pulsen en het moment van puls afgeven aangegeven door een externe lichtsluis.


Ik vermoed dat die lichtsluis een trigger is voor de puls.
Aangezien ze iets willen doen met een injector, vermoed ik dat de uitgaande, in lengte variabele puls op het juiste moment moet komen.
Daar mag niet al teveel variatie inzitten, anders word het optimale moment van inspuiten gemist.
Ongetwijfeld is dit dus een tijdkritische toepassing en is het antwoord op de vraag ervan afhankelijk hoe tijdkritisch het is.
JanL moet dus aangeven hoe veel tijd er minimaal tussen de pulsen mag zitten (bij hoogste toerental dus),  hoe lang een puls mag duren, en hoe veel tijd er minimaal tussen de pulsen moet zitten.
Wellicht is dit niet allemaal noodzakelijk om te weten of het met een Arduino kan, maar wel om het uiteindelijk te maken.
Houd er gelijk rekening mee dat het verwerken ook niet gratis gebeurt.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

robtillaart

belagrijk is op het project in behapbare brokken te verdelen bv

Een eerste stap is een voltmeter te maken met de Arduino,
tweede stap is de 2 voltages herkennen en acties te triggeren
derde stap is de juiste actie te doen
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

JanL

Bedankt voor jullie reacties.

De lichtsluis moet inderdaad de arduino triggeren om een puls af te geven naar de injector. De injector mag naar mijn berekeningen op het hoogste toerental (6000 rpm) maar een vertraging hebben van ongeveer 5 millisecondes. We kunnen hier eventueel rekening mee houden door de lichtsluis een fractie te vroeg te laten triggeren.

De arduino moet dus het signaal erg snel verwerken en dan handelen, en hij moet een vrij sterk signaal af kunnen geven, we weten het nog niet zeker maar vermoedelijk 12V (voor de injector). Ik neem aan dat de arduino niet zo een sterk signaal af kan geven, wat zou een eventuele oplossing zijn voor dat probleem?

robtillaart

de Arduino een transistor (of mosfet)  laten aansturen die 12V aankan, dit wordt ook gebruikt bij bv zwaardere motoren

- http://www.youtube.com/watch?v=TWsv4W8rlIM -
- http://www.taringa.net/posts/hazlo-tu-mismo/16656985/Arduino---motor-de-12v-con-control-de-velocidad.html -
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

MAS3

Quote from: JanL

De injector mag naar mijn berekeningen op het hoogste toerental (6000 rpm) maar een vertraging hebben van ongeveer 5 millisecondes...
De arduino moet dus het signaal erg snel verwerken en dan handelen...


Dat erg snel kan nog wel meevallen.
De Arduino vind 5 milleseconden niet zo erg weinig en heeft een "hartslag" die een factor 3200 hoger ligt.
Dat geeft dus nog wel ruimte om het een en ander te beoordelen en te verwerken.
Je moet nog wel opletten dat ook de externe hardware (die transistor dus) wat tijd nodig heeft en het ligt helemaal aan die hardware en diens belasting hoeveel invloed dat zal hebben.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

JanL

Is het anders mogelijk om het spanningsprobleem op te lossen door de + van een 12V accu op de injector aan te sluiten en dan de massa-verbinding door de arduino te laten regelen? Dus dat de arduino alleen de stroom doorlaat naar de min-pool van de accu wanneer de lichtsluis dit aangeeft en voor een duur die de arduino berekent?

MAS3

Nee, dat gaat niet.
Je zet dan nog steeds die 12 volt op je Arduino en dat moet je dus echt niet doen.
Je denkt natuurlijk dat je alleen de "min" doorlaat, maar als je die "min" niet doorlaat (dus er word niet geïnjecteerd), dan staat de hele 12 volt op die Arduino.
Dat is wat kort door de bocht, maar het toont je wel waarom je dit gewoon niet moet doen.
En dan hebben we het alleen nog maar over spanning gehad, de stroom speelt hier ook een grote rol waarom je zoiets niet moet doen.

Als het nog niet duidelijk was: niet doen !
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

JanL

Wij hebben besloten een mosfet met de arduino aan te sturen en de mosfet de 12V naar de injector te laten sturen. Nu zitten we alleen nog met de aansturing van de mosfet. Er moeten pulsen van een variabele, van tevoren bepaalde tijdsduur naar de mosfet gestuurd worden, en het moment van puls afgeven wordt getriggerd door een lichtsluis. Zou het handig zijn om hier een pwm poort voor te gebruiken? Ik weet namelijk niet of het mogelijk is om het moment van puls afgeven te regelen is bij een pwm poort.

MAS3

Hoi.

PWM staat voor Pulse Width Modulation, Puls Breedte Modulatie.
Daarbij gaat het dus enkel en alleen om de breedte van de puls.
Frequentie speelt daarbij ook geen rol, en daarom kan het bij de verschillende oplossingen voorkomen dat de frequentie varieert als de puls ook varieert (dat ben ik wel eens tegengekomen bij een 555 timertje die voor een PWM moest zorgen).
Voor zover ik meen te weten, is de PWM frequentie van de Arduino wel stabiel, maar kun je wel verschillende frequenties gebruiken (dan worden er verschillende timers in de Arduino aangesproken).
Daarvan kan ik je echter het fijne niet van vertellen.

Je weet ook niet wanneer die puls gemaakt word.
Het zou zomaar kunnen dat een pulsbreedte van 50 % eerst 25 % laag is, dan 50 % hoog en dan weer 25 % laag, als je dat vergelijkt met een interne timer van de Arduino.
Daar kun je dan niets van zeggen, want je hebt dan nog steeds een duty cycle (het percentage dat de puls HOOG is) van 50 %.

Het kan wel zijn dat je een bepaalde uitgang beter kunt gebruiken om een nauwkeuriger puls te krijgen, dat weet ik niet.
Maar er is dan geen relatie met PWM in ieder geval.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

JanL

Bedankt voor je reactie. Aangezien pwm met meerdere pulsen werkt is dit bij nader inzien niet geschikt voor de injector, aangezien deze ook een openingstijd heeft en meerdere zeer korte pulsjes misschien de injector kunnen beschadigen. Hoe zou deze frequentie tot een gekozen frequentie (zoals bijvoorbeeld het aantal pulsen dat de lichtsluis afgeeft, het toerental) gedefinieerd kunnen worden?
Als dit niet mogelijk is, is er dan een mogelijkheid om één puls van variabele lengte af te kunnen geven, en zo ja, met welk command zou ik dit moeten doen?


robtillaart

Quote
Als dit niet mogelijk is, is er dan een mogelijkheid om één puls van variabele lengte af te kunnen geven, en zo ja, met welk command zou ik dit moeten doen?


3 commando's,

digitalWrite(pin, HIGH);
delayMicroseconds(n);  // n = # microsecond -x ( x = time in usec for digitalWrite, think it is about 2)
digitalWrite(pin, LOW);

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Go Up