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

מדידת תדר ומתח של ספק כוח באמצעות Arduino: 6 שלבים
מדידת תדר ומתח של ספק כוח באמצעות Arduino: 6 שלבים

וִידֵאוֹ: מדידת תדר ומתח של ספק כוח באמצעות Arduino: 6 שלבים

וִידֵאוֹ: מדידת תדר ומתח של ספק כוח באמצעות Arduino: 6 שלבים
וִידֵאוֹ: Бесконтактный датчик температуры дальнего действия MLX90614-DCI с Arduino 2024, נוֹבֶמבֶּר
Anonim
מדידת תדר ומתח של ספק כוח באמצעות Arduino
מדידת תדר ומתח של ספק כוח באמצעות Arduino

מבוא:

מטרת הפרויקט היא למדוד את תדירות האספקה והמתח, שהם בין 220 ל 240 וולט ל 50 הרץ כאן בהודו. השתמשתי בארדואינו ללכידת אות וחישוב תדר ומתח, תוכל להשתמש בכל מיקרו -בקר או לוח אחר שיש לך. המעגל דורש קומץ רכיבים ומדויק למדי לכל מטרה מעשית.

שלב 1: דרושים רכיבים

  • ארדואינו אונו
  • IC LM358
  • שנאי הורדה (220V עד 12V)
  • קבלים:

    • 0.1uF
    • 2 x 1uF
  • נגדים:

    • 3 x 1 קאוהם
    • 2 x 100 קאוהם
    • 1.5 קאוהם
    • 3.3 קאוהם
    • 6.8 קאוהם
  • 3 x 1N4148 דיודה
  • לוח לחם וחוט מגשר (אופציונלי)

שלב 2: תרשים סכמטי

תרשים סכמטי
תרשים סכמטי
תרשים סכמטי
תרשים סכמטי

במעגל הנ ל, השנאי הראשי מחובר לרשת החשמל והראשוני מחובר למעגל המדידה שלנו

שלב 3: הבנת המעגל

הבנת המעגל
הבנת המעגל
הבנת המעגל
הבנת המעגל
הבנת המעגל
הבנת המעגל

על פי הפונקציונליות, ניתן לחלק מעגל זה לארבעה חלקים:

ת: מעגל גלאי מעבר האפס

מעגל זה יוצר דופק מרובע של 5V בכל פעם שגלע הסינוס עובר מחיובי לשלילי. הנגד R1 בשילוב D1 ו- D2 מגביל את תנופת מתח הכניסה בצומת הדיודה ל -0.6V עד +5.6V (בהנחה שמתח קדימה של דיודה יהיה 0.6V). יתר על כן, אתה יכול להגדיל את טווח מתח הכניסה של המעגל על ידי הגדלת הערך של R1.

הנגד R2 ו- R3 יוצרים מחלק מתח כדי להגביל את תנופת המתח השלילי ל -0.24 וולט מכיוון שהמתח במצב משותף קלט של LM358 מוגבל ל -0.3 וולט.

הנגד R4, R5, הקבל C1 וה- amp-amp (המשמש כאן כמשווה) יוצרים את מעגל השמיט טריגר שבו הנגד R4 ו- R5 מגדירים את ההיסטריה בכניסה +49.5mV מעל פני הקרקע. הפלט של טריגר השמיט מוזן ל- PIN2 של Arduino לעיבוד נוסף.

ב: בידוד ומתח לרדת

כפי שהשם מרמז חלק זה מבודד ומוריד את המתח לכ- 12Vrms. המתח המורד מוזר עוד יותר למעגל המכשור.

C: מעגל גלאי שיא

מעגל זה קובע את מתח השיא המרבי של אות הכניסה. מחלק הנגד R6 ו- R7 מפחית את מתח הכניסה בגורם 0.23 (12Vrms מופחת ל -2.76Vrms). הדיודה D3 מנהלת רק את מחזור המחזור החיובי של האות. המתח על פני C2 עולה עד ערך השיא של האות המתוקן, המוזן לסיכה אנלוגית Arduino A0 כדי לחשב עוד את המתח.

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

D: Arduino

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

שלב 4: חישוב תדר ומתח

חישוב התדירות:

בעזרת Arduino, אנו יכולים למדוד את פרק הזמן T של האות. פולסי הגל המרובע מגלאי מעבר האפס מוזנים לפין 2, משם נוכל למדוד את פרק הזמן של כל דופק. אנו יכולים להשתמש בטיימר הפנימי של Arduino (במיוחד טיימר 1) כדי לחשב את פרק הזמן בין שני קצוות עולים של הדופק המרובע בעזרת הפרעות. הטיימר עולה ב- 1 לכל מחזור שעון (ללא מחליק מראש = 1) והערך מאוחסן ברשם TCNT1. מכאן שהשעון של 16 מגה -הרץ מגדיל את המונה ב -16 בכל מיקרו -שנייה. באופן דומה עבור prescaler = 8 הטיימר עולה עם 2 בכל מיקרו שניות. מכאן פרק הזמן בין שני קצה עולה

T = (ערך TCNT1) / הזמן הנדרש לכל ספירה

היכן, הזמן שנלקח לכל ספירה = מכשיר קנה מראש / (מהירות שעון Arduino (16MHz)

לפיכך, תדר f = 1 / T = (מהירות שעון Arduino (16MHz) / (ערך מכשיר טילטון * TCNT!)

מכאן שמהירות הטיימר (הרץ) ניתנת על ידי = (מהירות השעון של ארדואינו (16 מגה -הרץ)) / מכשיר טעינה מראש

ותדירות האות ניתנת על ידי = (מהירות שעון Arduino

בהתאם לכך, אנו יכולים לחשב את התדר f מהיחס f = 1/T.

חישוב המתח:

ל- ADC המשולב של Arduino יש רזולוציה של 10 סיביות (ערכים אפשריים = 2^10 = 1024), המחזירים ערכים בטווח של 0-1023. כדי לחשב את המתח האנלוגי המתאים V עלינו להשתמש ביחס הבא

V = (קריאת ADC) * 5/1023

כדי לחשב את מתח האספקה Vs (rms) עלינו לקחת בחשבון את יחס השנאי, מחלק הנגד R6R7 ומעגל גלאי השיא. אנו יכולים פשוט להרכיב את הגורמים/יחס השונים כ:

יחס שנאי = 12/230 = 0.052

מחלק הנגד = R7/(R6 + R7) = 0.23

מעגל גלאי בשיא = 1.414

Vs (rms) = V/(1.414*0.052*0.23) = (ADC קריאה)*0.289

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

Vs (rms) = ((מתח אספקה *5)/(מתח על פני C2 *1023)) *(קריאת ADC)

במקרה שלי, Vs (rms) = 0.33*(קריאת ADC)

שלב 5: קוד ארדואינו

#הגדר volt_in A0 // סיכת קריאה של מתח אנלוגי

uint16_t t_period נדיף; uint16_t ADC_value = 0; צף וולט, freq; void isr () {t_period = TCNT1; // אחסן ערך TCNT1 ב- t_period TCNT1 = 0; // איפוס טיימר 1 ADC_value = analogRead (volt_in); // קרא מתח אנלוגי} float get_freq () {uint16_t טיימר = t_period; אם (טיימר == 0) החזר 0; // כדי להימנע מחידה באפס אחרת החזר 16000000.0/((8UL*טיימר); // תדירות ניתנת על ידי f = clk_freq/(prescaler*timeperiod)} הגדרת חלל () {TCCR1A = 0; TCCR1B = bit (CS11); // הגדר את מכשיר ההנעה מראש ל- 8 TCNT1 = 0; // אפס ערך TIMER1 TIMSK1 = bit (TOIE1); // הפעל את Timer1 הצפת EIFR | = bit (INTF0); // נקה את הדגל INT0 interrupt Serial.begin (9600); } לולאת חלל () {attachInterrupt (0, isr, RISING); // לאפשר עיכוב חיצוני (INT0) (1000); detachInterrupt (0); freq = get_freq (); volt = ADC_value*0.33; Buf מחרוזת; buf += מחרוזת (תדירות, 3); buf += F ("Hz / t"); buf += מחרוזת (וולט); buf += F ("וולט"); Serial.println (buf); }

שלב 6: מסקנה

סיכום
סיכום
סיכום
סיכום

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

המעגל שהרכבתי בלוח הלחם השתמש ב- LM324 (quad opamp) במקום ב- LM358 (opamp כפול) מכיוון שלא היה לי את ה- IC באותו הרגע והנעילה בפריסה ארצית עקב מגיפת COVID-19 הקשתה עלי להשיג IC חדש. עם זאת, זה לא ישפיע על פעולת המעגל.

אל תהסס להגיב למטה על כל הצעה ושאילתה.

מוּמלָץ: