Sari la conținut
ELFORUM - Forumul electronistilor

Proiect extindere computer bord


DarkAngel_Bv

Postări Recomandate

Semnalele nu seamana intre ele. In schimb tocmai mi-am dat seama ca rpm-ul si consumul il calculez dintr-un singur interrupt.Pentru turatie numar pulsurile high. Daca folosesc semnale de pe toate cele 4 injectoare rpm-ul va fi numarul de pulsuri / 2. Daca folosesc un singur injector rpm-ul este numarul de pulsuri * 2

Link spre comentariu
  • Răspunsuri 41
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • DarkAngel_Bv

    19

  • matache

    10

  • nickrvl

    3

  • stefan_k

    3

Top autori în acest subiect

tocmai mi-am dat seama ca rpm-ul si consumul il calculez dintr-un singur interrupt.

Pentru turatie numar pulsurile high. ... Daca folosesc un singur injector rpm-ul este numarul de pulsuri * 2

Nu trebuie sa numeri pulsurile High. Ai deja toate datele ca sa obtii turatia motorului.

Daca regula de calcul a rotatiei este cea precizata de tine atunci:

 

Turatia = 2*(1s / Ntot*0.5us) = 2*F_timer/Ntot

 

unde pe Ntot (perioada semnalului High + Low masurata in tacti de lungime 0.5us) il ai deja masurat de la debitul Q, F_timer=frecventa tactului timerului=2MHz (0.5us perioada), pentru F_timer poate fi aleasa alta valoare.

Link spre comentariu

este mult prea mare rezolutia de 0.5us pe tact.Avand in vedere ca perioada minima este de 185us, m-ar ajuta si o perioada de 10-20us pe tact.Daca poti sa imi faci un pseudocod cu functiile de interrupt si toate cele mi-ar fi mult mai usor sa inteleg ce vrei sa spui...

Link spre comentariu

este mult prea mare rezolutia de 0.5us pe tact.Avand in vedere ca perioada minima este de 185us, m-ar ajuta si o perioada de 10-20us pe tact.

La o perioada a tactului de 20us, de ex., pierzi restul impartirii lui 185us/20us = 5us. In loc de 185us cit este durata pulsului HIGH de injectie, vei masura 180us. Daca insa pulsul HIGH este 195us tot 180us masori cu pas de 20us, pierzi 15us de data asta. Eroarea poate sa fie mare. 15us eroare la 195us reprezinta 7.7%. 5us eroare la 185us reprezinta 2.8%. Dupa cum vezi, erorile de masura a debitului variaza dupa cit de bine se cuprinde 20us in durata pulsului HIGH. Pentru calcularea pasului optim al tactului este necesar sa se cunoasca:- durata pulsului HIGH minima si perioada sa de repetitie minima si maxima- durata pulsului HIGH maxima si perioada sa de repetitie minima si maxima
Link spre comentariu
  • 3 săptămâni mai târziu...

Am facut un mic programel sa masor pwm-ul, dar nu prea functioneaza cum trebuie in sensul ca la factor de umplere mai mic de 10% sau frecventa sub 26 Hz o ia razna.

Adica cu factor de umplere 15% si 26Hz e ok. Daca scad factorul de umplere sau frecventa se duce naibii calculul :)

In schimb calculeaza aproape corect pana aproape de 1 Khz, ceea ce ar insemna 60.000 rpm (doar nu-i avion :)))

 

Cam asa arata codul, cu prescaler 8 (timer la 1Mhz):

