Sari la conținut
ELFORUM - Forumul electronistilor

Computer de bord MOTO+bord electronic!


Cilibiu

Postări Recomandate

Eu cred ca daca faci o intrerupere a unui timer la fiecare 100ms care sa execute functia de calcul de turatie si cea care scrie valoarea pe ecran, ar merge.Ai grija ca intreruperea sa nu fie mai "deasa" decat timpul de care ai tu nevoie sa colectezi date pt calculul turatiei.Cum citesti turatia? Adica... ce encoder ai?

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

Top autori în acest subiect

  • Cilibiu

    115

  • ratza

    19

  • Liviu M

    10

  • stefan_k

    10

Top autori în acest subiect

Imagini postate

Sa inteles acum cea ce vreau? De ce vreau refres la 100ms??? Pai mie imi place "liniaritatea" afisari, de exemplu >>> chiar daca ridic turatie mediu, sa vad pe display ca apare, 100...300....500, (asta sa zicem la 100ms) dar daca pun refresh la 500ms, eu voi vedea valori..... 100........800.....1700....sper ca se intelege ce vreau.

Man, fie faci confuzie între două chestii diferite, fie ceva pute rău de tot în cod. Rata de refresh nu are nicio legătură cu turaţia. Din moment ce o ai deja calculată, poţi s-o afişezi cînd şi de cîte ori vrei, nu are motive să se schimbe.
Link spre comentariu

E problema este ca refresuh este defapt intarzierea creata de Timer 0 , eu pornesc timerele si countari, astept 100ms, citesc datele de pe timeri si counteri, fac calculul dupa care afisez, si asta se intampla la fiecare loop.Nu este nimic rau in cod.Eu nu am cum sa calculez frecventa daca nu am acel "WAIT 100mS" >> While Ovf0 < 6Cod mai jos, explicat.Am facut astazi teste cu acest cod pe vechiul bord, si nu sunt multumit, la relanti turatia afisata de cele mai multe ori este 1200 RPM, dar am variati de la 900RPM pana la 1800RPM, ce vreau sa spun este ca in acest cod de mai jos este setat sa am afisarea din 300RPM in 300RPM adica un refres (inatarziere de citire a impulsurilor primite de la counteri) de 600ms.Sincer sa fiu nu mai stiu ca sa va explic ca sa intelgeti defapt ce este scris in cod.Updateul la display se face dupa ce sa calculat frecventa, ca dupa frecventa urmeaza afisarea.

$crystal = 16000000 doEnable Timer2                       'counterEnable Timer3                       'timer'vitezaTimer2 = 0                                                  'Reset counts  Counter3 = 0                                              'turometru   Ovf0 = 0                                                 'Reset overflows   While Ovf0 < 36                                           '600ms @ 16 MHz asteapta 600ms   nop   Wend   Disable Timer3                           'opreste timer   Disable Timer2                           'opreste counter   Tempa = Ovf1 * 65536                'calculeaza frecventa 1/10HZ   Turatie = Tempa + Counter3         'calculeaza frecventa 1/10HZ       '2   Turatie = Turatie * 100               'calculeaza frecventa in RPMRpm = Str(turatie)                            'stransforma datele WORD in STRINGRpm = Format(rpm , "    0")              'adauga formatul afisariLcdtext Rpm , 50 , 11 , 1 , 0 , 0       'afiseaza pe LCD''''''''''''''''''''''''''''''''''''''''RESTUL PRGRAMULUI''''''''''''''''''''''''''''''''''''LOOP

Eu cred ca daca faci o intrerupere a unui timer la fiecare 100ms care sa execute functia de calcul de turatie si cea care scrie valoarea pe ecran, ar merge.Ai grija ca intreruperea sa nu fie mai "deasa" decat timpul de care ai tu nevoie sa colectezi date pt calculul turatiei.Cum citesti turatia? Adica... ce encoder ai?

O citesc de pe bobina de PICK-UP care este amplasata in motor (engine).
Link spre comentariu

Asta pentru că nu măsori turaţia cum trebuie. La 600ms nu ai cum măsura cu precizie impulsurile de la arbore, mai ales la relanti*. Asta e problema, de fapt. Treci pe ICP.(*ralanti e forma corectă, dar sună prea franţuz).

Link spre comentariu

Nu am lucrat cu ICP sunt nou in asa ceva.

Codul este facut asa, sa vorbim babeste.

Pornesc timerul, in acest timp porneste si counterul, timerul il opresc dupa 1 secunda si vad de cate ori a numarat counterul ( aici aflu cate impusuri am in 1 secunda, adica frecventa in HZ)

Actual mam gandit sa aflu frecventa in 100ms, adica pornesc timerul, pornesc counterul, astept 100ms , opresc timerul si citesc counterul, dupa care il inmultesc cu 10, ca sa aflu frecventa in HZ.

Problema este ca orice frecventa cititia in 100ms, de exemplu 1 inpuls, va rezulta 10HZ, ne putand citi sub virgula gen 0.5 inpulsuri nu am cum sa afisez sub 10hz, daca inmultim 10x60, da 600RPM, deci asta este unitatea minima de afisat. Urmatoare unitate afisata este, 2 inpulsuri in 100ms x10 da 20hz (aici a sarit de la 10 la 20, fara sa am 11,12,13,...18,19) 20x60 da 1200RPM, de aici apare afisarea din 600 in 600 RPM sau din 10 in 10HZ. Eu ca sa afisez corect trebuie sa citesc frecventa in 1 secunda.

In 1 secunda am 1 inpuls citit, adica 1hzx60=60RPM, urmatoarea valoarea este 2hzx60 da 120Hz, de aici am rezolutia din 1hz in 1hz si din 60 RPM in 60 RPM.

Iar acea intarziere care este implementata in citirea counterului afecteaza intarzierea programului DO LOOP, deaici daca am intarziere 1 secunda sa citesc coutnerul coresc, tot loop-ul va afea o inatrziere >1 secunda, cea ce duce la afisarea intarziata a tuturor datelor pe LCD.

 

Daca exista ceva separat, de exemplu cu am functia $ceas, ceasul lucreaza in afara programului DO -LOOP exact cum ar merge in paralel cu el, iar eu afisez ceasul cand si unde vreau fara sa am intarzieri de afisaj sau de calcul a secundelor minutelor.

 

@ratza mersi totusi de sfaturile date, o sa caut pe gogu cum sa folosesc ICP-ul , poate gasesc ceva in codul bascom sa pot intelege exact cum sa folosesc ICP-ul.

 

Din cate imi aduc aminte mai aveam un cod, dar complex de citirea frecventei dar fara sa fie implementata in DO-LOOP, in program aparea DO LOOP dar fara comenzi in aceasta parte de cod.

 

Codul de care zic este mai jos :

$regfile = "m8def.dat"$crystal = 8000000Config Lcdpin = Pin , Rs = Portb.2 , E = Portb.3 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7Config Lcd = 16 * 2Cursor Off NoblinkCls'-----------Config Timer1 = Counter , Edge = RisingDdrd.5 = 0Portd.5 = 1'-------Config Timer0 = Timer , Prescale = 1024'---------------Enable Timer1Enable Timer0Enable Interrupts'---------------------On Ovf1 Pulse_counterOn Ovf0 Displays'-------------------Dim A As Long , B As Byte , I As LongB = 0'----------------------------ClsLocate 1 , 1Lcd "Frequency meter"Locate 2 , 1Lcd "avrprojects.info"Wait 5Cls'-----------------------Start Timer0'------------DoLoopEnd                                                         'end program'--------------Displays:Incr IIf I > 30 ThenStop Timer0ClsHomeA = B * 65536A = A + Counter1Lcd "Frequency:"Locate 2 , 1Lcd A ; " HZ"B = 0I = 0Counter1 = 0Start Timer0End IfReturn'----------------------Pulse_counter:Incr BCounter1 = 0Return
Link spre comentariu

Revin la problema sursei de alimentare cand bordul este in ST/BY.Am gasit integratul MAX638 care spre uimirea mea are o eficienta de 85% indiferent de consumator.Asa ca am facut testul (cu gandul ca patesc ca cu celelealte) rezultatul este uimitor:Consumator un led care la 5V consuma 16.5mALed consumator 82.5mW la 5V 16.5mASursa alimentata la 12V consum 8mA 96mW (cu ledul pus la consumator) iar fara consumator am 100uA consumati.Ce bine ca inca nu facusem PCB-ul (sambata este destinat) ca pot modifica schema si PCB-ul.Voi ce parere aveti despre acest integrat?

Link spre comentariu

Sincer am o idee si cred ca asa voi face.Am cod foarte simplu petru frecventa variabila cu factor de umplere fix 50%.Asa ca iau un ATMEGA care sa aibe 4 timeri si ii fac un cod de multiplicare, insa si aici apare cam aceasi problema cu intarzierea de 1 secunda pentru a citi frecventa corect.Trebuie sa fac ceva simulari sa vad cum se comporta programul, ce pot spune este ca in programul pentru multiplicare nu am mai mult de maxim 20 lini de cod, si cred mai mult ca sigur ca este mult mai precis decat schemele clasice, insa deoacamdata este totul o teorie, ramane sa pun in practica.Am terminat sculele necesare pentru realizaea cablajelor, si astazi vreau sa modific sursele de la far,sa le fac mai ECO, dupa care ma axez doar pe schema bordului si pcb-ul acestuia.Ar mai fi fost o varianta sa pun un encoder arborelui cotit, as cam acea unde sa il pun, dar greu de implementat, este vorba sa il conectez la surubul de unde este prins magnetul de la magnetou, dar trebuie sa il izolez de ulei (in camera de la magnetou am ulei) si greu de prins in locas.Chiar am ramas fara idei, dar scotocesc eu ceva.Oricum revin cu rezolvarea problemei (daca gasesc vreo rezolvare).Va tin la curent cu tot.Cu respect.L.E Hmmm o alta idee care este posibil sa fie cat de cat plauzibila.Sa citesc frecventa care intra in releul de incarcare, am 3 faze si aici stiu ca frecventa este mai mare, daca pun o punte trifazica si fara filtrare am frecventa de la 0-Umax, stiu ca la frecventa de retea 50hz daca pui o punte de diode fara sa o filtrezi cu condesatori, vei avea o frecventa de 100hz, daca o trec prin sistem rezistiv dupa care o filtrez cu un HC14 si bagata intr-un optocuplor cu poarta logica, suna cat de cat plauzibil, insa nu stiu ce frecventa va fi, dar cu sigurata mult mai mare in comparativ cu cea de la bobina de PICK-UP. Si atunci pot inbunatati precizia la 100ms .Ce parere aveti de aceasta idee?

Link spre comentariu

Habar n-am cum e motorul de motocicleta, dar nu ai nicio fulie legata de arbore? Ca daca ai avea pui un senzor hall si ai scapat de orice complicatie. Intelegi ce vreau sa zic? E fiabil si usor de implementat.

Link spre comentariu

Pai bobina de PICK-up face cam aceasi chestie ca senzorul HAL, diferenta este ca pe fulie poti pune mai multi magneti si de aici apare multiplicarea, insa eu nu am nici o fulie, si greu de implementat acest senzor hall, mai ales ca pe magnetou trebuie sa pun mici magneti ca sa fac multiplicarea, insa ce pot spune este ca nu este o idee rea. Acum vrea sa vad ce pot obtine de la alternator.Daca sunt multumit, raman asa, daca nu iau un senzor hal de dimenziuni mai mici si ceva magneti de "ureche" si ii lipesc de magnetoul. Ce este nasol, ca trebuie sa intervin iara in motor, dabia lam vopsit si plus ca garnitura de la capacul de la magnetou nu stiu cat va mai tine de la atea desfaceri (3 ori).

Link spre comentariu

dar daca ai monta, peste discul care da semnal la pick-up coil, o roata dintata si un senzor care sa "citeasca" fiecare dinte? (ceva in genul senzorilor abs de la rotile auto, de dimensiuni adecvate)ai avea o "rezolutie" mai mare/rotatie a motorului, care ar putea usura calculul e mai usor de accesat decat sa scoti capacul ambreiajului, dar mai greu de realizat dpdv mecanic(plus ca nu se stie daca incape sub capac....)

Link spre comentariu

Nu am cum , bobina de PICK-up ia semnal de pe MAGNETOU (asta daca ma refer bine) care este prins de arborele cotit. Pe exteriorul acestuia are un mic magnet sudat.Plus ca nu am loc deloc sa adaug ceva roti dintate, gandestete , eu nu am loc sa bag un encoder rotativ de dimenziuni mici, apai o roata dintata si senzorul de citire HAL.

Link spre comentariu

mda, inseamna ca sistemul constructiv e diferit la mobra mea, intr-un capat al arborelui este fixat un disc metalic cu 2 "pinteni" care da semnal la pick-up coil. aici ma gandeam ca s-ar putea monta ceva...

Link spre comentariu

Eu am asa:In stanga motorului vazut de deasupra rezervorului am sistemul de ambreaj.In dreapta motorului am bobinele de la alternator, magnetoul prins de arborele cotit, bobina de pick-up.Toate asta sunt bagate untr-un spatiu aproape fix.Cu respect.

Link spre comentariu
  • 4 săptămâni mai târziu...

M-am tot gandit cum sa citesc rotatiile pe minut si am luat o hotarare, sa masor frecventa din alternator, asa ca mi-am tocit un pic creerul si a iesit schema de mai jos.Simularea am facuto la o tensiune de 10V P-P 10hz 3 faze, la final de tot am 30hz semnal 0-5V.Alimentarea HC-ului o fac printr-o sursa DC-DC converter separata GALVANIC.Alimentarea Optocuplorului va fi din sursa ce alimenteaa bordul.Cautand pe net informati de alternator am ajuns la concluzia ca ori am 6 bobine , ori 8, stiu ca in niciuncaz nu am 4, lam vazut dar nu imi mai aduc aminte de numarul bobinelor, asta ar insemna ca la o rotatie ar trebui sa am 3hz la 6 bobine iar dupa montaj sa am 9hz, cea este foarte bine decat 1hz la o rotatie cum se gaseste la bobina de PICK-UP.Poate am timp saptamana asta si fac ceva masuratori cu osciloscopul.Pana atunci cer parerea voastra, daca se poate imbunatati schema sau este ok asa cum am creeat-o.Cu respect.

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