תוכן עניינים:

Arduino Sinewave לממירים: 4 שלבים
Arduino Sinewave לממירים: 4 שלבים

וִידֵאוֹ: Arduino Sinewave לממירים: 4 שלבים

וִידֵאוֹ: Arduino Sinewave לממירים: 4 שלבים
וִידֵאוֹ: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, נוֹבֶמבֶּר
Anonim
Arduino Sinewave עבור ממירים
Arduino Sinewave עבור ממירים

בפרויקט זה יצרתי אות SPWM (דופק גל סינוס רחב מאופנן) משני יציאות דיגיטליות של pwm arduino.

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

eprojectszone

שלב 1: יצירת אות Pwm למשך 50 הרץ

כדי ליצור אות 50Hz בתדר גבוה יותר יש צורך לבצע כמה חישובים. תדרים מארדואינו יכולים להיות במהירות 8 מגה -הרץ, אך אנו רוצים אות בעל מחזור עבודה משתנה.

כדי להבין את סוגי מחזורי העבודה המשתנים של ארדואינו אתה יכול לקרוא את 3 החלקים של אותו הודעה 1, 2 ו -3.

נניח שהתדר שלנו הוא 50Hz כלומר תקופת הזמן היא 20ms. אז 10ms היא תקופה של מחזור מחזור. בעשרות השניות האלה עלינו לקבל פולסים רבים עם מחזורי עבודה שונים המתחילים במחזורי עבודה קטנים, באמצע האות יש לנו מחזורי עבודה מרביים ולסיים גם עם מחזורי עבודה קטנים. כדי ליצור גל סינוס נשתמש בשני סיכות אחת עבור חצי מחזור חיובי ואחד לחצי מחזור שלילי. בהודעה שלנו לשם כך אנו משתמשים בסיכות 5 ו -6, כלומר טיימר 0.

לאות חלק אנו בוחרים pwm נכון בשלב בתדירות 31372 הרץ-ראה הודעה קודמת. אחת הבעיות הגדולות ביותר היא כיצד אנו מחשבים את מחזור ההפעלה הדרוש עבור כל דופק. לכן, מכיוון שהתדר שלנו הוא f = 31372Hz התקופה עבור כל דופק היא T = 1/31372 = 31.8 אותנו, כך שמספר הפולסים לחצי מחזור הוא N = 10ms/31.8us = 314 פולסים. כעת כדי לחשב את מחזור העבודה לכל דופק יש לנו y = sinx, אך במשוואה זו אנו זקוקים למעלות ולכן למחצית המחזור יש 180 מעלות עבור 314 פולסים. עבור כל דופק יש לנו 180/314 = 0.57deg/דופק. זה אומר שבכל דופק אנחנו מתקדמים קדימה עם 0.57 מעלות.

y הוא מחזור העבודה ו- x ערך המיקום במחזור חצי עבודה. בהתחלה x הוא 0, כי x = 0.57, x = 1.14 וכן הלאה עד x = 180.

אם אנו מחשבים את כל 314 הערכים נקבל מערך 314 אלמנטים (הקלד "int" לחישוב קל יותר על ידי arduino).

מערך כזה הוא:

int sinPWM = {1, 2, 5, 7, 10, 12, 15, 17, 19, 22, 24, 27, 30, 32, 34, 37, 39, 42, 44, 47, 49, 52, 54, 57, 59, 61, 64, 66, 69, 71, 73, 76, 78, 80, 83, 85, 88, 90, 92, 94, 97, 99, 101, 103, 106, 108, 110, 113, 115, 117, 119, 121, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 169, 171, 173, 175, 177, 178, 180, 182, 184, 185, 187, 188, 190, 192, 193, 195, 196, 198, 199, 201, 202, 204, 205, 207, 208, 209, 211, 212, 213, 215, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 249, 249, 249, 249, 249, 248, 248, 248, 248, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 240, 239, 238, 237, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217, 21 6, 215, 213, 212, 211, 209, 208, 207, 205, 204, 202, 201, 199, 198, 196, 195, 193, 192, 190, 188, 187, 185, 184, 182, 180, 178, 177, 175, 173, 171, 169, 168, 166, 164, 162, 160, 158, 156, 154, 152, 150, 148, 146, 144, 142, 140, 138, 136, 134, 132, 130, 128, 126, 124, 121, 119, 117, 115, 113, 110, 108, 106, 103, 101, 99, 97, 94, 92, 90, 88, 85, 83, 80, 78, 76, 73, 71, 69, 66, 64, 61, 59, 57, 54, 52, 49, 47, 44, 42, 39, 37, 34, 32, 30, 27, 24, 22, 19, 17, 15, 12, 10, 7, 5, 2, 1};

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

