Tartalom
- Hogyan adjunk bemenetet az ADC-nek
- DC jel mintavétele
- Mintavétel az AC jelről ADC-vel
- Az ADC tesztelése
- ADC példa kód a dsPic számára
- Az ADC modul konfigurálása
- 1. Állítsa be a portot bemenetként és analóg módban
- 2. Válassza ki az analóg bemeneteket a mintavételhez
- 3. Válassza ki a feszültségreferenciát
- 4. Válassza ki az adatok kimeneti formátumát
- 5. Válassza ki a Konverziós eseményindító forrást
- 6. Válassza ki a Mintavétel módját
- 7. Válassza ki a Konverziós órát
- 8. Döntse el, hogy egyidejű mintavétel szükséges-e vagy sem (opcionális)
- 9. Válassza ki a konverziós óra forrását (opcionális)
- 10. Annak meghatározása, hogy szükséges-e bemenet szkennelés (opcionális)
- Az ADC megszakítása a dspic30f és a dspic33f fájlokban
- Megszakítás alapú kód az ADC-k számára a dspic30f és a dspic33f fájlokban
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:
- Lépjen le a jelről a kívánt feszültségszintre transzformátorok segítségével.
- 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:
- 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.
- 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
- A B portot, amelyen az ADC bemeneti csapok találhatók, be kell állítani bemeneti portként. (21. sor).
- 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 ADCHS lehetséges konfigurációi | Az analóg bemeneti tű konfigurációjának eredménye | Kó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:
- A Vcc és a Gnd beállítható felső és alsó referenciaértékként.
- 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)
VCFG | Vref (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:
FORMA | Adatok 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:
SSRC | Konverzió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ő:
- A SAMP bit manuális beállítása a kódban.
- Automatikusan az utolsó konverzió befejezése után.
Ezt az ADCON1 regiszter ASAM bitje dönti el.
ASAM | Mó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.