Misc

Az ADC-k használata a dspic30f és a dspic33f fájlokban

Szerző: Peter Berry
A Teremtés Dátuma: 15 Július 2021
Frissítés Dátuma: 10 Lehet 2024
Anonim
Az ADC-k használata a dspic30f és a dspic33f fájlokban - Misc
Az ADC-k használata a dspic30f és a dspic33f fájlokban - Misc

Tartalom

A szerző befejezte utolsó évének mérnöki projektjét a dsPic mikrovezérlőkkel, és átfogó betekintést nyert ezekbe az eszközökbe.

A dsPic eszközök nagy teljesítményű ADC (analóg-digitális átalakító) modult kínálnak, amely akár 1 Msps sebességgel képes mintát venni. Különböző módon és módokon használható, hogy megfeleljen a projekt igényeinek.

Ez az oktatóanyag célja az A / D átalakító modulok alapjainak tanítása mindazoknak, akik a dsPics programmal kezdik projektjeiket.

Hogyan adjunk bemenetet az ADC-nek

Az első lépés a szükséges hardver beállítása az ADC számára.

DC jel mintavétele

A kezdeti teszteléshez használhat egy potenciométert, amely egy 5 V-os tápfeszültségre van csatlakoztatva, és közvetlenül adhat bemenetet az ADC analóg csapjaihoz.


Mintavétel az AC jelről ADC-vel

Az AC jel (hálózati feszültség vagy áram) mintavételéhez a következőket kell tennie:

  1. Lépjen le a jelről a kívánt feszültségszintre transzformátorok segítségével.
  2. Növelje a jelet úgy, hogy a nulla alatti negatív értékek felfelé tolódjanak. A képek ADC-k nem képesek negatív jeleket mintavételezni.

Ez a referencia áramkör kialakítása segíthet a szinteltolásos áramkörökben:

Az ADC tesztelése

A szükséges kód és hardver beállítása után módja van annak tesztelésére, hogy az ADC valóban a megfelelő módon mintát vesz-e a kívánt módon, vagy sem. Mivel nem lehet bekukucskálni az MCU belsejébe, hogy megnézze, minden rendben megy-e, kétféleképpen javaslom:

  1. Csatlakoztathat egy hibakeresőt a Pic-hez, mint a fent látható. Hibakeresési módban ellenőrizheti az ADCBUF0 - 10 regiszterek értékét, hogy megnézzék, nincsenek-e betöltve helyesen mintavételezett értékekkel.
  2. Elküldheti az ADCBUF regiszter alapos UART értékeit, és soros monitor segítségével PC-n figyelheti őket.

ADC példa kód a dsPic számára

#include "xc.h" #define 20000000 FCY #define FPWM 3600 #include xc.h> #include stdio.h> #include delay.h> #include libpic30.h> #include dsp.h> #include math.h > _FOSC (CSW_FSCM_OFF & XT_PLL8); // Külső oszcillátor, PLLx8 _FWDT (WDT_OFF); // Watchdog időzítő kikapcsolva _FBORPOR (MCLR_DIS); // A reset int ADCValue letiltása; void init_ADC (void) {TRISB = 0xFFFF; // Beállítás bemeneti portként ADPCFG = 0x0000; // Az összes analóg csap kiválasztása analóg módba ADCHSbits.CH0SA = 1; ADCHSbits.CH0NA = 0; //ADCHSbits.CH123SA = 0; //ADCHSbits.CH123NA = 0; IEC0bits.ADIE = 1; // ADC megszakítás IPC2bit engedélyezése.ADIP = 1; // megszakítás beállítása priorty-6 ADCSSLbits.CSSL0 = 0; // Átugrani az AN0, AN1, AN2 analóg tű ADCSSLbits bemeneti keresését. CSSL1 = 0; ADCSSLbits.CSSL2 = 0; ADCON3bits.SAMC = 0; // Automatikus mintaidő 6TAD // maximális mintaidő ADCON3bits.ADRC = 0; // a rendszeróra ADCON3bits-ből származtatott konverziós óraforrás kiválasztása.ADCS = 9; // konverziós óra kiválasztása 6Tcy ADCON1bits.ADSIDL = 0; // Folytatás mód kiválasztása tétlen módban ADCON1bits.FORM = 1; // Adatkimenet kiválasztása aláírt egész szám formátumban ADCON1bits.SSRC = 0; // A motorvezérlés kiválasztása A PWM intervallum befejezi a mintavételt és megkezdi az ADCON1bits átalakítást.SIMSAM = 0; // CH0, CH1, CH2, CH3 minták egyidejűleg ADCON1bits.ASAM = 0; // A mintavétel kiválasztása közvetlenül az utolsó konverzió befejezése után kezdődik. A SAMP bit automatikusan beállított ADCON1bits.SAMP = 0; // Legalább egy A / D minta / visszatartó erősítő az ADCON2bits mintavételét végzi.VCFG = 0; // Feszültség-referencia konfigurációs bitek ADCON2bits.CSCNA = 0; // A bemeneti vizsgálat letiltása ADCON2bits.CHPS = 0; // konverziós csatorna kiválasztása CH0 ADCON2bits.SMPI = 0; // 1 konverziós minta kiválasztása megszakításonként ADCON2bits.ALTS = 0; // A MUX A bemeneti multiplexer beállításait használja az ADCON2bits.BUFM = 0; // Egy 16 szavas pufferként konfigurált puffer ADCBUF (15 ... 0) ADCON1bits.ADON = 1; // A / D átalakító BE van kapcsolva} void readADC () {//ADCON1bits.SAMP = 1; // megkezdi a mintavételt, az automatikus átalakítás következik // __ delay_ms (100); ADCON1bits.SAMP = 0; // a mintavétel megkezdése, az automatikus konverzió következik míg (! ADCON1bits.DONE); // várja meg az ADCValue = ADCBUF0 konverzió befejezését; // a konverziós eredmény elolvasása} void main (void) {init_ADC (); int adatok; while (1) {readADC (); adatok = ADCValue; }}

Az ADC modul konfigurálása

Az ADC modul inicializálható és konfigurálható a fent megadott kód segítségével. Lépésről-lépésre útmutató következik.


Az 1–7. Lépés elengedhetetlen. 7 után bármelyik vagy mindegyik kihagyható.

1. Állítsa be a portot bemenetként és analóg módban

  1. A B portot, amelyen az ADC bemeneti csapok találhatók, be kell állítani bemeneti portként. (21. sor).
  2. Az ADPCFG regiszternek analóg bemeneti módban kell beállítania. (22. sor).

2. Válassza ki az analóg bemeneteket a mintavételhez

Az analóg bemeneteket egy „ADC csatornához” kell csatlakoztatni a mintavételhez. Általában több analóg bemenet van, mint csatorna; például a dsPic30f4011-nek 09 analóg bemenete van, de csak 04 ADC-csatornája van. Ezért most ki kell választania, melyik analóg bemeneti csatlakozó mely ADC csatornához csatlakozik. Ez az ADCHS regiszter segítségével történik.

  • Itt az AN1 van kiválasztva a 0. csatorna analóg tű bemenetéül (2. sor).
  • A csatornák száma meghatározza a lehetséges egyidejű minták számát.
  • A vezérlő felváltva mintázhat a Mux A és a Mux B között.

Az ADC analóg bemenetek és csatornák különböző kombinációinak kiválasztása a dspic30f eszközökhöz.
(a dspic33f eszközökben több csatorna és bemenet lehet)


Az ADCHS lehetséges konfigurációiAz analóg bemeneti tű konfigurációjának eredményeKódsor

0. csatorna -> Mux A

Bármely AN0 - AN8 anlouge tű kiválasztható, hogy bemenetet adjon a 0 csatornához a Mux A-n keresztül.

ADCHSbits.CH0SA = 1; vagy bármilyen más szám a tűtől függően

1., 2. és 3. csatorna -> Mux A

Az 1. csatorna bemenete AN3, 2. csatorna -> AN4, 3. csatorna -> AN5

ADCHSbits.CH123SA = 1;

0. csatorna -> Mux B

Bármely AN0 - AN8 anlouge tű kiválasztható, hogy bemenetet adjon a 0 csatornához a Mux B-n keresztül

ADCHSbits.CH0SB = 1; vagy bármilyen más szám a tűtől függően

1., 2. és 3. csatorna -> Mux B

Az 1. csatorna bemenete AN3, 2. csatorna -> AN4, 3. csatorna -> AN5

ADCHSbits.CH123SB = 1;

3. Válassza ki a feszültségreferenciát

Az analóg bemenetek bemeneti tartományának megfelelő feszültségreferenciát kell kiválasztani. Ennek két lehetősége van:

  1. A Vcc és a Gnd beállítható felső és alsó referenciaértékként.
  2. Külső referenciafeszültség alkalmazható az AVref csapra.

Ez az ADCON2 regiszterben lévő VCFG bit segítségével történik. (47. sor)

VCFGVref (magasabb)Vref (alsó)

0

AVdd

AVss

1

Külső Vref +

AVss

2

AVdd

Külső Vref -

3

Külső Vref +

Külső Vref -

4. Válassza ki az adatok kimeneti formátumát

Az ADC-n keresztül mintavett adatok kimeneti formátumát szintén megadhatjuk az FORM bit segítségével az ADCON1 regiszterben, az alábbi táblázat szerint:

FORMAAdatok kimeneti formátuma

0

egész szám

1

aláírt egész szám

2

töredékes

3

aláírt töredék

5. Válassza ki a Konverziós eseményindító forrást

Az ADC modulon belüli analóg-digitális átalakítást számos kiváltó forrás indíthatja el, amelyet az ADCON1 regiszter SSRC bitjei határoznak meg a következő táblázat szerint:

SSRCKonverziós kiváltó forrás

0

A SAMP bit manuális törlése befejezi a mintavételt és megkezdi az átalakítást.

1

Aktív átmenet az INT0 tűn befejezi a mintavételt és megkezdi az átalakítást.

2

A 3. időzítő összehasonlítja a mérkőzés végét és a konverziót.

3

A PWM ciklus befejezése befejezi a mintavételt és megkezdi az átalakítást.

7

Belső számláló által kiváltott automatikus konverzió.

6. Válassza ki a Mintavétel módját

Az ADC csatornákon a mintavétel az alábbiak egyikével kezdeményezhető:

  1. A SAMP bit manuális beállítása a kódban.
  2. Automatikusan az utolsó konverzió befejezése után.

Ezt az ADCON1 regiszter ASAM bitje dönti el.

ASAMMód

0

A mintavétel a SAMP bit beállításakor kezdődik

1

A mintavétel közvetlenül az utolsó konverzió vége után kezdődik.

7. Válassza ki a Konverziós órát

Bármely analóg-digitális átalakításhoz A / D modullal 12 óra periódus szükséges. Egyetlen órajel-ciklus időtartama az ADCON3 regiszterben lévő ADCS bitek segítségével konfigurálható. Az ADCS-be helyezett érték hat bites érték. Ezt a következő képletek alapján lehet kiszámítani:

A Tad minimálisan használható értéke 154 nanoszekundum.

8. Döntse el, hogy egyidejű mintavétel szükséges-e vagy sem (opcionális)

Az egyidejű mintavételt az ADCON1 regiszterben lévő SIMSAM bit engedélyezheti. Az egyidejű mintavétel minden bemeneti csatorna mintáját pontosan ugyanabban a pillanatban rögzíti. Ha a szimultán mintavétel le van tiltva, akkor a csatornák egymás után kerülnek mintavételre.

9. Válassza ki a konverziós óra forrását (opcionális)

A legtöbb esetben a konverziós óraforrást úgy választják meg, hogy a rendszer órája legyen, az ADCON3 regiszter ADRC bitjét 0-ra állítva.

10. Annak meghatározása, hogy szükséges-e bemenet szkennelés (opcionális)

  • Ez a lépés a legtöbb alkalmazásban kihagyható.
  • A bemeneti beolvasást az ADCON2 regiszter CSNA bitje engedélyezheti.

Az ADC modul 0. csatornája konfigurálható több analóg bemenet beolvasására. Ez akkor használható, ha több bemeneti forrásról van szó, és nem mindegyik aktív egyszerre.

Az ADC megszakítása a dspic30f és a dspic33f fájlokban

Ahelyett, hogy a readADC () függvényt használná a törzsben az értékek kiolvasására az ADC modulból, megszakítást alkalmaznak ugyanazon funkció végrehajtására a legfejlettebb alkalmazásokban.

A megszakításokkal kapcsolatos további információkért tekintse meg ezt a részletes oktatóanyagot: A megszakítások használata a Pic mikrokontrollerekben

Megszakítás alapú kód az ADC-k számára a dspic30f és a dspic33f fájlokban

#define FCY 30000000 #include xc.h> #include stdio.h> #include delay.h> #include libpic30.h> #include math.h> #include p30F4011.h> _FOSC (CSW_FSCM_OFF & FRC_PLL16); // Fosc = 16x7,5MHz, azaz 30 MIPS _FWDT (WDT_OFF); // Watchdog időzítő kikapcsolva _FBORPOR (MCLR_DIS); void Interrupt_Init (void) {IEC0bits.ADIE = 1; // ADC megszakítás IPC2bitek engedélyezése.ADIP = 6; // megszakítási prioritás beállítása = 6} void __attribute __ ((megszakítás, auto_psv)) _ ADCInterrupt (érvénytelen) {while (! ADCON1bits.DONE); // várjuk meg a konverziós minta elkészítését.Va = ADCBUF0; minta.Vb = ADCBUF1; IFS0bits.ADIF = 0; } int main (void) {// Tegye az RD0-t digitális kimenetekké _TRISD0 = 0; Interrupt_Init (); ADC_Init (); míg (1) {_LATD0 = 1; __delay32 (15000000); _LATD0 = 0; __delay32 (15000000); }}

  • Meg kell választani egy konverziós kiváltó forrást, hogy az ADC megszakítás megfelelően működjön az 5. lépésben leírtak szerint.
  • A mintavételt automatikus módban kell elvégezni. (ASAM bit)
  • Az ADC megszakítás kiváltásának gyakorisága az ADCON2 regiszterben lévő SMPI bitek segítségével szabályozható. (50. sor).

Ez a cikk pontos és a szerző legjobb tudása szerint hű. A tartalom csak tájékoztató vagy szórakoztató célokat szolgál, és nem helyettesíti a személyes vagy üzleti tanácsokat üzleti, pénzügyi, jogi vagy technikai kérdésekben.

Mi Választásunk

Lenyűgöző Hozzászólások

Öt legjobb szellemvadász alkalmazás Android telefonokhoz
Telefonok

Öt legjobb szellemvadász alkalmazás Android telefonokhoz

Paranormáli való ág how-k tették az embereket kívánc ibbá a zellemvadá zokra, életükre, az általuk ha znált e zközökre é az &...
Ingyenes Chroma Key szoftver és hogyan kell használni
Számítógépek

Ingyenes Chroma Key szoftver és hogyan kell használni

Nina digitáli marketing tanác adó Brooklynban, New York-ban található.Ha el akar z távolítani egy zöld hátteret egy videóból, zük éged ...