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

בקר מיקרו AVR. אפנון רוחב הדופק. בקרת מנוע DC ועוצמת אור LED: 6 שלבים
בקר מיקרו AVR. אפנון רוחב הדופק. בקרת מנוע DC ועוצמת אור LED: 6 שלבים

וִידֵאוֹ: בקר מיקרו AVR. אפנון רוחב הדופק. בקרת מנוע DC ועוצמת אור LED: 6 שלבים

וִידֵאוֹ: בקר מיקרו AVR. אפנון רוחב הדופק. בקרת מנוע DC ועוצמת אור LED: 6 שלבים
וִידֵאוֹ: Pro Micro ATMEGA32U4 Arduino Pins and 5V, 3.3V Explained 2024, יולי
Anonim
Image
Image

שלום לכולם!

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

אנו יוצרים מעגל חשמלי פשוט לשליטה על מהירות הסיבוב של מנוע DC בעוצמת האור. אנו הולכים להשתמש בנגן תלוי אור ומיקרו -בקר AVR כגון המרה אנלוגית לדיגיטלית כדי למדוד את עוצמת האור. כמו כן אנו הולכים להשתמש במודול נהג מנוע כפול H-Bridge-L298N. הוא משמש בדרך כלל לשליטה על מהירות וכיוון המנועים, אך ניתן להשתמש בו לפרויקטים אחרים כגון נהיגה בהירות של פרויקטי תאורה מסוימים. כמו כן, הוסיף לחצן למעגל שלנו כדי להחליף את כיוון הסיבוב של המנוע.

שלב 1: תיאור

תיאור
תיאור
תיאור
תיאור

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

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

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

% ממחזור העבודה = T on /T (זמן תקופה) x 100

הבה ניקח הצהרה על בעיה. עלינו לייצר אות PWM של 50 הרץ בעל מחזור עבודה של 45%.

תדר = 50 הרץ

פרק זמן, T = T (מופעל) + T (כבוי) = 1/50 = 0.02 שניות = 20 אלפיות השנייה

מחזור עבודה = 45%

לפיכך, פתרון לפי המשוואה שניתנה לעיל, נקבל

T (מופעל) = 9 אלפיות השנייה

T (כבוי) = 11 אלפיות השנייה

שלב 2: טיימרים של AVR - מצב PWM

טיימרים AVR - מצב PWM
טיימרים AVR - מצב PWM
טיימרים של AVR - מצב PWM
טיימרים של AVR - מצב PWM

להכנת PWM, AVR מכיל חומרה נפרדת! על ידי שימוש זה, המעבד מורה לחומרה לייצר PWM של מחזור עבודה מסוים. ל- ATmega328 יש 6 יציאות PWM, 2 ממוקמות על טיימר/מונה 0 (8 ביט), 2 ממוקמות על טיימר/נגד 1 (16 ביט), ו -2 ממוקמות על טיימר/נגד 2 (8 ביט). טיימר/מונה 0 הוא מכשיר ה- PWM הפשוט ביותר ב- ATmega328. טיימר/מונה 0 מסוגל לפעול בשלושה מצבים:

  • PWM מהיר
  • PWM מתוקן שלב ותדירות
  • שלב PWM מתוקן

כל אחד מהמצבים הללו יכול להיות הפוך או לא הפוך.

אתחול טיימר 0 במצב PWM:

TCCR0A | = (1 << WGM00) | (1 << WGM01) - הגדר WGM: PWM מהיר

TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - הגדר השווה מצב פלט A, B

TCCR0B | = (1 << CS02) - הגדרת טיימר עם מסנן מראש = 256

שלב 3: מדידת עוצמת אור - ADC & LDR

מדידת עוצמת אור - ADC & LDR
מדידת עוצמת אור - ADC & LDR
מדידת עוצמת אור - ADC & LDR
מדידת עוצמת אור - ADC & LDR
מדידת עוצמת אור - ADC & LDR
מדידת עוצמת אור - ADC & LDR

התנגדות תלויה באור (LDR) היא מתמר המשנה את התנגדותו כאשר אור נופל על פני השטח שלו משתנה.

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

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

אותות דיגיטליים הם מקבילים אנלוגיים בפורמט דיגיטלי או מספרי המובנים היטב על ידי מערכות דיגיטליות כמו בקרי מיקרו. ADC היא חומרה כזו המודדת אותות אנלוגיים ומייצרת מקבילה דיגיטלית לאותו אות. לבקרי מיקרו AVR יש מתקן ADC מובנה להמרת מתח אנלוגי למספר שלם. AVR ממיר אותו למספר 10 סיביות בטווח 0 עד 1023.

אנו משתמשים בממיר אנלוגי לדיגיטלי של רמת המתח ממעגל מפריד עם LDR למדידת עוצמת האור.

אתחול ADC:

TADCSRA | = (1 << ADEN) - אפשר ADC

ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - הגדר מראש מסנן ADC = 128

ADMUX = (1 << REFS0) - הגדרת התייחסות מתח = AVCC; - הגדר ערוץ קלט = ADC0

צפה בסרטון עם תיאור מפורט של המיקרו -בקר ADR AVR: מיקרו -בקר AVR. מדידת עוצמת אור. ADC ו- LDR

שלב 4: בקר מנוע DC ומודול נהג מנוע כפול H-Bridge-L298N

בקר מנוע DC ומודול נהג מנוע כפול H-Bridge-L298N
בקר מנוע DC ומודול נהג מנוע כפול H-Bridge-L298N
בקר מנוע DC ומודול נהג מנוע כפול H-Bridge-L298N
בקר מנוע DC ומודול נהג מנוע כפול H-Bridge-L298N
בקר מנוע DC ומודול נהג מנוע כפול H-Bridge-L298N
בקר מנוע DC ומודול נהג מנוע כפול H-Bridge-L298N

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

תיאור סיכה:

יציאת OUT1 ו- OUT2, המיועדת לחיבור מנוע DC. OUT3 ו- OUT4 לחיבור קלטת לד.

ENA ו- ENB הם סיכות הפעלה: על ידי חיבור ENA לגבוה (+5V) הוא מאפשר את יציאת OUT1 ו- OUT2.

אם אתה מחבר את סיכת ENA ל- low (GND), הוא משבית את OUT1 ו- OUT2. באופן דומה, עבור ENB ו- OUT3 ו- OUT4.

IN1 עד IN4 הם סיכות הכניסה שיחוברו ל- AVR.

אם IN1 גבוה (+5V), IN2 נמוך (GND), OUT1 הופך גבוה ו- OUT2 הופך נמוך, וכך נוכל להניע מנוע.

אם IN3 גבוה (+5V), IN4 נמוך (GND), ה- OUT4 הופך גבוה ו- OUT3 הופך נמוך, ולכן נורית קלטת LED דולקת.

אם אתה רוצה להפוך את כיוון הסיבוב של המנוע פשוט הפוך את הקוטביות IN1 ו- IN2, באופן דומה עבור IN3 ו- IN4.

על ידי החלת אות PWM ל- ENA ו- ENB תוכל לשלוט במהירות המנועים בשתי יציאות פלט שונות.

הלוח יכול לקבל בין 7V ל 12V באופן נומינלי.

מגשרים: ישנם שלושה סיכות מגשר; מגשר 1: אם המנוע שלך זקוק ליותר מ 12V אספקה, עליך לנתק את המגשר 1 ולהפעיל מתח רצוי (מקסימום 35V) במסוף 12V. הבא אספקת 5V נוספת וקלט במסוף 5V. כן, עליך להזין 5V אם עליך להפעיל יותר מ 12V (כאשר מגשר 1 מוסר).

כניסת 5V מיועדת לתפקוד תקין של ה- IC, שכן הסרת המגשר תשבית את הרגולטור 5V המובנה ותגן מפני מתח כניסה גבוה יותר ממסוף 12V.

מסוף 5V פועל כפלט אם אספקת החשמל שלך היא בין 7V ל 12V ומשמש כקלט אם אתה מפעיל יותר מ 12V והמגשר יוסר.

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

אם תשמור את שני הקופצים ה- OUT1 עד OUT4 תמיד יהיה מופעל. זכור את מגשר ENA עבור OUT1 ו- OUT2. מגשר ENB עבור OUT3 ו- OUT4.

שלב 5: כתיבת קוד לתוכנית ב- C. העלאת קובץ HEX לזיכרון הבזק של המיקרו -בקר

כתיבה ובניית יישום מיקרו -בקר AVR בקוד C באמצעות פלטפורמת הפיתוח המשולב - Atmel Studio.

#ifndef F_CPU #הגדר F_CPU 16000000UL // מספר תדר קריסטל בקר (16 MHz AVR ATMega328P) #endif

#include // header כדי לאפשר בקרת זרימת נתונים על סיכות. מגדיר סיכות, יציאות וכו '#include // header כדי לאפשר פונקציית עיכוב בתוכנית

#הגדר BUTTON1 מתג לחצן 2 // מחובר ליציאה B סיכה 2 #הגדר DEBOUNCE_TIME 25 // זמן המתנה בזמן כפתור "ביטול הקפצה" #הגדר LOCK_INPUT_TIME 300 // זמן המתנה לאחר לחיצה על לחצן

// טיימר 0, PWM אתחול חלל timer0_init () {// הגדרת טיימר OC0A, סיכת OC0B במצב החלפה ומצב CTC TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // הגדרת טיימר עם מכשיר הגנה מראש = 256 TCCR0B | = (1 << CS02); // לאתחל מונה TCNT0 = 0; // לאתחל ערך השוואה OCR0A = 0; }

// ADC Initialization void ADC_init () {// אפשר ADC, freq sample = osc_freq/128 הגדר prescaler לערך מקסימלי, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

ADMUX = (1 << REFS0); // בחר הפניית מתח (AVCC)

// סטטוס של מתג לחצנים char_state () לא חתום () {

/ * נלחץ על הכפתור כאשר ה- BUTTON1 bit ברור */

אם (! (PINB & (1 <

{

_ delay_ms (DEBOUNCE_TIME);

אם (! (PINB & (1 <

}

החזר 0;

}

// אתחול הפתיחה של פורטים port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2-BITTON SWITCH DIRECT PORTB = 0b00010110;

DDRD = 0b01100000; // PD5-ENB (OC0B), PD6-ENA (OC0A) PORTD = 0b00000000;

DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // הגדר את כל סיכות ה- PORTC נמוכות מה שמכבה אותו. }

// פונקציה זו קוראת את הערך של הממיר האנלוגי לדיגיטלי. uint16_t get_LightLevel () {_delay_ms (10); // המתן זמן מה עד שהערוץ יקבל את ADCSRA | = (1 << ADSC) הנבחר; // התחל את המרת ה- ADC על ידי הגדרת ביט ADSC. כתוב 1 ל- ADSC

בעוד (ADCSRA & (1 << ADSC)); // המתן להשלמת ההמרה

// ADSC הופך שוב ל- 0 עד אז, הפעל לולאה ברציפות _delay_ms (10); החזרה (ADC); // החזר את התוצאה של 10 סיביות

}

// פונקציה זו ממפה מחדש מספר מטווח אחד (0-1023) למשנהו (0-100). uint32_t map (uint32_t x, uint32_t in_min, uint32_t in_max, uint32_t out_min, uint32_t out_max) {return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }

int main (void)

{uint16_t i1 = 0;

port_init ();

timer0_init (); ADC_init (); // אתחול ADC

בעוד (1)

{i1 = map (get_LightLevel (), 0, 1023, 0, 100);

OCR0A = i1; // הגדר פלט השווה ערוץ רישום A OCR0B = 100-i1; // הגדר פלט השווה ערוץ B (הפוך)

אם (button_state ()) // אם לוחצים על הלחצן, החלף את מצב הנורית והעיכוב במשך 300ms (#define LOCK_INPUT_TIME) {PORTB ^= (1 << 0); // החלפת המצב הנוכחי של הסיכה IN1. PORTB ^= (1 << 1); // החלפת המצב הנוכחי של הסיכה IN2. הפוך את כיוון הסיבוב של המנוע

PORTB ^= (1 << 3); // החלפת המצב הנוכחי של הסיכה IN3. PORTB ^= (1 << 4); // החלפת המצב הנוכחי של סיכה IN4. קלטת LED כבויה/מופעלת. _ delay_ms (LOCK_INPUT_TIME); }}; החזרה (0); }

התכנות הושלם. לאחר מכן, בניית וריכוז קוד הפרויקט לקובץ hex.

העלאת קובץ HEX לזיכרון הבזק של המיקרו -בקר: הקלד בחלון שורת DOS את הפקודה:

avrdude –c [שם המתכנת] –p m328p –u –U פלאש: w: [שם קובץ ה- hex שלך]

במקרה שלי זה:

avrdude –c ISPProgv1 –p m328p –u –U פלאש: w: PWM.hex

פקודה זו כותבת קובץ hex לזיכרון המיקרו -בקר. צפה בסרטון עם תיאור מפורט של צריבת זיכרון ההבזק של המיקרו -בקר: צריבת זיכרון הבזק של מיקרו -בקר …

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

שלב 6: המעגל החשמלי

מעגל החשמל
מעגל החשמל
מעגל החשמל
מעגל החשמל

חבר רכיבים בהתאם לתרשים סכמטי.

מוּמלָץ: