Jump to content
tyc

Sincronizator cu ATmega 328

Recommended Posts

Sincronizatorul in discutie va fi un dispozitiv cu ajutorul caruia se sincronizeaza carburatoarele la motoarele termice .

Colecteaza presiunea negativa de la baza carburatorului si o afiseaza pe un lcd dot matrix (sau grafic) sub forma de bar graph .

Senzorii de presiune pe care o sa-i folosesc sunt 2SMPP-03 ( http://www.mouser.com/pdfdocs/2SMPP_1112.pdf ) . Acestia se conecteaza la ATmega 328 (aflat pe o platforma arduino ) ,iar rezultatul masuratorii se afiseaza pe un lcd dot matrix ,pe un rand bar graph .

Problema e ca nu stiu sa scriu programul pt RISC .

Este cineva dispus sa ma ajute?

Share this post


Link to post
Share on other sites

Senzorii respectivi de presiune se interfateaza cu un microcontroler Atmel folosind un amplificator operational.

Amplificatorul operational este necesar ca sa amplifice semnalul dat de senzor la un nivel potrivit pe intrarea ADC a microcontrolerului. Amplificarea este necesara deoarece imbunatateste rezolutia de citire a presiunii.

Daca doriti, va pot ajuta cu un program simplu, scris in mikroC, ca sa faca ceea ce spuneti mai sus. Totusi, rezultatul doriti sa fie afisat pe un LCD 1x16 sau 2x16, valoric sau sub o alta forma ?

Si care este domeniul de presiune pe care doriti sa-l masurati ?

Share this post


Link to post
Share on other sites

Un lcd 4x20 deoarece citeste 4 valori simultan ,de la cele 4 carburatoare.

Interpretarea rezultatalor se face de operatorul uman iar pt aceasta e nevoie de un turometru cu rezolutie de 10rpm . Programe pt turometre cu 328 am vazut pe net si banuiesc ca nu e dificil de compilat cele doua softuri...deocamdata pt mine e imposibil adica f putin probabila .

Valoarea exacta nu e publicata nicaieri (si nici nu o cunosc) dar am auzit ceva de -34kPa .

Valoarea depresiunii nu intereseaza , se cere obtinerea uneia cat mai mica cu putinta si acelasi nivel in toate galeriile .

Share this post


Link to post
Share on other sites

Deci va fi nevoie de 4 canale ADC numai pentru cele 4 carburatoare + un canal ADC pentru turometru. Ce tip de turometru va ganditi sa folositi ?

 

Un 34kPa inseamna pe iesirea traductorului de presiune aprox. 25mV. Aceasta valoare va trebui amplificata pe la 2,5V sau 500mV cu ajutorul unui amplificator operational de genul LM321.

 

Aplicatia doriti sa fie facuta strict cu Atmega328 ? Va intreb lucrul asta deoarece, pot sa fac cateva teste doar pe un Atmega168, care este din aceeasi familie MCU dar cu memorie flash mai mica ca la 328.

 

Patru valori simultan se pot afisa si pe un LCD 2x16 ( 2 valori in partea dreapta, pe randuri diferite, si doua valori in partea stanga, la fel, pe doua randuri diferite). Deoarece nu detin un LCD 4x20, testul soft-ului il pot face pe un LCD2x16, asa cum v-am spus adineaori.

Share this post


Link to post
Share on other sites

Ma gandesc la un turometru care preia semnalul de tact prin sesizarea delta p ;avand in vedere ca fiecare cilindru e cu galeria si carburator propriu ,cand pistonul coboara presiunea in galerie scade iar cand supapa de admisie se inchide apar turbulente datorita inertiei coloanei de amestec carburant ceea ce duce la modificarea brusca a presiunii . La sincronizatorul clasic se folosesc diuze calibrate si vaccumetre cu glicerina/coloana de mercur .

ATmega 328 folosesc ;de ce?pt ca am o placa Arduino Uno care e echipata cu asa ceva . Tot un 2x16 am http://www.ebay.com/itm/1602-LCD-Board-Module-Keypad-Shield-Backlight-For-Arduino-/310704439984 , pe intarile analogice sunt legate butoanele .

Din pacate acest afisor nu este suficient ,valoriile trebuie integrate virtual in timp si comparate iar pt aceasta e necesar ca toate randurile sa fie paralele .

Amplificarea semnalului am ignorat-o din urmatorul considerent :

-daca se poate prelucra un semnal de 40mV ,ce sens mai are sa-l amplific?

Share this post


Link to post
Share on other sites

Un semnal de 40mV trebuie amplificat pentru a obtine o rezolutie mai buna de citire a semnalului de catre canalul ADC a MCU. Mai exact, referinta ADC a unui MCU Atmel se poate seta: 1.1V sau AVCC, unde AVCC trebuie sa fie aproximativ tensiunea de alimentare a microcontrolerului. Apoi, din datasheet-ul MCU, stiind ca un canal ADC este 10bit, asta inseamna 1023 de nivele de discretizare. Adica valoarea referintei ADC se imparte la numarul nivelelor de discretizare pentru a obtine cea mai mica tensiune citita de ADC. Spre exemplu, la o referinta (cea mai mica) de 1,1V, cel mai mic nivel de discretizare va fi: 1,1/1023 = 1mV. In datasheet spune ca acuratetea ADC este +/-2LSB, ceea se traduce prin faptul ca, din cei 10bit ADC, ne putem baza 100% doar pe 8bit ADC, iar 8 bit inseamna 2^8 = 256. Daca ne intoarcem la calculul anterior: 1,1/256=4,29mV. Acum, limita maxima data de senzorul de presiune este aprox.40mV. Daca facem o impartire simpla:

40mV /4,29mV,

rezulta aprox. 10 nivele de valori (de presiune) pe care le poate citi ADC-ul MCU corect. Credeti ca sunt suficiente in cazul dvs. ?

Share this post


Link to post
Share on other sites

Cum spuneam , mai am multe de aflat despre AVR-uri .

Atunci ,folosind LM324 realizez un amplificator de instrumentatie si generatorul de curent (idem http://www.mouser.com/pdfdocs/2SMPP_1112.pdf , p.40) dimensionat pt 1...4V . Un amplificator diferential cred ca nu face fata zgomotelor de la locul de masura - campuri EMI datorita descarcarilor , oricum am prevazut ceva ecran tip China (o folie de staniol ) .

La urma urmei este un aparat de masura ,afisarea rezultatelor in unitati internationale e optionala deoarece se urmareste compararea a doua (sau mai multe) marimi . Un caracter din lcd e format din 5x8 puncte iar afisarea se face pe 75 coloane din 80 ,primele 5 (primul caracter) sunt pt afisarea numarului canalului - asta pt un rand .

Share this post


Link to post
Share on other sites

Nici un "atunci" si nici un "LM324". Nu se poate folosi orice tip de amplificator operational. Daca erati atent (sau ceva mai atent), mai sus am exemplificat un LM321, care este special conceput sa functioneze bine la 5V. Si inca un aspect - foarte rar spus pe forumurile de profil tehnic - este faptul ca amplificatorul operational trebuie sa aiba o variatie cat mai liniara a amplificarii pentru un calcul cat mai precis software. Apoi, chiar canalul ADC a microcontrolerului, partea hardware ma refer, are propriile lui neliniaritati (care se pot compensa software); neliniaritati care difera de la un exemplar MCU la altul, chiar daca sunt acelasi tip (sau model). Deci, sunt mult mai multe aspecte de care trebuie sa tineti cont.

 

Referitor la aplicatia pe care doriti sa o construiti - per asamblu vorbind - trebuie sa lasati acel montaj Arduino si sa va orientati catre un produs finit, tot cu MCU Atmel, dar cu propriul PCB dedicat aplicatiei si cu interfata de programare (ISP). Cand doriti sa masurati semnale de valori asa mici (max. cativa zeci de mV) montajul si chiar PCB-ul trebuie foarte atent lucrat. Spre exemplu, o sursa de alimentare cu zgomot de +/-5mV va strica cel mai optimist scenariu pe care l-am spus in mesajul anterior.

 

Si inca ceva: Arduino este pentru incepatori, contine un bootloader care ocupa semnificativ din memoria MCU si veti vedea, pe masura ce veti capata experienta, ca veti avea nevoie de ultimul strop din memoria flash ca sa dezvoltati un software cat mai compact si cu un MCU cat mai ieftin. Din aceste motive, in cazul dvs. alegerea din start a unui platforme gen Arduino nu reprezinta alegerea potrivita.

 

In ceea ce priveste afisarea pe ecranul LCD, ati intrat in niste detalii fara rost. Comanda de scriere a caracterelor este una simpla, pentru ca de partea de reprezentare grafica se ocupa programul scris in MCU-ul LCD-ului, care este cu totul altceva, nu are treaba in mod direct cu programul scris in memoria flash a microcontrolerului Atmel. Si ca sa intelegeti mai bine ceea ce am spus, imaginati-va ca dvs. reprezentati programul pe care urmeaza sa-l scrieti in microcontrolerul Atmel, iar un alt coleg va scrie pe o tabla ("ecran LCD") ceea ce spuneti dvs. Pe dvs. nu va intereseaza cum va scrie caracterele colegul pe tabla, e important sa-i specificati numai pozitia si/sau randul, respectiv forma caracterului, pe care sa-l scrie. Asta va face si programul scris in memoria flash a MCU.

 

In fine, ca sa nu lungim prea mult discutia, incercati sa treceti pe hartie o schema bloc cu montajul pe care doriti sa-l construiti. Pe parcursul acestui topic, eu si poate, si ceilalti utilizatori, vom modela acea schema bloc, urmand sa o aducem la o forma (prototip) pe care va trebui sa o testati. Bineinteles ca se pot concepe si cateva versiuni software dar daca tineti mortis sa folositi acel LCD4x20, atunci nu va mai ramane altceva de facut, decat sa testati diversele versiuni software care se vor prezenta. In acelasi timp, va trebui sa acumulati experienta ca sa dezvoltati propriile versiuni software iar lucrul asta nu se face de pe azi pe maine, deci, subiectul de fata, daca nu il veti abandona, va avea nevoie de mult mult timp ca sa ajunga la maturitate si sa va ofera asazisa solutie finala.

Share this post


Link to post
Share on other sites

LCD-ul este un model ales la intamplare ,tot asa de bine poate fi si grafic ... daca vreau sa fac ceva trebuie sa aleg ce dispozitive folosesc .

Am sa preiau diagrama de la un Vu-metru si sa vad ce iese .

Share this post


Link to post
Share on other sites

Bineinteles ca va trebui sa alegeti ce dispozitive (componente electronice) va trebui sa folositi. Din acest motiv v-am spus mai sus sa postati o schema bloc, pentru ca dupa aceea va urma exact si solutiile tehnice (practice), implicit dispozitivele care vor putea fi folosite.

Totusi, solutia nu o veti afla azi sau maine, are nevoie de timp si de disponibilitatea mea si a altor utilizatori de a va prezenta diverse solutii software.

Dar, daca nu veniti cu schema bloc completa si corecta (inclusiv finala), toata discutia, fara partea teoretica, va fi in van.

Share this post


Link to post
Share on other sites

Am atasat sch bloc iar functiile care le indeplineste sunt:

1)-masoara vaccumul pe 4 canale simultan si afiseaza rezultatul pe un lcd -1 ecran

2)-masoara turatia preluind semnalul din dp- al doilea ecran

-voltmetru - tot pe 2.

Selectarea functiilor - din S1 .

 

sch bloc 1 canal.pdf

 

De pe arduino am sa recuperez piesele ,de pe arduino nano http://arduino.cc/en/Main/arduinoBoardNano - tocmai ce am cumparat 3 buc :la 2,58$ ,2,60$ ,2,62$ dar sunt variante fara usb (FT232) si cu stabilizatoare de cacao .Acelea le las pe loc .

Share this post


Link to post
Share on other sites

Cate un amplificator de instrumentatie ar trebui pe fiecare din cele 4 canale pentru ca spuneati ca sunt 4 carburatoare?! Aici ar trebui facute cateva teste cu diverse amplificatoare operationale ca sa vedeti care este cel mai liniar in amplificare. Avand in vedere faptul ca intrarea va fi de maxim 40mV si considerand o referinta ADC de calitate (care se poate construi si cu un banal TL431) de cca. 5Vcc, atunci castigul amplificatorului operational ar trebui sa fie 125. Tot in acest caz ar trebui sa faceti niste teste ca sa vedeti in ce domeniul de variatie a castigului (amplificarii) unui A.O., castigul este constant. In functie de asta se va alege si valoarea exacta a referintei ADC a MCU.

Asta ar fi un prim aspect care va trebui lamurit.

 

In al doilea rand, ce cauta acel +12V sincro/volt pe intrarea montajului cu Atmega328 ? Acolo e indicat sa fie un nivel de tensiune continua care, chiar daca atinge 12V, se poate ajusta la o valoare cel mult egala cu referinta ADC folosind un banal divizor rezistiv. In acest caz va recomand sa prezentati un grafic sau tabel cu variatia turatiei cu tensiunea de iesire a turometrului.

 

Ce anume va masura voltmetru pe canalul ADC 2 ?

Ce functii va seta S1 ? Va ganditi cumva sa folositi S1 pentru a vedea pe ecranul LCD diverse masuratori ? Si daca da, care sunt alea ?

Share this post


Link to post
Share on other sites

Pe 12V va masura tensiunea pe functia de voltmetru .Printr-un divizor rezistiv ,binenteles.

4 canale - 4 amplificatoare ;motivul pt care am 'strambat din nas' la la 321 (16 buc?) si folosesc MCP6404 https://cdn-reichelt...CP6401-2-4.pdf.

Da ,S1 are functia de comutatot de game (ecrane) . Afiseaza 1) vaccum (grafic)sau 2)turatia si voltmetru(cifric) -turatia cu rezolutie de 10rpm si tensiunea cu rezolutie de 10^-1.

Edited by tyc

Share this post


Link to post
Share on other sites

Nu e o idee rea acel MCP6404.

Acum incercati sa trasati intr-un program pentru desenat scheme electronice (ex. EAGLE) toata schema (completa). Dupa aceea, postati fisierul original in EAGLE si daca va fi cazul, voi face modificarile sau completarile necesare.

Cand ati spus 12V este tensiunea maxima masurata pe functia de voltmetru ?

Share this post


Link to post
Share on other sites

Eagle-ul meu nu mai vrea sa importe ,pe seara am promisiuni de unul mai bun.

12V e tensiunea pe bornele bateriei ,atunci cand aceasta e incarcata 0% . Cand e supusa incarcari ,tensiunea creste pana la 14,4V .Cand releul de incarcare e defect ,tensiunea la borne poate fi : 10...11V sau are tensiunea de incarcare numai in turatii sau 17...18V .

Tensiunea limita de descarcare a bateriei cu Pb e 7,5V ,sub aceasta apar deteriorari nereversibile .

Gama de masura a voltmetruluie de la Uref (1,23V / LM285-1.2 http://www.ti.com/lit/ds/slvs075i/slvs075i.pdf ) pana la 20V cu indicator de OVP (pe LCD) . Tensiunile masurate uzual vor fi de 12 ... 15V ;

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

We use cookies and related technologies to improve your experience on this website to give you personalized content and ads, and to analyze the traffic and audience of your website. Before continuing to browse www.tehnium-azi.ro, please agree to: Terms of Use.