puls breedte en frequentie instelbaar

Als U een gezamenlijk project wil starten of aan projecten van anderen mee wilt werken.
Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

puls breedte en frequentie instelbaar

Berichtdoor wim2584 » 16 Jul 2015, 21:15

ik ben bezig met het maken van een benzine verbruiksmeter, gebaseerd op pulsen van injector en de snelheidssensor van de motorfiets.

om nu deze (arduine MPGUINO) gebaseerde schakeling te testen wil ik graag met een andere arduindo de signalen van de injector en snelheidsmeter nabootsen zodat ik eea kan testen zonder steeds aan de motor te moeten werken.

stel:
signaal 1:
injector bij een 4 takt bij 4000rpm = 2000 injecties, tijdsduur 10 mS? ==> signaal pulsen 10 mS low en frequentie 33 Hz.

signaal 2:

snelheids meter, 40 pulsen per omwenteling wiel bij 100 km/uur (afhankelijk bandmaat) +- 580 omw/kM ==> 670 Hz puls lengte 2 mS

dus signaal 1: hoog met 10 mS low frequentie 33 Hz
signaal 2: hoog met 1 mS low frequentie 650 Hz

Vraag hoe bouw ik zoiets met arduino uno?, ben een beginneling met programmeren, echter elektronisch/mechanisch en motortechniek handig/deskundig.

groet wim

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: puls breedte en frequentie instelbaar

Berichtdoor nicoverduin » 16 Jul 2015, 21:40

Volgens mij klopt de puls duur niet. Bij 670 Hz heb je een totale puls duur van 1.493 milliseconden. dan kun je geen 2 milliseconden hebben
@edit:
ff een eenvoudig programmatje gemaakt met een puls duur van 10mS bij de 33Hz en 1ms bij de 670Hz). Beide pulsen zijn laag gedurende de 10 resp 1 ms. Programma compileert wel. Is nog niet getest.

cpp code
#include "Arduino.h"
//
// Pin definitions
//
#define PULSE_33 3 // pulse 33 Hz op pin 3
#define PULSE_670 4 // pulse 670 Hz op pin 4

//
// global defines & parameters
//
#define HZ_33_H 20303 // 20303 micro seconden voor de 33 Hz Hoog duur
#define HZ_33_L 10000 // 10000 micro seconden voor de 33 Hz Laag duur
#define HZ_670_H 493 // 493 micro seconden voor de 670 hz Hoog duur
#define HZ_670_L 1000 // 1000 micro seconden voor de 670 hz Laag duur

enum {
laag, // simpele verwijzing naar array indices
hoog
};

enum {
Hz_33, // verwijst naar de 33 Hz waarden
Hz_670 // verwijst naar de 670 Hz waarden
};

//
// global variables
//
uint32_t timer1; // timer voor de 33 Hz
uint32_t timer2; // timer voor de 670 Hz
uint32_t timerWaarden[2][2]; // bevat de tijdsduur voor de puls timers
uint8_t Hz_33_Level; // verwijst naar hoog of laag duur 33 Hz puls
uint8_t Hz_670_Level; // verwijst naar hoog of laag duur 670 Hz Puls

/**
* @name setup()
* initialize the program
*/
void setup()
{
//
// setup IO poorten
//
pinMode(PULSE_33 , OUTPUT);
pinMode(PULSE_670 , OUTPUT);
//
// opzetten array met de timer waarden
//
timerWaarden[Hz_33][laag] = HZ_33_L;
timerWaarden[Hz_33][hoog] = HZ_33_H;
timerWaarden[Hz_670][laag] = HZ_670_L;
timerWaarden[Hz_670][hoog] = HZ_670_H;

Hz_33_Level = hoog;
Hz_670_Level = hoog;
//
// start de timers (we werken met micro seconden voor enige
// nauwkeurigheid)
//
timer1 = micros();
timer2 = micros();
//
// schrijf de waardes naar de pinnen
//
digitalWrite(PULSE_33 , Hz_33_Level);
digitalWrite(PULSE_670 , Hz_670_Level);
}

/**
* @name loop()
* main loop of program and runs endlessly
*/
void loop()
{
uint32_t nu = micros();
//
// test de 33 Hz timer
//
if ((nu - timer1) > timerWaarden[Hz_33][Hz_33_Level]) {
//
// we moeten de polariteit wisselen
//
Hz_33_Level = !Hz_33_Level;
//
// schrijf alvast de output
//
digitalWrite(PULSE_33, Hz_33_Level);
//
// en start de timer voor de volgende switch
//
timer1 = nu + timerWaarden[Hz_33][Hz_33_Level];
}
//
// test de 670 Hz timer
//
if ((nu - timer2) > timerWaarden[Hz_670][Hz_670_Level]) {
//
// we moeten de polariteit wisselen
//
Hz_670_Level = !Hz_670_Level;
//
// schrijf alvast de output
//
digitalWrite(PULSE_670, Hz_670_Level);
//
// en start de timer voor de volgende switch
//
timer1 = nu + timerWaarden[Hz_670][Hz_670_Level];
}
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 88
Geregistreerd: 16 Jul 2015, 21:02

Re: puls breedte en frequentie instelbaar

Berichtdoor wim2584 » 17 Jul 2015, 20:19

Hoi Nico verduin,

bedankt voor het snelle maken/ zenden van deze sketch, heb inmiddels ook wat verder gelezen, het eea zou nu moeten lukken.

de 2 ms had ik later ook gezien :( ,

nogmaals bedankt Wim

Terug naar Gezamenlijke projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 4 gasten