שלב 2: תוכנית Arduino למחזור עבודה משתנה

תוכנית Arduino למחזור עבודה משתנה
תוכנית Arduino למחזור עבודה משתנה

בתמונה למעלה יש לנו אותות מחזורי חובה משתנים עם ערכים מהמערך.

אבל איך עושים אות כזה ??

החלק של התוכנית שלהלן משתמש בפסיקות לשינוי ערכי מחזורי העבודה

sei (); // אפשר הפרעות

}

ISR (TIMER1_COMPA_vect) {// הפרעה כאשר טיימר 1 תואם לערך OCR1A

if (i> 313 && OK == 0) {// ערך סופי מהווקטור עבור סיכה 6

i = 0; // עבור לערך הראשון של וקטור (מערך)

אישור = 1; // הפעל סיכה 5

}

x = sinPWM ; // x לקחת את הערך מהווקטור המתאים למיקום i (i הוא אפס לאינדקס)-ערך מחזור החובה

i = i+1; // עבור למיקום הבא

}

שלב 3: לסירוגין בסיכות Arduino 50Hz

מתחלפים בסיכות Arduino 50Hz
מתחלפים בסיכות Arduino 50Hz

מכיוון שכל סיכה מייצרת מחזור חצי עבודה בלבד כדי ליצור גל סינוס מלא אנו משתמשים בשני סיכות המתחלפות אחת אחרי השנייה לאחר 10 שניות מדויקות (למשך 50 הרץ). שינוי הפינים הזה מתבצע בסוף המערך- אחרי שנניח שסיכה 5 יצרה 314 פולסים סיכה זו כבויה ומופעלת סיכה 6 מה שהופך את אותו הדבר אך למחזור העבודה השלילי.

מכיוון שארדואינו יכול לייצר רק אותות חיוביים מחזור עבודה שלילי מתבצע בגשר h- אתה יכול לקרוא כאן על זה

התוכנית לשינוי סיכות:

sei (); // אפשר הפרעות

}

ISR (TIMER1_COMPA_vect) {// הפרעה כאשר טיימר 1 תואם לערך OCR1A

if (i> 313 && OK == 0) {// ערך סופי מהווקטור עבור סיכה 6

i = 0; // עבור לערך הראשון של וקטור

אישור = 1; // הפעל סיכה 5

}

if (i> 313 && OK == 1) {// ערך סופי מהווקטור עבור סיכה 5

i = 0; // עבור לערך הראשון של וקטור

אישור = 0; // הפעל סיכה 6

}

x = sinPWM ; // x לקחת את הערך מהווקטור המתאים למיקום i (i הוא צמוד לאפס)

i = i+1; // עבור למיקום הבא

אם (אישור == 0) {

OCR0B = 0; // צור סיכה 5 0

OCR0A = x; // אפשר את סיכה 6 למחזור העבודה המתאים

אם (אישור == 1) {

OCR0A = 0; // יוצרים סיכה 6 0

OCR0B = x; // אפשר את סיכה 5 למחזור העבודה המתאים

}

}

שלב 4: נסיעה בגשר H וסינון אות Pwm

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

גשר H מוצג כאן.

מסנן המעבר הנמוך נבדק עם מנועי AC קטנים-כאן.

מוּמלָץ: