- השוואת ADC בארדואינו ו- STM32F103C8
- ADC ב- STM32
- כיצד ממירים אות אנלוגי לפורמט דיגיטלי
- סיכות ADC ב- STM32F103C8T6
- רכיבים נדרשים
- תרשים מעגלים והסברים
- תכנות STM32 לקריאת ערכי ADC
תכונה נפוצה אחת המשמשת כמעט בכל יישום משובץ היא מודול ה- ADC (ממיר אנלוגי לדיגיטלי). ממירים אנלוגיים לדיגיטליים אלה יכולים לקרוא מתח מחיישנים אנלוגיים כמו חיישן טמפרטורה, חיישן הטיה, חיישן זרם, חיישן Flex ועוד. אז במדריך זה נלמד כיצד להשתמש ב- ADC ב- STM32F103C8 לקריאת מתחים אנלוגיים באמצעות Energia IDE. אנו להתממשק פוטנציומטר קטן לוח גלול הכחולה STM32 ולספק מתח משתנה ל סיכה אנלוגית, לקרוא את המתח ולהציג אותו על מסך LCD 16x2.
השוואת ADC בארדואינו ו- STM32F103C8
בלוח Arduino הוא מכיל 6 ערוצים (8 ערוצים על מיני וננו, 16 על מגה), 10 סיביות ADC עם מתח מתח כניסה של 0V – 5V. המשמעות היא שהיא תמפה את מתח הכניסה בין 0 ל -5 וולט לערכים שלמים בין 0 ל 1023. כעת במקרה של STM32F103C8 יש לנו 10 ערוצים, ADC 12 סיביות עם טווח כניסה 0V -3.3V. הוא ימפה את מתח הכניסה בין 0 ל -3.3 וולט לערכים שלמים בין 0 ל -4095.
ADC ב- STM32
ה- ADC המוטמע במיקרו-בקרים STM32 משתמש בעקרון SAR (רישום קירוב עוקב), לפיו ההמרה מתבצעת בכמה שלבים. מספר שלבי ההמרה שווה למספר הביטים בממיר ADC. כל צעד מונע על ידי שעון ה- ADC. כל שעון ADC מייצר סיבית אחת מתוצאה לפלט. העיצוב הפנימי של ADC מבוסס על טכניקת הקבלים המעוברים. אם אתה לא חדש ב- STM32, בדוק את המדריך לתחילת העבודה עם STM32.
רזולוציה של 12 סיביות
ADC זה הוא ADC בן 10 ערוצים. כאן המונח 10 ערוץ מרמז שיש 10 פינים ADC באמצעותם נוכל למדוד מתח אנלוגי. המונח 12 סיביות מרמז על הרזולוציה של ה- ADC. 12 סיביות פירושן 2 בעוצמה של עשר (2 12) שהוא 4096. זהו מספר שלבי הדגימה עבור ה- ADC שלנו, כך שטווח ערכי ה- ADC שלנו יהיה בין 0 ל -4095. הערך יגדל מ- 0 ל 4095 בהתבסס על ערך המתח לשלב, אותו ניתן לחשב לפי הנוסחה
VOLTAGE / STEP = REFENENCE VOLTAGE / 4096 = (3.3 / 4096 = 8.056mV) ליחידה.
כיצד ממירים אות אנלוגי לפורמט דיגיטלי
מכיוון שמחשבים מאחסנים ומעבדים רק ערכים בינאריים / דיגיטליים (1 ו 0). אז יש להמיר אותות אנלוגיים כמו תפוקת חיישן בוולט לערכים דיגיטליים לצורך עיבוד וההמרה צריכה להיות מדויקת. כאשר ניתן אנלוגי קלט קלט ל- STM32 בכניסות האנלוגיות שלו, הערך האנלוגי נקרא ומאוחסן במשתנה שלם.. ערך אנלוגי המאוחסן (0-3.3V) מומר לערכים שלמים (0-4096) באמצעות הנוסחה הבאה:
מתח כניסה = (ערך ADC / רזולוציית ADC) * מתח התייחסות
רזולוציה = 4096
הפניה = 3.3V
סיכות ADC ב- STM32F103C8T6
יש 10 סיכות אנלוגיות ב- STM32 מ- PA0 ל- PB1.
בדוק גם כיצד להשתמש ב- ADC במיקרו-בקרים אחרים:
- כיצד להשתמש ב- ADC ב- Arduino Uno?
- ממשק ADC0808 עם מיקרו-בקר 8051
- באמצעות מודול ADC של מיקרו-בקר PIC
- מדריך ADC לפטל פטל
- כיצד להשתמש ב- ADC ב- MSP430G2 - מדידת מתח אנלוגי
רכיבים נדרשים
- STM32F103C8
- LCD 16 * 2
- פוטנציומטר 100k
- קרש לחם
- חוטי חיבור
תרשים מעגלים והסברים
תרשים המעגל לממשק 16 * 2 LCD וכניסה אנלוגית ללוח STM32F103C8T6 מוצג להלן.
החיבורים שבוצעו עבור LCD מובאים להלן:
פין LCD לא |
שם פין LCD |
שם פין STM32 |
1 |
קרקע (GND) |
קרקע (G) |
2 |
VCC |
5V |
3 |
VEE |
סיכה ממרכז הפוטנציומטר |
4 |
בחר הרשמה (RS) |
PB11 |
5 |
קריאה / כתיבה (RW) |
קרקע (G) |
6 |
הפעל (EN) |
PB10 |
7 |
נתונים נתונים 0 (DB0) |
אין חיבור (NC) |
8 |
נתונים ביט 1 (DB1) |
אין חיבור (NC) |
9 |
נתונים ביט 2 (DB2) |
אין חיבור (NC) |
10 |
נתונים ביט 3 (DB3) |
אין חיבור (NC) |
11 |
נתונים ביט 4 (DB4) |
PB0 |
12 |
נתונים ביט 5 (DB5) |
PB1 |
13 |
נתונים ביט 6 (DB6) |
PC13 |
14 |
נתונים ביט 7 (DB7) |
PC14 |
15 |
LED חיובי |
5V |
16 |
LED שלילי |
קרקע (G) |
החיבורים נעשים על פי הטבלה הנתונה לעיל. ישנם שני פוטנציומטרים נוכחים במעגל, הראשון משמש לחלוקת מתח אשר באמצעותו ניתן לשנות את המתח ולספק קלט אנלוגי ל- STM32. סיכה שמאלית של פוטנציומטר זה מקבל מתח חיובי קלט מ- STM32 (3.3V) והסיכה הימנית מחוברת לקרקע, סיכה מרכזית של פוטנציומטר מחוברת לסיכת כניסה אנלוגית (PA7) של STM32. הפוטנציומטר האחר משמש כדי לשנות את הניגודיות של תצוגת ה- LCD. מקור הכוח ל- STM32 מסופק באמצעות אספקת חשמל USB ממחשב או מחשב נייד.
תכנות STM32 לקריאת ערכי ADC
במדריך הקודם למדנו על תכנות לוח STM32F103C8T6 באמצעות יציאת USB. אז אנחנו לא צריכים מתכנת FTDI עכשיו. כל שעליך לעשות הוא לחבר אותו למחשב דרך יציאת USB של STM32 ולהתחיל לתכנת עם ARDUINO IDE. תכנות ה- STM32 שלך ב- ARDUINO IDE לקריאת מתח אנלוגי הוא פשוט מאוד. זה כמו לוח ארדואינו. אין צורך בהחלפת סיכות המגשר של STM32.
בתוכנית זו יקרא את הערך האנלוגי ויחשב את המתח עם אותו ערך ואז יציג את שניהם, ערכים אנלוגיים ודיגיטליים, על גבי מסך ה- LCD.
ראשית הגדירו סיכות LCD. אלה מגדירים לאיזה סיכה של STM32 מחוברים סיכות ה- LCD. אתה יכול לשנות לפי הדרישות שלך.
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // להזכיר את שמות הסיכות אליהם מחובר LCD
לאחר מכן אנו כוללים את קובץ הכותרת לתצוגת LCD. זה קורא לספרייה המכילה את הקוד לאופן שבו ה- STM32 צריך לתקשר עם ה- LCD. ודא גם שהפונקציה Liquid Crystal נקראת עם שמות הסיכות שהגדרנו לעיל.
#לִכלוֹל
בתוך פונקציית ההתקנה () , היינו נותנים רק הודעת מבוא שתוצג במסך ה- LCD. אתה יכול ללמוד על ממשק LCD עם STM32.
lcd.begin (16, 2); // אנו משתמשים ב- LCD * 16 * 2 lcd.clear (); // נקה את המסך lcd.setCursor (0, 0); // בשורה הראשונה העמודה הראשונה lcd.prin t ("CIRCUITDIGEST"); // הדפס את lcd.setCursor זה (0, 1); // בשורה שנייה שניה עמוד n lcd.print ("STM32F103C8"); // הדפס את העיכוב (2000); // המתן לשתי שניות lcd.clear (); // נקה את המסך lcd.setCursor (0, 0); // בשורה הראשונה העמודה הראשונה lcd.print ("USING ADC IN"); // הדפס lcd.setCursor זה (0,1); // בשורה שנייה עמודה ראשונה lcd.print ("STM32F103C8"); // הדפס עיכוב זה (2000); // המתן לשתי שניות lcd.clear (); // נקה את המסך
לבסוף, בתוך פונקציית הלולאה האינסופית שלנו () , אנו מתחילים לקרוא את המתח האנלוגי המסופק לסיכה PA7 מפוטנציומטר. כפי שכבר דנו, המיקרו-בקר הוא מכשיר דיגיטלי והוא אינו יכול לקרוא את רמת המתח באופן ישיר. באמצעות טכניקת SAR רמת המתח ממופה בין 0 ל 4096. ערכים אלה נקראים ערכי ADC, כדי לקבל ערך ADC זה פשוט השתמש בשורה הבאה
int val = analogRead (A7); // קרא את ערך ה- ADC מסיכה PA 7
כאן הפונקציה analogRead () משמשת לקריאת הערך האנלוגי של הסיכה. לבסוף אנו שומרים ערך זה במשתנה הנקרא " val ". סוג המשתנה הזה הוא מספר שלם מכיוון שנקבל ערכים הנעים בין 0 ל 4096 שיישמרו במשתנה זה.
השלב הבא יהיה חישוב ערך המתח מערך ADC. לשם כך יש לנו את הנוסחאות הבאות
מתח = (ערך ADC / רזולוציית ADC) * התייחסות וולטג ה
במקרה שלנו אנחנו כבר יודעים שרזולוציית ה- ADC של המיקרו-בקר שלנו היא 4096. ערך ה- ADC נמצא גם בשורה הקודמת ושמר את המשתנה שנקרא val. מתח הייחוס שווה למתח שבו מיקרו פועל. כאשר לוח STM32 מופעל באמצעות כבל USB אז מתח ההפעלה הוא 3.3 וולט. ניתן גם למדוד את מתח ההפעלה על ידי שימוש במולטימטר לרוחב ה- Vcc וסיכה הקרקעית על הלוח. כך שהנוסחה שלעיל משתלבת במקרה שלנו כפי שמוצג להלן
מתח צף = (צף (val) / 4096) * 3.3; // נוסחאות להמרת ערך ADC למצב e
אתה עלול להתבלבל עם צף הקו (val). זה משמש להמרת המשתנה "val" מסוג נתונים int לסוג נתונים "float". יש צורך בהמרה זו מכיוון שרק אם נקבל את התוצאה של val / 4096 ב- float נוכל להכפיל אותה 3.3. אם הערך יתקבל במספר שלם הוא תמיד יהיה 0 והתוצאה תהיה גם אפס. לאחר שחישבנו את ערך ה- ADC והמתח, כל שנותר הוא להציג את התוצאה על גבי מסך ה- LCD שניתן לעשות זאת באמצעות השורות הבאות
lcd.setCursor (0, 0); // הגדר את הסמן לעמודה 0, שורה 0 lcd.print ("ADC Val:"); lcd.print (val); // הצג ערך ADC lcd.setCursor (0, 1); // הגדר את הסמן לעמודה 0, שורה 1 lcd.print ("מתח:"); lcd.print (מתח); // מתח תצוגה
הקוד המלא וסרטון ההדגמה מופיע להלן.