שונה

כיצד להשתמש ב- ADC ב- dspic30f ו- dspic33f

מְחַבֵּר: Peter Berry
תאריך הבריאה: 15 יולי 2021
תאריך עדכון: 10 מאי 2024
Anonim
כיצד להשתמש ב- ADC ב- dspic30f ו- dspic33f - שונה
כיצד להשתמש ב- ADC ב- dspic30f ו- dspic33f - שונה

תוֹכֶן

המחבר השלים את פרויקט ההנדסה האחרון שלו עם מיקרו-בקרי dsPic, וקיבל תובנה רחבה במכשירים אלה.

מכשירי ה- dsPic מציעים מודול ADC חזק (ממיר אנלוגי לדיגיטלי) שיכול לדגום במהירות של עד 1 Msps. ניתן להשתמש בו במגוון דרכים ומצבים שונים כדי להתאים לצרכי הפרויקט שלך.

הדרכה זו נועדה ללמד את היסודות של מודולי המרה A / D לכל מי שמתחיל את הפרויקטים שלהם עם dsPics.

כיצד לתת קלט ל- ADC

השלב הראשון הוא הגדרת החומרה הנדרשת בכדי לתת קלט ל- ADC.

דגימת אות DC

לבדיקה ראשונית, תוכלו להשתמש בפוטנציומטר המחובר על פני אספקת 5 וולט ולתת קלט לסיכות האנלוגיות של ADC ישירות.


דגימת אות AC עם ADC

כדי לדגום אות AC (מתח קו או זרמים), יהיה עליכם:

  1. הורידו את האות לרמת המתח הנדרשת בעזרת שנאים.
  2. העבר את האות ברמה כך שהערכים השליליים מתחת לאפס יועברו כלפי מעלה. ה- ADC בתמונות אינם מסוגלים לדגום אותות שליליים.

תכנון מעגל התייחסות זה עשוי לעזור לכם במעגלים המשתנים ברמה:

בדיקת ה- ADC

לאחר הגדרת הקוד והחומרה הנדרשים, חייבת להיות דרך לבדוק אם ה- ADC אכן מדגם כראוי בצורה הנדרשת או לא. מכיוון שאתה לא יכול להציץ לתוך ה- MCU כדי לראות אם הכל מתנהל כשורה, אני מציע שתי דרכים:

  1. אתה יכול לחבר איתור באגים עם ה- Pic כמו זה שמוצג למעלה. במצב ניפוי באגים, תוכלו לבדוק את הערך ברישומים ADCBUF0 עד 10 כדי לראות אם הם נטענים בערכים שנדגמו כהלכה.
  2. אתה יכול לשלוח את הערכים של ADCBUF לרשום UART יסודי ולנטר אותם במחשב בעזרת צג סדרתי.

קוד לדוגמא ADC ל- dsPic

# כלול "xc.h" # הגדר FCY 20000000 # הגדר FPWM 3600 # כלול xc.h> # כלול stdio.h> # כלול עיכוב. h> # כלול libpic30.h> # כלול dsp.h> # כלול מתמטיקה.ה > _FOSC (CSW_FSCM_OFF & XT_PLL8); // מתנד חיצוני, PLLx8 _FWDT (WDT_OFF); // טיימר כלב השמירה כבוי _FBORPOR (MCLR_DIS); // השבת איפוס int ADCValue; בטל init_ADC (בטל) {TRISB = 0xFFFF; // הגדר כנמל קלט ADPCFG = 0x0000; // בחירת כל הפינים האנלוגיים למצב אנלוגי ADCHSbits.CH0SA = 1; ADCHSbits.CH0NA = 0; //ADCHSbits.CH123SA = 0; //ADCHSbits.CH123NA = 0; IEC0bits.ADIE = 1; // אפשר ADC Interrupt IPC2bits.ADIP = 1; // קבע את הפרעות Priorty-6 ADCSSLbits.CSSL0 = 0; // דלג על סריקת קלט לסיכה אנאלוגית AN0, AN1, AN2 ADCSSLbits.CSSL1 = 0; ADCSSLbits.CSSL2 = 0; ADCON3bits.SAMC = 0; // זמן מדגם אוטומטי 6TAD // זמן מדגם מקסימלי ADCON3bits.ADRC = 0; // בחירת מקור שעון המרה שמקורו בשעון המערכת ADCON3bits.ADCS = 9; // בחירת שעון המרה 6Tcy ADCON1bits.ADSIDL = 0; // בחירת פעולת המשך מצב במצב סרק ADCON1bits.FORM = 1; // בחירת פלט נתונים בתבנית שלמה חתומה ADCON1bits.SSRC = 0; // בחירת מרווח PWM של בקרת מנוע מסיימת את הדגימה ומתחילה המרה ADCON1bits.SIMSAM = 0; // דוגמאות CH0, CH1, CH2, CH3 בו זמנית ADCON1bits.ASAM = 0; // בחירת הדגימה מתחילה מיד לאחר סיום ההמרה האחרונה. ה- SAMP ביט מוגדר אוטומטית ADCON1bits.SAMP = 0; // לפחות מגבר A / D לדוגמא / אחיזה מדגם ADCON2bits.VCFG = 0; // סיביות תצורת התייחסות למתח ADCON2bits.CSCNA = 0; // השבת סריקת קלט ADCON2bits.CHPS = 0; // בחירת ערוץ המרה CH0 ADCON2bits.SMPI = 0; // בחירת מדגם המרה אחד להפרעה ADCON2bits.ALTS = 0; // משתמש ב- MUX A הגדרות מרבב קלט ADCON2bits.BUFM = 0; // מאגר מוגדר כמאגר אחד של 16 מילים ADCBUF (15 ... 0) ADCON1bits.ADON = 1; // ממיר A / D מופעל} readADC ריק () {//ADCON1bits.SAMP = 1; // התחל דגימה, ההמרה האוטומטית תעבור // __ delay_ms (100); ADCON1bits.SAMP = 0; // התחל דגימה, המרה אוטומטית תבוא בעוד (! ADCON1bits.DONE); // המתן להשלמת ההמרה ADCValue = ADCBUF0; // קרא את תוצאת ההמרה} void main (void) {init_ADC (); נתוני int; בעוד (1) {readADC (); נתונים = ADCValue; }}

קביעת תצורה של מודול ADC

ניתן לאתחל ולהגדיר את מודול ה- ADC בעזרת הקוד המפורט לעיל. מדריך צעד אחר צעד.


שלבים 1 עד 7 הם חיוניים. לאחר 7, ניתן לדלג על כל אחד מהם או על כולם.

1. הגדר את היציאה כקלט ובמצב אנלוגי

  1. יש להגדיר יציאה B, שעליה נמצאים פינים קלט ADC, כיציאת קלט. (שורה - 21).
  2. הם חייבים להיות מוגדרים במצב קלט אנלוגי על ידי רישום ADPCFG. (שורה - 22).

2. בחר כניסות אנלוגיות לדגימה

יש לחבר כניסות אנלוגיות ל'ערוץ ADC 'לצורך הדגימה. בדרך כלל יש יותר כניסות אנלוגיות מאשר ערוצים; לדוגמא, ל- dsPic30f4011 יש 09 כניסות אנלוגיות אך רק 04 ערוצי ADC. לכן עליך לבחור איזה סיכת כניסה אנלוגית מחוברת לאיזה ערוץ ADC. זה נעשה בעזרת רישום ADCHS.

  • כאן נבחר AN1 כקלט הסיכה האנלוגי לערוץ 0. (קו - 2).
  • מספר הערוצים קובע את מספר הדגימות האפשריות בו זמנית.
  • הבקר יכול לדגום לסירוגין בין Mux A ל- Mux B.

בחירת שילובים שונים של כניסות אנלוגיות ADC וערוצים למכשירי dspic30f.
(במכשירי dspic33f עשויים להיות יותר ערוצים ותשומות זמינים)


תצורות אפשריות של ADCHSהתוצאה תצורת פין קלט אנלוגישורת קוד

ערוץ 0 -> Mux A

ניתן לבחור כל סיכת אנלוגה מ- AN0 - AN8 כדי לתת קלט לערוץ 0 דרך Mux A.

ADCHSbits.CH0SA = 1; או כל מספר אחר בהתאם לסיכה

ערוץ 1, 2 ו -3 -> Mux A

קלט ערוץ 1 הוא AN3, ערוץ 2 -> AN4, ערוץ 3 -> AN5

ADCHSbits.CH123SA = 1;

ערוץ 0 -> Mux B

ניתן לבחור כל סיכת אנלוגה מ- AN0 - AN8 כדי לתת קלט לערוץ 0 דרך Mux B

ADCHSbits.CH0SB = 1; או כל מספר אחר בהתאם לסיכה

ערוץ 1, 2 ו -3 -> Mux B

קלט ערוץ 1 הוא AN3, ערוץ 2 -> AN4, ערוץ 3 -> AN5

ADCHSbits.CH123SB = 1;

3. בחר הפניה למתח

יש לבחור הפניה למתח כך שתתאים לטווח הקלט של הכניסות האנלוגיות. ישנן שתי אפשרויות לכך:

  1. ניתן להפוך את ה- Vcc ו- Gnd למגבלות הייחוס העליונות והתחתונות.
  2. ניתן ליישם מתח סימוכין חיצוני על סיכת AVref.

זה נעשה בעזרת VCFG bit במרשם ADCON2. (קו - 47)

VCFGVref (גבוה יותר)Vref (תחתון)

0

AVdd

AVss

1

Vref + חיצוני

AVss

2

AVdd

Vref חיצוני -

3

Vref + חיצוני

Vref חיצוני -

4. בחר בתבנית הפלט של הנתונים

ניתן לציין את פורמט הפלט של הנתונים שנדגמו דרך ADC בעזרת Bit FORM במרשם ADCON1, על פי הטבלה להלן:

טופספורמט פלט נתונים

0

מספר שלם

1

מספר שלם חתום

2

חֶלקִי

3

חלקי חתום

5. בחר במקור הדק ההמרה

אנלוגיה להמרה דיגיטלית בתוך מודול ADC עשויה להיות מיושמת על ידי מספר מקורות טריגר, הנקבעים על ידי סיביות ה- SSRC במרשם ADCON1 על פי הטבלה הבאה:

SSRCמקור ההדק להמרה

0

ניקוי ידני של סיבית ה- SAMP מסיים את הדגימה ומתחיל את ההמרה.

1

מעבר פעיל על סיכת INT0 מסיים את הדגימה ומתחיל המרה.

2

טיימר 3 משווה דגימת סיום התאמה ומתחיל המרה.

3

סיום מחזור PWM מסתיים הדגימה ומתחיל המרה.

7

המרה אוטומטית מופעלת על ידי מונה פנימי.

6. בחר את מצב הדגימה

ניתן להתחיל דגימה בערוצי ADC באחת מהאפשרויות הבאות:

  1. הגדרת סיבית ה- SAMP באופן ידני בקוד.
  2. באופן אוטומטי לאחר סיום ההמרה האחרונה.

זה נקבע על ידי ביט ה- ASAM במרשם ADCON1.

אסאםמצב

0

הדגימה מתחילה עם הגדרת סיבית ה- SAMP

1

הדגימה מתחילה מיד לאחר סיום ההמרה האחרונה.

7. בחר בשעון ההמרה

כל המרה אנלוגית לדיגיטלית עם מודול A / D דורשת 12 תקופות שעון. ניתן להגדיר את התקופה של מחזור שעון יחיד בעזרת סיביות ADCS במרשם ADCON3. הערך הממוקם ב- ADCS הוא ערך של שישה סיביות. ניתן לחשב זאת מהנוסחאות הבאות:

הערך המינימלי של Tad שניתן להשתמש בו הוא 154 ננו שניות.

8. החלט אם נדרש דגימה סימולטנית או לא (אופציונלי)

ניתן לאפשר דגימה סימולטנית על ידי ביט ה- SIMSAM במרשם ADCON1. דגימה סימולטנית לוכדת את הדגימות של כל ערוצי הקלט באותו הרגע בדיוק. אם דגימה סימולטנית מושבתת, הערוץ ידוגם בזה אחר זה.

9. בחר במקור שעון ההמרה (אופציונלי)

ברוב המקרים, מקור שעון ההמרה נבחר להיות שעון המערכת על ידי הגדרת סיבית ה- ADRC במרשם ה- ADCON3 ל- 0.

10. קבע אם נדרשת סריקת קלט (אופציונלי)

  • ניתן לדלג על שלב זה ברוב היישומים.
  • ניתן להפעיל סריקת קלט על ידי ביט ה- CSNA במרשם ADCON2.

ניתן להגדיר את ערוץ 0 של מודול ה- ADC לסרוק כניסות אנלוגיות מרובות. ניתן להשתמש בזה אם מקורות הקלט שלהם מרובים ולא כולם פעילים בו זמנית.

הפרעת ה- ADC ב- dspic30f ו- dspic33f

במקום להשתמש בפונקציית readADC () בגוף הראשי לקריאת הערכים ממודול ה- ADC, נעשה שימוש בהפרעה לביצוע אותה פונקציה ביישומים המתקדמים ביותר.

למידע נוסף על הפרעות עיין במדריך מפורט זה: כיצד להשתמש בהפרעות ב- Micro Microcontrollers

קוד מבוסס הפרעה ל- ADC ב- dspic30f ו- dspic33f

#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, כלומר 30 MIPS _FWDT (WDT_OFF); // טיימר כלב השמירה כבוי _FBORPOR (MCLR_DIS); בטל Interrupt_Init (בטל) {IEC0bits.ADIE = 1; // אפשר ADC Interrupt IPC2bits.ADIP = 6; // הגדר עדיפות פסיקה = 6} בטל __attribute __ ((interrupt, auto_psv)) _ ADCInterrupt (void) {while (! ADCON1bits.DONE); // המתן להשלמת דוגמת ההמרה. Va = ADCBUF0; sample.Vb = ADCBUF1; IFS0bits.ADIF = 0; } int main (void) {// הפוך את RD0 לפלט דיגיטלי _TRISD0 = 0; Interrupt_Init (); ADC_Init (); בעוד (1) {_LATD0 = 1; __השהיה 32 (15000000); _LATD0 = 0; __השהיה 32 (15000000); }}

  • יש לבחור מקור ההדק להמרה כדי שההפרעה של ADC תפעל כראוי בהתאם להוראות בשלב 5.
  • הדגימה צריכה להיעשות במצב אוטומטי. (ביט ASAM)
  • ניתן לשלוט על תדירות ההפעלה של הפרעת ADC בעזרת ביטים SMPI במרשם ADCON2. (שורה 50).

מאמר זה מדויק ונכון למיטב ידיעת המחבר. התוכן מיועד למטרות מידע או בידור ואינו מחליף ייעוץ אישי או ייעוץ מקצועי בעניינים עסקיים, פיננסיים, משפטיים או טכניים.

אנו ממליצים לך

מאמרים פופולריים

נקה את היסטוריית הגלישה שלך באמזון, המלצות חיפוש ועוד
מרשתת

נקה את היסטוריית הגלישה שלך באמזון, המלצות חיפוש ועוד

ג'ונתן ווילי הוא יועץ למידה דיגיטלי שיש לו תשוקה לעזור לאחרים להפיק את המיטב מהטכנולוגיה שלהם.כשאתה קונה מתנות באינטרנט, קל למבוכה לקלקל את ההפתעה, במיוחד עם אנשים שבביתך. אם תשכח להתנתק או לסגור ...
יצירת תרשים מדחום או תבנית תרשים ב- Excel 2007
מחשבים

יצירת תרשים מדחום או תבנית תרשים ב- Excel 2007

רובי כותב בעיקר על kyrim אבל גם מדי פעם שופך אור על המוזרויות של יישומי מיקרוסופט כמו Excel ו- Outlook.מקור המאמר האחרון שלי ב- Excel 2007 מעט יוצא דופן. בחנתי כמה מהחיפושים שאנשים השתמשו בהם כדי למצו...