$regfile = "m8def.dat"                                      ' specify the used micro$crystal = 8000000                                          ' used crystal frequency$hwstack = 32                                               ' default use 32 for the hardware stack$swstack = 10                                               'default use 10 for the SW stack$framesize = 40                                             'default use 40 for the frame spaceConfig Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2On Int0 ImpulsconsumEnable Int0Config Int0 = RisingEnable InterruptsConfig Timer0 = Timer , Prescale = 8Config Timer1 = Timer , Prescale = 8Enable Timer0On Ovf0 Impulsconsum2Dim Num As Integer , I As IntegerDim Impulslow As Integer , Impulshi As IntegerDim Width As SingleDim Impuls As BitSet ImpulsStop Timer0Stop Timer1Load Timer0 , 64I = 0Incr IStart Timer0Start Timer1Do Cls Lcd I Width = Impulslow + Impulshi Width = Impulshi / Width Width = Width * 100 Locate 1 , 5 Lcd Fusing(width , "##.##") Locate 2 , 1 Lcd Impulslow ; "   " ; Impulshi Wait 1LoopImpulsconsum:Stop Timer1   If Impuls = 1 Then      Config Int0 = Falling      Impulslow = Timer1      Reset Impuls   Else      Config Int0 = Rising      Impulshi = Timer1      Set Impuls   End If   Load Timer1 , 0Start Timer1ReturnImpulsconsum2:   If Num > 3906 Then         Stop Timer0         Load Timer0 , 64         Incr I         Num = 0         Start Timer0   Else   Incr Num   End IfReturn
Link spre comentariu

Eu as incerca sa schimb ordinea operatiilor din

 Width = Impulslow + Impulshi Width = Impulshi / Width Width = Width * 100
in
 Width = Impulslow + Impulshi Width = (100 * Impulshi) / Width
ca poate micsorezi erorile de rotunjire (care la factor de umplere mic au probabil pondere mai mare).
Link spre comentariu
Vizitator beamrider

BASCOM Elementary Data Types

• Bit (1/8 byte)

• Byte (1 byte)

Bytes are stores as unsigned 8-bit binary numbers ranging in value from 0 to 255.

• Integer (two bytes).

Integers are stored as signed sixteen-bit binary numbers ranging in value from -32,768 to +32,767.

• Word (two bytes).

Words are stored as unsigned sixteen-bit binary numbers ranging in value from 0 to 65535.

• Long (four bytes).

Longs are stored as signed 32-bit binary numbers ranging in value from -2147483648 to 2147483647.

• Single

Singles are stored as signed 32 bit binary numbers.

• String (up to 254 bytes).

Strings are stored as bytes and are terminated with a 0-byte.

A string dimensioned with a length of 10 bytes will occupy 11 bytes.

 

Ai tip gresit de data declarat pentru Impulslow, Impulshi si probabil si altele. Cele doua variabile trebuiau sa fie de alt tip, nu "integer".

De ce spun asta, pentru ca 26 Hz inseamna perioada 38461 us. Factor de umplere 10% echivaleaza cu o lungime a portiunii in zero a semnalului de 34615 us adica peste +32,767 si afara din tipul "integer". (La tine cele doua portiuni ale semnalului: low si high, sunt masurate cu pasul de 1 us)

Link spre comentariu
Vizitator beamrider

Adica cu factor de umplere 15% si 26Hz e ok. Daca scad factorul de umplere sau frecventa se duce naibii calculul

Frecventa de 26 Hz si factor de umplere 15% inseamna ca partea in zero a semnalului periodic tine 32692 tacti de 1 micro sec, numar care este aproape de limita tipului "intreg", 32767. Asta explica de ce odata cu scaderea factorului de umplere sub 15% calculele o iau razna imediat.Chiar daca folosesti variabile de tip "word" cu ceas de 1 MHz, tot vei incepe sa ai rezultate ciudate la frecvente usor mai mici de 1/65535 us = 15 Hz. Un single sau long rezolva problema.
Link spre comentariu

Sa stii ca astfel de calcule nu am facut :) am presupus ca nu umple un integer :)Cand ajung acasa incerc si varianta asta sa vad daca functioneaza corect de data asta :)Totusi, cred ca pana la urma o sa merg pe varianta numararii secundelor scurse si durata impulsurilor HI. In felul acesta stiu cat timp a fost deschis injectorul si pot calcula consumul mediu de la ultima pornire.Totusi, stau si ma gandesc, cum sa calculez consumul in L/100Km pentru mers si L/h pentru stat pe loc intr-un mod cat mai simplu.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări