PWM: חיקוי סיכות אנלוגיות עם לוח ה- Arduino שלך

אותות PWM

באמצעות הפינים הדיגיטליים והאנלוגיים, בהם תוכלו להשתמש על לוח ה- Arduino שלכם, תוכלו לקבל או לשלוח אותות חשמליים כדי לשלוט או להשיג נתונים מהפרויקטים האלקטרוניים שלכם. בנוסף, ישנם אותות מעניינים אחרים בסוג הלוח הזה, ואלה PWM שיכול לחקות אות אנלוגי בלי להיות ממש אנלוגי. כלומר, הם פינים דיגיטליים שיכולים לפעול בצורה דומה (לא זהה) לאות אנלוגי.

סוגים אלה של אותות מעשיים מאוד כאשר אתה לא רק רוצה להשתמש באותות דיגיטליים של HIGH ו- LOW, כלומר, 1 או 0, ON ו- OFF, אלא שאתה רוצה ללכת רחוק יותר ולתאר אותות מורכבים מעט יותר. לדוגמא, ניתן לווסת את המהירות של a מנוע DC, או עוצמת האור של אור, לסולנואיד וכו '.

מערכת אנלוגית לעומת דיגיטלית

אות אנלוגי לעומת דיגיטלי

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

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

במקרה של אנלוגים אין שתי קבוצות או גרסאות גדולות אלה, מכיוון שכאן מדובר באותות רציפים שתמיד יהיו תלויים בהם האות המערכת הנוכחית. לדוגמא, ברמקול, האות המסופק אליו תלוי בצליל שברצונכם להפיק. אותו דבר עם מיקרופון, שייצור אות אנלוגי בהתאם לצליל שהוא מקבל. אין ספק שראית את זה גם עם חיישנים רבים אחרים שתיארנו בבלוג זה ופועלים עם אותות אנלוגיים (ולכן, היה צורך ליצור נוסחה כך שמאוחר יותר ניתן יהיה לחשב או להתנות את הערכים ברישומי IDE של ארדואינו. ) ...

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

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

אות אנלוגי לעומת דיגיטלי

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

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

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

ידי ejemplo, רמקול או מיקרופון עם אותות אנלוגיים שעובדים עם כרטיס קול, או כרטיסי גרפיקה דיגיטליים שהיו בעלי שבב RAMDAC המפורסם ליציאות המסך האנלוגיות ... בארדואינו סוג זה של ממירים משמש גם למספר פרויקטים, כפי שנראה ...

מה זה PWM?

מחזור חובה גרפי

למרות PWM (אפנון רוחב דופק), או אפנון רוחב דופק, בעל בסיס דיגיטלי, צורת האות שלו דומה לאות אנלוגי "מרובע" משהו. זה מאפשר באמצעות פולסים דיגיטליים לשנות את האות לחיקוי מערכת אנלוגית כפי שכבר הגבתי בעבר. למעשה, אם אתה מסתכל על השם, זה כבר נותן לך רמזים למה שהוא עושה, דרך רוחב הפולסים הדיגיטליים.

זה מועיל עבור Arduino מכיוון שיש הרבה אוטומציות או רכיבים אלקטרוניים שתוכל להוסיף לפרויקטים שלך וזה אינם מסוגלים לספק אות אנלוגי אמיתי, אך הם משתמשים ב- PWM זה להפעלה. הם גם לא יכולים להשתמש באות אנלוגית דיסקרטית, כלומר, שעוברת לקפיצות מתח כדי לדמות אות דיגיטלי. מה שהם יכולים לעשות זה להשתמש בפלט דיגיטלי -Vcc או Vcc מסוג דיגיטלי כדי לייצר את האות המוזר הזה ...

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

בפרויקטים שלך עם Arduino אתה יכול לבדוק סוג זה של אותות PWM בהם נשמר תדר קבוע של מפעילי דופק לאורך זמן, אך רוחב הפולסים הללו מגוון. למעשה, זה נקרא Duty Cycle כאשר האות נשמר גבוה ביחס לסך המחזור. לכן, מחזור החובה ניתן באחוזים.

זכור שב- PWM אתה לא עובד כמו באות אנלוגית, בין ערכי מתח שונים והוא נע ביניהם. במקרה של PWM זהו אות מרובע בסגנון הדיגיטלי ו שערכו המרבי הוא Vcc. לדוגמא, אם אתה עובד עם ספק כוח 3V, אתה יכול לתת פולסים של 3V או 0V, אך לא 1V או כל ערך ביניים אחר כפי שיקרה באנלוג אמיתי. מה שישתנה במקרה זה הוא רוחב הדופק, בו אנו יכולים לשמור על 30% באותו ערך Vcc גבוה, או 60% כדי לתת לו יותר כוח וכו '.

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

PWM על Arduino

אוטובוס ארדואינו I2C

עכשיו שאתה יודע איך זה עובד, בוא נראה את המקרה הספציפי של PWM בעולם הארדואינו ...

PWM: pinout על Arduino

בלוחות Arduino תוכלו למצוא מספר פינים המיישמים PWM חומרה. אתה יכול לזהות אותם על ה- PCB עצמו מכיוון שיש להם סמל ~ (ראש קטן) יחד עם מספור הסיכות. זה יכול להיעשות גם על ידי תוכנה בקוד הארדואינו, אבל זה יעמיס על המיקרו-בקר בעבודה, משהו אבסורדי כאשר ניתן לעשות זאת באופן מקורי ובחומרה ...

  • Arduino UNO, מיני וננו- יש לך 6 יציאות PWM של 8 סיביות על סיכות 3, 5, 6, 9, 10 ו -11, שיהיה להן ~ ממש מול המספר.
  • ארדואינו מגה- בלוח Arduino החזק ביותר יש לך 15 יציאות PWM בעלות 8 סיביות. הם נמצאים על סיכות 2 עד 13 ו -44 עד 46.
  • ארדואינו בשל: במקרה זה יש 13 יציאות PWM של 8 סיביות. הם נמצאים בסיכות 2 עד 13, בתוספת שתי יציאות אנלוגיות אחרות המופעלות על ידי DAC ברזולוציה של 12 סיביות.

כאשר אתה מדבר על רזולוציה של 8 סיביות או 12 סיביות וכו ', בסוג זה של פלט PWM, אתה מתייחס לחדר התמרון שיש לך. עם 8 סיביות יש 256 רמות ביניהם אתה יכול להשתנות, ו 12 הסיביות עולות ל 4096 רמות.

שליטה עם טיימרים

לבקרת PWM חומרה, Arduino ישתמש בטיימרים בשביל זה. כל טיימר נוכחי יכול לשרת 2 או 3 יציאות PWM. מרשם השוואה לכל פלט משלים מערכת זו כך שכאשר הזמן מגיע לערך המרשם, משתנה מצב או ערך הפלט כדי לעצור את מחזורי החובה הללו. למרות שיש שני יציאות הנשלטות על ידי אותו טיימר, שניהם יכולים להיות בעלי מחזורי עבודה שונים, אם כי הם חולקים את אותו התדר.

במקרה של טיימרים המשויכים לכל סיכת PWM, זה ישתנה תלוי בסוג לוח הארדואינו שיש לך:

  • Arduino UNO, מיני וננו:
    • טיימר 0 - 5 ו -6
    • טיימר 1 - 9 ו -10
    • טיימר 2 - 3 ו -11
  • ארדואינו מגה:
    • טיימר 0 - 4 ו -13
    • טיימר 1 - 11 ו -12
    • טיימר 2 - 9 ו -10
    • טיימר 3 - 2, 3 ו -5
    • טיימר 4 - 6, 7 ו -8
    • טיימר 5 - 44, 45 ו -46

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

  • Arduino UNO, מיני וננו:
    • טיימר 0: מאפשר הגדרה חזרה של 1, 8, 64, 256 ו- 1024. התדר הוא 62.5 Khz.
    • טיימר 1: עם קביעות מוגדרות מראש של 1, 8, 64, 256 ו- 1024. בתדר של 31.25 Khz.
    • Timer2: שווה ל- Timer1, רק שהוא מוסיף גם הגדרה מראש של 32 ו- 128 בנוסף לקודמים.
  • ארדואינו מגה:
    • טיימר 0, 1, 2: זהה לעיל.
    • טיימר 3, 4 ו -5: בתדירות של 31.25 Khz ומוגדר מראש ב- 1, 8, 64, 256 ו- 1024.

אי התאמות וקונפליקטים

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

  • ספריית סרוו: כאשר אתה משתמש במנועי סרוו, הוא עושה שימוש אינטנסיבי בטיימרים, כך שהוא עלול ליצור סכסוכים. השתמש באופן ספציפי ב- Timer1 עבור UNO, Nano ו- Mini, כלומר אינך יכול להשתמש בסיכות 9 ו -10 בזמן שאתה משתמש בסקיצה עם הספרייה הזו. במגה זה יהיה תלוי במספר סרוו ...
  • SPI: אם משתמשים בתקשורת SPI בלוח Arduino, נעשה שימוש בסיכה 11 לפונקציה MOSI. לכן לא ניתן להשתמש באותה סיכת PWM.
  • טון: פונקציה זו משתמשת בטיימר 2 להפעלה. אז אם משתמשים בו, אתה הופך את הפינים 3 ו -11 (או 9 ו -10 עבור מגה) לבלתי-שימושיים.

מבחן מעשי עם ארדואינו

סכמת PWM של Arduino עם נורית LED

אם אתה רוצה לראות באתרו כיצד PWM עובד על Arduino, הדבר הטוב ביותר שאתה יכול לעשות הוא לחבר את מובילי המדידה של מד מתח או מולטימטר (בתפקוד למדידת מתח) בין סיכת ה- PWM שבחרת להשתמש בו לבין סיכת הקרקע או GND של לוח הארדואינו. באופן זה, על גבי מסך מכשיר המדידה תוכלו לראות כיצד המתח משתנה עם פלט דיגיטלי הודות לטריק PWM זה.

אתה יכול להחליף את מד המתח / מולטימטר עם נורית לד כדי לראות כיצד עוצמת האור משתנה, במנוע DC או בכל אלמנט אחר שאתה רוצה. פשטתי את זה בתרשים עם Fritzing עם נורית LED ללא יותר, אבל אתה יודע שהוא יכול לייצג גם את קצות המולטימטר ...

אם אתה משתמש בנורית, זכור את ההתנגדות בקתודה וב- GND.

כדי קוד המקור כדי לשלוט במיקרו-בקר לוח Arduino כדי שהכל יעבוד, עליך להכניס אותו ל- Arduino IDE (במקרה זה השתמשתי בסיכת PWM 6 של Arduino UNO):

const int analogOutPin = 6;
byte outputValue = 0;  
 
void setup()
{  
   Serial.begin(9600);        
   pinMode(ledPIN , OUTPUT); 
 
   bitSet(DDRB, 5);       // LED o voltímetro
   bitSet(PCICR, PCIE0);       
   bitSet(PCMSK0, PCINT3);     
}
 
void loop() 
{
   if (Serial.available()>0)  
   {
      if(outputValue >= '0' && outputValue <= '9')
      {
         outputValue = Serial.read();   // Leemos la opción
         outputValue -= '0';      // Restamos '0' para convertir a un número
         outputValue *= 25;      // Multiplicamos x25 para pasar a una escala 0 a 250
         analogWrite(ledPIN , outputValue);
      }
   }
}  
 
ISR(PCINT0_vect)
{
   if(bitRead(PINB, 3))
   { 
      bitSet(PORTB, 5);   // LED on 
   }
   else
   { 
      bitClear(PORTB, 5); // LED off  
   } 
} 
אני ממליץ לך לשחק עם הערכים ולראות את התוצאות על האור או מד המתח. התוכנית יכולה לקבל ערכים בין 0 ל -9, כך שתוכלו לראות כיצד הכל משתנה. למידע נוסף, אני ממליץ לך קורס הארדואינו שיש לנו בהורדה בחינם ...

תוכן המאמר עומד בעקרונותינו של אתיקה עריכתית. כדי לדווח על שגיאה לחץ כאן.

תגובה, השאר את שלך

השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   חוסה דיג'ו

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