- MCP4921 DAC (ממיר דיגיטלי לאנלוגי)
- רכיבים נדרשים
- סכמטי
- הסבר קוד
- בדיקת המרה דיגיטלית לאנלוגית באמצעות PIC
דיגיטלי ואנלוגי הוא חלק בלתי נפרד מהאלקטרוניקה. ברוב המכשירים יש גם ADC וגם DAC והם משמשים כאשר יש צורך להמיר אותות בין אנלוגי לדיגיטלי או לדיגיטלי לאנלוגי. כמו כן האותות בעולם האמיתי כמו צליל ואור הם אנלוגיים באופיים, כך שבכל פעם שיש להשתמש באותות העולם האמיתי, יש להמיר את האותות הדיגיטליים לאנלוגיים, למשל כדי להפיק צליל באמצעות רמקולים או כדי לשלוט במקור אור.
סוג אחר של DAC הוא מודולטור רוחב דופק (PWM). PWM לוקח מילה דיגיטלית ויוצר דופק דיגיטלי עם רוחב דופק משתנה. כאשר אות זה מועבר דרך פילטר, התוצאה תהיה אנלוגית בלבד. אות אנלוגי יכול להכיל מספר סוגים של נתונים באות.
במדריך זה נתממש את DAC MCP4921 עם Microchip PIC16F877A להמרה דיגיטלית לאנלוגית.
כאן במדריך זה נמיר את האות הדיגיטלי לאות אנלוגי ונציג את הערך הדיגיטלי של הכניסה ואת הערך האנלוגי של הפלט על 16x2 LCD. זה יספק 1V, 2V, 3V, 4V ו- 5V כפלט האנלוגי הסופי שמוצג בסרטון שניתן בסוף. תוכל ללמוד עוד על DAC במדריך היקר שלנו של ממשקי DAC עם פטל פי, ארדואינו ו- STM32.
ניתן להשתמש ב- DAC ביישומים רבים כגון בקרת מנוע, בקרת הבהירות של נורות ה- LED, מגבר השמע, מקודדי הווידאו, מערכות לרכישת נתונים וכו 'לפני שקופצים ישירות לחלק הממשק, חשוב שיהיה סקירה כללית אודות MCP4921.
MCP4921 DAC (ממיר דיגיטלי לאנלוגי)
MCP4921 הוא DAC של 12 סיביות, ולכן MCP4921 יספק רזולוציית פלט של 12 סיביות. רזולוציית DAC פירושה מספר ביטים דיגיטליים הניתנים להמרה לאות אנלוגי. כמה ערכים נוכל להשיג מכך מבוסס על הנוסחה. עבור 12 סיביות זה = 4096. פירוש הדבר ש- DAC ברזולוציית 12 סיביות יכול לייצר 4096 יציאות שונות.
על ידי שימוש בערך זה, ניתן לחשב בקלות את מתח הצעד האנלוגי היחיד. לצורך חישוב השלבים נדרש מתח הייחוס. מכיוון שמתח ההיגיון של המכשיר הוא 5 וולט, מתח הצעד הוא 5/4095 (4096-1 מכיוון שנקודת המוצא לדיגיטל אינה 1, היא 0), שהיא 0.00122100122 מיליוולט. לכן, שינוי של ביט אחד ישנה את הפלט האנלוגי עם 0.00122100122.
אז זה היה חלק הגיור. MCP4921 הוא IC 8 פינים. את תרשים הסיכות ואת התיאור ניתן למצוא בהמשך.
ה- MCP4921 IC מתקשר עם המיקרו-בקר על ידי פרוטוקול SPI. עבור תקשורת SPI, מכשיר צריך להיות מאסטר, אשר מגיש נתונים או פקודה למכשיר החיצוני המחובר כעבד. במערכת תקשורת SPI, ניתן לחבר התקני עבדים מרובים למכשיר ה- Master היחיד.
כדי להגיש את הנתונים ואת הפקודה, חשוב להבין את רישום הפקודה.
בתמונה למטה, רישום הפקודה מוצג,
הקופה הפקודה היא הקופה 16 סיביות. Bit-15 עד bit-12 משמש לפקודת התצורה. קלט הנתונים והתצורה מוצגים בבירור בתמונה לעיל. בפרויקט זה, MCP4921 ישמש כתצורה הבאה-
מספר ביט |
תְצוּרָה |
ערך תצורה |
קצת 15 |
DAC A |
0 |
ביט 14 |
ללא שגיאה |
0 |
ביט 13 |
1x (V OUT * D / 4096) |
1 |
ביט 12 |
פלט כוח בקרת הפעלה למטה |
1 |
אז הבינארי הוא 0011 יחד עם הנתונים שנקבעים על ידי סיביות D11 עד D0 של המרשם. יש להגיש את נתוני 16 הסיביות 0011 xxxx xxxx xxxx כאשר ה- 4 סיביות הראשונות של MSB הן התצורה והשאר היא ה- LSB. זה יהיה ברור יותר על ידי הצגת תרשים תזמון הפקודה לכתוב.
בהתאם לתרשים התזמון וגליון הנתונים, סיכת ה- CS נמוכה במשך כל תקופת כתיבת הפקודה ל- MCP4921.
עכשיו הגיע הזמן לממשק את המכשיר לחומרה ולכתוב את הקודים.
רכיבים נדרשים
לפרויקט זה נדרשים הרכיבים הבאים-
- MCP4921
- PIC16F877A
- קריסטל 20 מגה הרץ
- תצוגת LCD בת 16x2 תווים.
- נגד 2k -1 יח '
- קבלים 33pF - 2 יח '
- נגד 4.7k - 1 יח '
- רב-מטר למדידת מתח המוצא
- קרש לחם
- ספק כוח 5V, מטען לטלפון יכול לעבוד.
- הרבה חוטי חיבור או חוטי ברג.
- סביבת תכנות שבבים עם ערכת מתכנת ו- IDE עם מהדר
סכמטי
תרשים מעגלים לממשק DAC4921 עם מיקרו-בקר PIC מוצג להלן:
המעגל בנוי ב- Breadboard-
הסבר קוד
קוד מלא עבור המרת אותות דיגיטליים לתוך אנלוגי עם PIC16F877A ניתן בסוף המאמר. כמו תמיד, ראשית עלינו להגדיר את סיביות התצורה במיקרו-בקר PIC.
// PIC16F877A הגדרות סיביות תצורה // הצהרות תצורה של קו המקור 'C' // CONFIG # תצורת פרגמה FOSC = HS // סיביות בחירת מתנד (מתנד HS) # תצורה פרגמה WDTE = OFF // טיימר כלב שמירה אפשר ביט (WDT מושבת) # פרגמה config PWRTE = OFF // טיימר הפעלה אפשר Bit (PWRT מושבת) # pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled) # pragma config LVP = OFF // מתח נמוך (ספק יחיד) תכנות סידורי במעגל מאפשר ביט (RB3 / PGM pin יש פונקציית PGM; תכנות מתח נמוך מופעלת) # config config CPD = OFF // נתונים EEPROM זיכרון קוד ביט הגנה (נתונים EEPROM הגנת קוד כבוי) # pragma config WRT = OFF // Flash Memory Memory Write אפשר ביטים (הגנת כתיבה כבויה; כל זיכרון התוכנית עשוי להיכתב באמצעות בקרת EECON) # config config CP = OFF // Bit Bit Memory Code Code Protection (Code code off)
שורות הקוד שלהלן משמשות לשילוב קבצי כותרת LCD ו- SPI, כמו גם תדר XTAL וחיבור סיכת ה- CS של ה- DAC.
את המדריך והספרייה של PIC SPI תוכלו למצוא בקישור הנתון.
#לִכלוֹל
Funciton SPI_Initialize_Master () שונה מעט עבור תצורה שונה הנדרשת לפרויקט זה. במקרה זה, רישום ה- SSPSTAT מוגדר כך שנתוני הקלט שנדגמו בסוף זמן פלט הנתונים וגם שעון SPI שהוגדר כשידור מתרחש במעבר ממצב שעון פעיל למצב סרק. אחר זהה.
בטל SPI_Initialize_Master () { TRISC5 = 0; // הגדר כפלט SSPSTAT = 0b11000000; // עמ '74/234 SSPCON = 0b00100000; // עמ '75/234 TRISC3 = 0; // הגדר כפלט למצב עבדים }
כמו כן, עבור הפונקציה שלהלן, SPI_Write () שונה מעט. העברת נתונים תתרחש לאחר ניקוי המאגר להבטחת העברת נתונים מושלמת דרך SPI.
בטל SPI_Write (char נכנס) { SSPBUF = נכנס; // כתוב את הנתונים שניתנו למשתמש במאגר תוך (! SSPSTATbits.BF); }
החלק החשוב בתוכנית הוא מנהל ההתקן MCP4921. זה חלק מעט מסובך מכיוון שהפקודה והנתונים הדיגיטליים מחוררים יחד כדי לספק נתונים מלאים של 16 סיביות דרך ה- SPI. עם זאת, ההיגיון הזה מוצג בבירור בתגובות הקוד.
/ * פונקציה זו מיועדת להמרת הערך הדיגיטלי לאנלוגי. * / בטל convert_DAC (ערך int לא חתום) { / * גודל גודל = 2 ^ n, לכן 12bit 2 ^ 12 = 4096 לעיון 5V, הצעד יהיה 5/4095 = 0.0012210012210012V או 1mV (בערך) * / מיכל int לא חתום; MSB int חתום; LSB שאינו חתום; / * שלב: 1, שמור את הנתונים של 12 הסיביות במכולה נניח שהנתונים הם 4095, בינארי 1111 1111 1111 * / container = value; / * שלב: 2 יצירת דמה 8 סיביות. לכן, על ידי חלוקת 256, 4 סיביות עליונות נתפסות ב- LSB LSB = 0000 1111 * / LSB = מיכל / 256; / * שלב: 3 שליחת התצורה עם ניקוב נתוני 4 הסיביות. LSB = 0011 0000 או 0000 1111. התוצאה היא 0011 1111 * / LSB = (0x30) - LSB; / * שלב: 4 למיכל עדיין יש ערך של 21 ביט. חילוץ 8 הסיביות התחתונות. 1111 1111 AND 1111 1111 1111. התוצאה היא 1111 1111 שזה MSB * / MSB = 0xFF & מיכל; / * שלב: 4 שליחת נתוני ה -16 ביט על ידי חלוקה לשני בתים. * / DAC_CS = 0; // CS נמוך בזמן העברת נתונים. לפי גליון הנתונים נדרש SPI_Write (LSB); SPI_Write (MSB); DAC_CS = 1; }
בפונקציה הראשית, נעשה שימוש ב- 'for loop' שבו נוצרים הנתונים הדיגיטליים ליצירת הפלט של 1V, 2V, 3V, 4V ו- 5V. הערך הדיגיטלי מחושב מול מתח המוצא / 0.0012210012210012 מיליוולט.
בטל main () { system_init (); הקדמה_מסך (); מספר int = 0; int volt = 0; ואילו (1) { עבור (וולט = 1; וולט <= MAX_VOLT; וולט ++) { מספר = וולט / 0.0012210012210012; מסך נקי(); lcd_com (FIRST_LINE); lcd_puts ("DATA Sent: -"); lcd_print_number (מספר); lcd_com (SECOND_LINE); lcd_puts ("פלט: -"); lcd_print_number (וולט); lcd_puts ("V"); convert_DAC (מספר); __השהיית_מס (300); } } }
בדיקת המרה דיגיטלית לאנלוגית באמצעות PIC
המעגל הבנוי נבדק באמצעות רב-מטר. בתמונות למטה, מתח המוצא והנתונים הדיגיטליים מוצגים על גבי LCD. רב-המטר מציג קריאה מקרוב.
הקוד המלא עם סרטון עבודה מצורף למטה.