Fórum témák

» Több friss téma
Fórum » Gyors analóg-digitál átalakítás PIC-kel
Lapozás: OK   1 / 2
(#) balazswo hozzászólása Márc 4, 2008 /
 
Sziasztok!

Bár, találtam néhány hasonló témával foglalkozó topicot, de mégis kicsit másnak éreztem az én problémámat.
Jómagam végzős gépészmérnök hallgató vagyok, így nem igazán vagyok otthon az elektronikában. Diplomamunkámhoz forgácsolás közbeni erőmérést kell végeznem. Ehhez rendelkezésemre áll egy Kistler piezoelektromos, háromkomponensű erőmérő, valamint ezek erősítői. Sajnos, az adatgyűjtés elég nehézkes, mert az erre kialakított gép épp foglalt, így egy olcsó, de gyors megoldást kell találnom. Egy évvel ezelőtt tanultam PIC programozást, konkrétan a 16F877-esen. Onnan tudom, hogy egy ilyen mikrovezérlővel lehet A/D átalakítást csinálni. Az ötletem az volt, hogy egy mikrovezérlő segítségével átalakítom a jelet, amit a számítógép soros portjára küldhetek, a gépbe bemenő jel feldolgozására, rögzítésére pedig írnék egy programot, amiben már ígértek segítséget. A problémám az A/D konverzióval, hogy nem tudom, hogy mennyi ideig tart a mikrovezérlőnek. Sajnos, nehezen igazodtam el a leírásában is. Egy ismerősöm azt mondta, hogy 100ms körüli ez az érték.
Összefoglalva: egy (viszonylag gyors (kb. 1kS/s)) adatgyűjtő egységet szeretnék fabrikálni egy kiszuperált régi P2-es számítógépből. Kérlek, véleményeteket és tapasztalataitokat osszátok meg velem. Kb. 2 hét alatt össze kellene raknom ezt a mérőállomást.
Segítségeteket előre is köszönöm!
Üdv: Balázs
(#) potyo válasza balazswo hozzászólására (») Márc 4, 2008 /
 
Maga a konverzió ideje úgy nagyjából 20us, ehhez hozzájön az akvizíciós idő szintén nagyjából 20us, tehát összesen 40us, ami elvileg kb. 25ks/s sebességet jelent. A soros porton mondjuk 115200bps sebességet feltételezve úgysem tudsz 11500 darab 8 bites mintánál többet átküldeni a gép felé másodpercenként, tehát nem az AD konverter lesz a korlátozó elem.
(#) kobold válasza balazswo hozzászólására (») Márc 4, 2008 /
 
Szerintem a soros port helyett inkább a párhuzamosat használd, régi gépen úgyis van. A PIC úgyis gyorsabb, mint a soros átvitel; a 10 bites eredményt ki tudod írni párhuzamosan, 8 bit mehet közvetlenül az LPT adatvonalaira, a maradék kettő a státuszok közül valamelyikre, és még egy vezetékkel az LPT 10-es lábán (ACK) lefutó éllel megszakítást is tudsz generálni. A PC-n futó progi meg induláskor átteszi az ISR vektorának címét valamelyik rutinjára, és onnantól interrupt-osan le tudod kezelni az összes konverziót.
(#) Topi válasza kobold hozzászólására (») Márc 4, 2008 /
 
PC kártya. ISA és EISA PC-kártya nem egy nagy ördöngősség.
Ott meg aztán rendelkezésre áll az alaplapi busz rendszer, egy pár soros assembly rutin után magasszinten tudod kezelni a kártyát.

Én a PC kártyára szavazok. P2-es alaplapon lesz EISA vagy ISA, és ezzel a megoldással lazán MBittel lehet átküldeni adatot.
2.6/2.4-es linux kernel eisa-bus.c. Mindenféle képpen linuxot javasolnék egy P2-es gépen, ám nem egy pár perces munkáról lévén szó, lehet kiesik a két hetes fejlesztési idő miatt...
(#) Medve válasza balazswo hozzászólására (») Márc 4, 2008 /
 
Hello, én egy hasonló dolgot egy soros AD konverterrel oldottam meg, SPI-vel küldte az LPT portra az adatot. A 8 bites AD-k konverziós ideje 20us alatt van, inkább a PC, vagy inkább a szoftver szabhat határt. Igen egyszerű a program, és a berendezés is. Ha megvan az IC, egy nap alatt elkészülnél vele. Lehet párhuzamos AD-vel is, az bőven tudja az 1ks/sec-et.
(#) balazswo hozzászólása Márc 4, 2008 /
 
Ez nagyon jól hangzik, de amint az elején írtam, én csak gépészmérnök hallgató vagyok és nagyon nem vagyok otthon az elektronikában. Így pl. nem tudom, hogy mit jelent az az SPI vagy LPT. Lenne hozzá egy kis türelmed, hogy elmagyarázd nekem ezeket a dolgokat és megosztanád velem a te kivitelezésedet? Segítségedet előre is köszönöm!
(#) Medve válasza balazswo hozzászólására (») Márc 4, 2008 /
 
Hűha...Dióhéjban, az SPI egy olyan adatátvitel, ahol két madzag van, az egyik az órajel, a másik az adat. (DATA, CLOCK). Az órajelet az olvasó eszköz, itt a PC adja. Az első órajelre az AD kiadja a konvertált érték első bitjét, a másodikra a másodikat stb. Majd kezdődik előlről. Én a TLC548-cal csináltam, de beszéljenek inkább a mellékletek. Nem nagyon feszegettem a nagyobb frekik felé, de az 50Hz képéből meg lehet saccolni, hogy milyen az 1k rajta...ja, ez egy szkóp végülis...az LPT a PC párhuzamos portja
(#) balazswo hozzászólása Márc 4, 2008 /
 
Nagyon szépen köszönöm! Remélem, ezek alapján már sikerül elindulnom, bár így elsőre elég bonyolultnak tűnik a számomra, de talán sikerül összeraknom. Ha valahol megakadnék, számíthatnék a segítségedre továbbra is? Köszi!
(#) Medve válasza balazswo hozzászólására (») Márc 4, 2008 /
 
Persze... addig is ismerkedj az SPI rejtelmeivel, igen egyszerű valójában, csaknem minden ilyen IC adatlapján kirészletezik, hogy hogy is történik az adatátvitel. A másik a párhuzamos port programozása amiben otthon kell lenni, az sem nagy dolog....
(#) balazswo hozzászólása Márc 4, 2008 /
 
Ezzel a módszerrel lehetséges az egyetlen párhuzamos portra rákötni három ilyen jelet is? Nekem ugyanis három jelet kellene mérni egyszerre.
(#) potyo válasza balazswo hozzászólására (») Márc 4, 2008 /
 
Használd a Válasz gombot, akkor jobban áttekinthető marad a téma!
(#) Muri válasza balazswo hozzászólására (») Márc 4, 2008 /
 
PIC18F4550-el rengeteg USB-s oszcilloszkóp projekt van a neten, én egy ilyet építenék a helyedben. Most nem tudok linket adni, de régebben jópárat találtam. Az USB elég gyors, és így az egész lenne max 8 alkatrész, ráadásul nem kell csak 2 adat vezeték a soros porttal szemben.

Az USB-től sokan megijednek, pedig ez a legegyszerűbb, nemutolsósorban látványos: bedugod, és a Windows egyből zenél, stb...

Bár úgy nézem az SPI-os DA fog győzni...
(#) potyo válasza Muri hozzászólására (») Márc 4, 2008 /
 
Idézet:
„Az USB-től sokan megijednek, pedig ez a legegyszerűbb, nemutolsósorban látványos: bedugod, és a Windows egyből zenél, stb...”

Úgy a soros port is egyszerű, ha valaki megcsinálja, és te csak bedugod. De ha valamit változtatni kell, akkor aztán lehet vakarni a kobakot...
(#) Muri válasza potyo hozzászólására (») Márc 4, 2008 /
 
Egyetértek, de mindenképp rá kell szánni időt hogy valami működőt kapjunk, és egy működő progi változtatása még mindig egyszerűbb.
A saját proginak annyi előnye van, hogy minden sorát tudod mért van, mit csinál.
Soros porton keresztül elég gyors az SPI?
(#) potyo válasza Muri hozzászólására (») Márc 4, 2008 /
 
Idézet:
„Soros porton keresztül elég gyors az SPI?”


Az attól függ, mekkora sebességre van szükség. Soros porton inkább az RS232 mellé állnék. Az SPI inkább nagysegességű, de egymáshoz közel levő chipek közötti kommunikációra van kitalálva, nem nagy távolságra.
(#) Medve válasza balazswo hozzászólására (») Márc 5, 2008 / 4
 
Igen, Több AD adat és órajel vonala közösíthető és a kívánt AD-t a chip select lábával választhatjuk ki. Ez, ha csak a párhuzamos port adatkimeneteit nézzük, 7 AD-t jelent. Ám ha a 7 chip kiválasztó kimenetet "multiplexeljük" akkor 128 AD-t is kiválaszthatunk. Egy ilyen esetben azonban célszerűbb egy AD-t alkalmazni és egy kapcsolóval kiválasztani rá a kívánt analóg jelet. Erre a feladatra is vannak analóg multiplexerek.
(#) Muri válasza potyo hozzászólására (») Márc 5, 2008 /
 
Idézet:
„Soros porton keresztül elég gyors az SPI?”


Sikerült óriási hülyeséget írnom. Tehát Medve progijára gondoltam, ami LPT porton keresztül működik, SPI-os DA-val. Ha ez elég gyors, én is erre szavazok.
(#) Medve válasza Muri hozzászólására (») Márc 5, 2008 /
 
Gondolkodhatunk, hogy mennyi az elméleti sebessége egy LPT portnak, anno ISA buszon volt, annak ha jól emlékszem 14MHz-volt az órajele, Ezt szerintem meg sem közelítette az LPT port, s kompatibilitási okokból ma sem lehet gyorsabb. De legjobb, ha lemérjük.
OUT 888,1: OUT 888,0: GOTO vissza (ha BASIC van)
és frekimérőt rá. Ezen sokat rontunk még a szoftverrel...
(#) kobold válasza Medve hozzászólására (») Márc 5, 2008 /
 
Nekem úgy rémlik, de lehet, rosszul, hogy az ISA esetében 1.3 MHz körül volt a busz sebessége, egy olvasás egy ciklus, azaz kicsivel kevesebb, mint 1 usec alatt megtörtént. 4 ciklust olvastam WIN alól egy byte kiküldésére (Busy ellenőriz, adat ki, Strobe le, Strobe föl), persze itt nem printerről lesz szó, így csak az "adat ki" egy ciklusa marad kiíráshoz is, ez azért nem rossz.
Korábban javasoltam a PIC-LPT összekötést, és az interrupt-os feldolgozást; ezt épp azért mondtam, mert elég rövid már a hátralévő idő, a kérdező dolgozott már PIC-kel, és ha fel tudja konfigurálni az AD-t, meg kiküldeni az adatokat két byte-ban, akkor semmit nem kell hozzátanulnia, a PC-s progi meg két hívással (getvect, setvect) magához rendeli az interrupt-ot, és lehet olvasni azzal a sebességgel, amit a PIC a konverzióval bír. Legalábbis ha nekem volna hátra másfél hetem, és valószínűleg egyebet is kellene még tanulni közben, aligha állnék neki egy idegen protokollt megismerni.
(#) Zsolti1980 hozzászólása Feb 26, 2009 /
 
Sziasztok!

A következő problémám van.
PIC16F819-es mikrovezérlővel szeretnék 2 analóg bemeneten feszültséget mérni.
Kiválasztom az AN0-át, tökéletesen dolgozik, de ha a programban átváltok AN1-re, rossz értéket konvertál. Egész pontosan ha AN1 van kiválasztva, tehát annak az értékére vagyok kíváncsi, az eredmény függ attól, hogy mekkora jelet rakok AN0-ra .
Beillesztem a kis prg. részletet, hátha valami regisztert elfelejtek átállitani.
Belső 4M-ás oszcillátorát használom, f/32-es osztóval.
Konvertálás után leállítom a konvertálást, átállítom az analóg bemenetet, és újra engedélyezem a konverziót, és nem megy.

ANALOG.doc
    
(#) icserny válasza Zsolti1980 hozzászólására (») Feb 26, 2009 /
 
Ez az ADC kezelés így ránézésre elég siralmas. Hazsnol volna, ha néznál hozzá valami mintaéldát, pl. a PICkit2 Starter Kit letölthető demóprogramjait. (az első körben ne zabvarjon, hogy azt 16F690-re írták, attól még lehet belőle okulni).

1. Az ADC-t fölösleges ki/bekapcsolgatni. Elég egyszer...
2. Az ADC bekonfigurálása után nem szabad azonnal konverziót indítani. Kell egy kis várakozás. Hasonlóan csatornaváltás után is.
3. A Fosc/32 választása sem szerencsés. Az adott frekvenciához tartozó javasolt minimális (idő) értéket kell venni, ha jól látom, neked Fosc/8 a javasolt.

Fentiek mind befolyásolják a mérés pontosságát.

Nem részletezted, de az sem közömbös, hogy mekkora a mérendő feszülség forrásának az impedanciája. Az adatlap előírja, hogy max. mennyi lehet (PIC16-nál általában 10 kOhm, PIC18-nál általában 2 kOhm). Esetedben az első csatorna feszültsége azért befolyásolta a második csatorna mért értékét, mert nem hagytál rá lehetőséget, hogy a mintavevő kondenzátora beálljon az új értékre.

Mellesleg áttekinthetőbbé tenné a programodat, ha a bitenkénti állítgatás helyett a regiszterek beírásához a
  1. MOVLW adat
  2.      MOVWF regiszter

utasításokat használnád (bár ez a mérés pontosságára nincs kihatással).
(#) Zsolti1980 válasza icserny hozzászólására (») Feb 27, 2009 /
 
Előszőr is köszönöm szépen a gyors választ és a segítséget.
Maga az ADC kezelés nem tudom miért siralmas, csak a legkevesebb sort szúrtam bele, hogy minél egyszerübb legyen kiszürni a problémát.

1. Az ADC-t előszőr én is próbáltam, hogy csak egyszer kapcsolom be, de végső elkeseredésemben kipróbáltam, hátha úgy működni fog....
2. Próbáltam én is kis szünetet a csatornaváltás után, konkrétan 1 db. NOP-ot, de nem volt jó, viszont tanácsodra kipróbáltam több idő,t 50 NOP-ot , és láss csodát tökéletesen működik -> KÖSZÖNÖM
3.Az adatlap alapján azért választottam az f/32-t, mert én úgy értelmezem, hogy minél kisebb frekivel dolgozik, az AD konverter, azaz, annál több időt hagyunk neki, annál pontosabb lesz. Ez fordítva van? Vagy én értelmezem rosszul? Amugy kipróbáltam, f/32 és f/8 esetén is, és még 4 db. NOP-nál hibás, 5-nél már tökéletes

A bemeneti impedancia kérdésében már vannak gondjaim. Jól értelmezem akkor, hogy a mikrovezérlő bemenete és a test pont között maximálisan 10kohm impedania lehet, azaz 11 kohm már nem jo oda?

Amugy 150V-os jel feszültségének mérésére szeretném használni, ezért egy ellenállásosztó van elétéve, melynek felső tagja 56kohm, alsó meg 1,8kohm. Így jó?
(#) icserny válasza Zsolti1980 hozzászólására (») Feb 27, 2009 /
 
Idézet:
„Maga az ADC kezelés nem tudom miért siralmas”

Szerintem pont ezt mondtam el pontokba szedve.

Idézet:
„én úgy értelmezem, hogy minél kisebb frekivel dolgozik, az AD konverter, azaz, annál több időt hagyunk neki, annál pontosabb lesz.”

Korábban én is így gondoltam, de a PIC adatlapja szerintem az ellenkezőjét állítja. Netán az lehet a dologban, hogy a mintavevő kondenzátor kisül?

A tegnap ajánlott mintapéldában 5 us várakozási időt emlegetnek - ez összecseng a tapasztalataiddal.

Az osztó alsó tagjával párhuzamosan tegyél be egy kondenzátort! Ez esetben (szerintem) lehet "puhább" is az osztó. Gondolom, a túlfeszültség védelemről is gondoskodsz valahogy...

(#) potyo válasza Zsolti1980 hozzászólására (») Feb 27, 2009 /
 
Idézet:
„3.Az adatlap alapján azért választottam az f/32-t, mert én úgy értelmezem, hogy minél kisebb frekivel dolgozik, az AD konverter, azaz, annál több időt hagyunk neki, annál pontosabb lesz. Ez fordítva van? Vagy én értelmezem rosszul?”


A túl alacsony frekvencia sem jó. Valahol az Electrical specifications részben részletezve van, hogy mennyi a minimális és a maximális frekvencia (periódusidő), aminél garantálják a pontosságot.

Idézet:
„Jól értelmezem akkor, hogy a mikrovezérlő bemenete és a test pont között maximálisan 10kohm impedania lehet, azaz 11 kohm már nem jo oda?”


Nem a mikrovezérlő bemenete és a test pont között, hanem az, hogy a bemenet amekkora impedanciával látja a jelforrást. Tehát a forrást át kell alakítani ekvivalens thevenen generátorrá, és az ekvivalens generátor belső impedanciája az, ami nem lehet több 10kohm-nál (18F-nél 2kohm, de ezt szintén az adatlapból kell megnézni pontosan).

Idézet:
„Amugy 150V-os jel feszültségének mérésére szeretném használni, ezért egy ellenállásosztó van elétéve, melynek felső tagja 56kohm, alsó meg 1,8kohm. Így jó?”


Jó. A bemenő impedancia ebben az esetben az 56kohm és az 1,8kohm párhuzamos kapcsolásából ered, ami 1,75kohm. A 150V maximális érték, igaz?
(#) potyo válasza icserny hozzászólására (») Feb 27, 2009 /
 
Idézet:
„Netán az lehet a dologban, hogy a mintavevő kondenzátor kisül?”


Igen, pontosan amiatt. A konverzió ideje alatt a mintavevő kondenzátorhoz hasonlítja az előállított feszültséget. Ha viszont a kondenzátoron a feszültség elmászik, akkor az megborítja az egész ADC működését.
(#) Zsolti1980 válasza potyo hozzászólására (») Márc 5, 2009 /
 
Közben próbálom kicsit finomítani az elképzeléseimet. Igen, a maximális feszültség a 150V. Alaposabban tanulmányoztam a PIC adatlapját, és melepetésre max. impedancia ennél a típusnál max. 2,5kohm, de így is átírtam az osztót a kisebb disszipáció miatt 2,4k és 75 k értékre, és tanácsaitokra f/8-ra a konverziós frekit.
Icserny javaslatára (abszolut logikus) beteszek egy kis kerámia kondit az osztó alsó tagjához..
Én 1nF-ra gondoltam akkor a 2.4k-val párhuzamosan. Mi a véleményetek erről? Nem fogja megborítani, egyáltalán az érték jó ötlet-e, ill az analóg konverziót a kondenzátor nem fogja megzavarni?
(#) icserny válasza Zsolti1980 hozzászólására (») Márc 5, 2009 /
 
Idézet:
„Mi a véleményetek erről?”

Nekem még nincs véleményem, hiszen nem árultad el, hogy mennyire gyorsan változik a jel, és milyen gyakorisággal fogsz mérni? Ezekkel kellene összevetni az RC tag (az osztó felső tagja számít) időállandóját - ami most 75 us, ha jól számolom.
Idézet:

az analóg konverziót a kondenzátor nem fogja megzavarni?”

A KONVERZIÓT semmiképp, mert olyankor az ADC leválasztja magát a bemenetről.
(#) Zsolti1980 válasza icserny hozzászólására (») Márc 5, 2009 /
 
Ez egy akksisor feszültségét fogja mérni, tehát ahogy merülnek az akkumulátorok, úgy változik a jel.
A mintavételezés frekvenciája nem fontos, kb fél mp-enként mérek rá mind a kettő bemenetre.
Csak azt nem értem, ha leválasztja magát ea bemenetről, ami tulajdonképpen érhető, akkor miért lényeges az osztó impedanciája. És ha kondit berakok az ugyanugy megváltoztatja az impedanciáját.
Kérdés egyáltalán érdemes berakni?
Én amiatt gondolkodtam el, hogy a bekapcsolási tranzit alkalmával nehogy 5V-nál nagyobb feszültség kerüljön a bemenetre.
(#) potyo válasza Zsolti1980 hozzászólására (») Márc 5, 2009 /
 
A felső ellenállás és a belső védődióda megvédi a PIC-et a tranzienstől, attól nem kell félni. Az osztó impedanciája azért lényeges, hogy ha nagy sebességgel akarunk mérni, akkor ne tartson sokáig, amíg a csatornaválasztás után a belső mintavevő kondnzátor feltöltődik (RC időállandó). Igazából a külső kondenzátor nem annyira lényeges jelen esetben, de én tennék 100nF-ot. Ha fél másodpercenként mérnél rá, akkor szerintem érdemes lenne így felépíteni a programot:
1. csatorna konverziójának indítása
1. csatorna eredmény olvasása, 2. csatorna kiválasztása
2. csatorna konverziójának indítása
2. csatorna eredmény olvasása, 1. csatorna kiválasztása.
1. csatorna konverziójának indítása
...

Minden sor között eltelhet kb. nyolcad másodperc, amit célszerűen timerrel állítunk be.
(#) icserny válasza Zsolti1980 hozzászólására (») Márc 5, 2009 /
 
Idézet:
„miért lényeges az osztó impedanciája.”

Azért, mert a konverzió előtt van még egy kényes művelet: a mintavételezés. Ennek során (múltkor azt írtad, hogy 5 us-ot hagytál rá) a mintavevő áramkörben levő kondenzátornak fel kell töltődnie a mérendő feszültségre.

Idézet:
„És ha kondit berakok az ugyanugy megváltoztatja az impedanciáját.”

Ez csak a javára válik. Mivel gyakorlatilag DC-t mérsz, nyugodtan odarakhatsz 10 µF-ot is. A zajra jótékony hatású, az impedanciára is, a mérésedet pedig nem fogja zavarni.

Mellesleg a PIC bemenetére köthetsz precíziós feszültségreferenciát is, s akkor pontosabban mérsz, mintha csak a tápfeszhez viszonyítva mér az ADC.
Következő: »»   1 / 2
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem