جدول المحتويات:

متحكم AVR. تعديل عرض النبض. متحكم محرك DC وشدة ضوء LED: 6 خطوات
متحكم AVR. تعديل عرض النبض. متحكم محرك DC وشدة ضوء LED: 6 خطوات

فيديو: متحكم AVR. تعديل عرض النبض. متحكم محرك DC وشدة ضوء LED: 6 خطوات

فيديو: متحكم AVR. تعديل عرض النبض. متحكم محرك DC وشدة ضوء LED: 6 خطوات
فيديو: AVR Microcontroller. Pulse Width Modulation. Сontroller of DC Motor and LED light intensity 2024, يوليو
Anonim
Image
Image

مرحبا بالجميع!

يعد تعديل عرض النبض (PWM) تقنية شائعة جدًا في الاتصالات السلكية واللاسلكية والتحكم في الطاقة. يتم استخدامه بشكل شائع للتحكم في الطاقة التي يتم تغذيتها لجهاز كهربائي ، سواء كان محركًا أو مصباح LED أو مكبرات صوت ، وما إلى ذلك. إنها في الأساس تقنية تعديل ، حيث يتنوع عرض نبضة الموجة الحاملة وفقًا لإشارة الرسالة التناظرية.

نصنع دائرة كهربائية بسيطة للتحكم في سرعة دوران محرك التيار المستمر في شدة الضوء. سنستخدم المقاوم المعتمد على الضوء وميزات متحكم AVR مثل التحويل التناظري إلى الرقمي لقياس شدة الضوء. كما سنستخدم وحدة تشغيل محرك جسر H مزدوج- L298N. يتم استخدامه عادةً في التحكم في سرعة واتجاه المحركات ، ولكن يمكن استخدامه في مشاريع أخرى مثل قيادة سطوع بعض مشاريع الإضاءة. أضف أيضًا زرًا إلى دائرتنا لتبديل اتجاه دوران المحرك.

الخطوة 1: الوصف

وصف
وصف
وصف
وصف

كل شخص في هذا العالم لديه بعض القصور الذاتي. يدور المحرك كلما تم تشغيله. بمجرد إيقاف تشغيله ، سوف يميل إلى التوقف. لكن الأمر لا يتوقف على الفور ، فهو يستغرق بعض الوقت. ولكن قبل أن يتوقف تمامًا ، يتم تشغيله مرة أخرى! وهكذا يبدأ في التحرك. ولكن حتى الآن ، يستغرق الأمر بعض الوقت للوصول إلى السرعة القصوى. ولكن قبل حدوث ذلك ، يتم إيقاف تشغيله ، وما إلى ذلك. وبالتالي ، فإن التأثير الإجمالي لهذا الإجراء هو أن المحرك يدور بشكل مستمر ، ولكن بسرعة أقل.

تعديل عرض النبضة (Pulse Width Modulation (PWM)) هو أسلوب حديث نسبياً لتحويل الطاقة لتوفير كميات وسيطة من الطاقة الكهربائية بين مستويات التشغيل الكامل والإيقاف الكامل. عادةً ما يكون للنبضات الرقمية نفس الفترة الزمنية للتشغيل والإيقاف ، ولكن في بعض الحالات نحتاج إلى أن يكون النبض الرقمي أكثر / أقل في الوقت / الراحة. في تقنية PWM ، نقوم بإنشاء نبضات رقمية بكمية غير متساوية من حالة التشغيل والإيقاف للحصول على قيم الجهد المتوسط المطلوبة.

يتم تحديد دورة التشغيل من خلال النسبة المئوية لمدة الجهد العالي في نبضة رقمية كاملة. يمكن حسابها من خلال:

النسبة المئوية لدورة العمل = T on / T (الفترة الزمنية) × 100

دعونا نأخذ بيان المشكلة. نحتاج إلى إنشاء إشارة 50 هرتز PWM لها دورة عمل 45٪.

التردد = 50 هرتز

الفترة الزمنية ، T = T (on) + T (off) = 1/50 = 0.02 s = 20 ms

دورة العمل = 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 بت). Timer / Counter0 هو أبسط جهاز PWM على ATmega328. Timer / Counter0 قادر على العمل في 3 أوضاع:

  • سريع PWM
  • تصحيح الطور والتردد PWM
  • المرحلة تصحيح PWM

يمكن عكس كل من هذه الأوضاع أو عدم عكسها.

تهيئة Timer0 في وضع PWM:

TCCR0A | = (1 << WGM00) | (1 << WGM01) - إعداد WGM: Fast 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 من مواد شبه موصلة لتمكينها من الحصول على خصائصها الحساسة للضوء. تعمل LDRs أو مقاومات الصور على مبدأ "موصلية الصورة". الآن ما يقوله هذا المبدأ هو عندما يسقط الضوء على سطح 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

شاهد الفيديو مع وصف مفصل لوحدة التحكم الدقيقة ADC AVR: متحكم AVR. قياس شدة الضوء. ADC & LDR

الخطوة 4: وحدة التحكم في محرك التيار المستمر ووحدة تشغيل محرك الجسر H المزدوج- L298N

محرك تيار مستمر للتحكم ووحدة تشغيل محرك جسر H مزدوج- L298N
محرك تيار مستمر للتحكم ووحدة تشغيل محرك جسر H مزدوج- L298N
محرك تيار مستمر للتحكم ووحدة تشغيل محرك جسر H مزدوج- L298N
محرك تيار مستمر للتحكم ووحدة تشغيل محرك جسر H مزدوج- L298N
محرك تيار مستمر للتحكم ووحدة تشغيل محرك جسر H مزدوج- L298N
محرك تيار مستمر للتحكم ووحدة تشغيل محرك جسر H مزدوج- L298N

نحن نستخدم محركات DC لأن المتحكمات الدقيقة غير قادرة على توصيل تيار لا يزيد عن 100 مللي أمبير بشكل عام. المتحكمات الدقيقة ذكية ولكنها ليست قوية ؛ ستضيف هذه الوحدة بعض العضلات إلى وحدات التحكم الدقيقة لتشغيل محركات التيار المستمر عالية الطاقة. يمكنه التحكم في محركي DC في وقت واحد حتى 2 أمبير لكل محرك أو محرك متدرج واحد. يمكننا التحكم في السرعة باستخدام PWM وكذلك اتجاه دوران المحركات. أيضًا ، يتم استخدامه لقيادة سطوع شريط LED.

دبوس الوصف:

منفذ OUT1 و OUT2 ، وهو مخصص لتوصيل محرك التيار المستمر. OUT3 و OUT4 لتوصيل شريط LED.

تعمل ENA و ENB على تمكين المسامير: من خلال توصيل ENA إلى مستوى عالٍ (+ 5 فولت) ، فإنه يتيح منفذ OUT1 و OUT2.

إذا قمت بتوصيل دبوس ENA بالمنخفض (GND) ، فإنه يقوم بتعطيل OUT1 و OUT2. وبالمثل ، بالنسبة لـ ENB و OUT3 و OUT4.

IN1 إلى IN4 هي دبابيس الإدخال التي سيتم توصيلها بـ AVR.

إذا كان IN1-high (+ 5V) ، IN2-low (GND) ، يتحول OUT1 إلى أعلى ويتحول OUT2 إلى مستوى منخفض ، وبالتالي يمكننا قيادة المحرك.

إذا كان IN3-high (+ 5V) ، IN4-low (GND) ، يتحول OUT4 إلى مرتفع ويتحول OUT3 إلى مستوى منخفض ، وبالتالي يكون مصباح الشريط LED قيد التشغيل.

إذا كنت ترغب في عكس اتجاه دوران المحرك ، ما عليك سوى عكس قطبي IN1 و IN2 ، وبالمثل بالنسبة لـ IN3 و IN4.

من خلال تطبيق إشارة PWM على ENA و ENB ، يمكنك التحكم في سرعة المحركات على منفذي إخراج مختلفين.

يمكن للوحة أن تقبل من 7 فولت إلى 12 فولت اسميًا.

لاعبا: هناك ثلاثة دبابيس العبور. الطائر 1: إذا كنت تحتاج إلى أكثر من 12 فولت ، فيجب عليك فصل Jumper 1 وتطبيق الجهد المطلوب (بحد أقصى 35 فولت) عند طرف 12V. أحضر مصدرًا ومدخلًا آخر بجهد 5 فولت عند محطة 5 فولت. نعم ، يجب عليك إدخال 5 فولت إذا كنت بحاجة إلى تطبيق أكثر من 12 فولت (عند إزالة Jumper 1).

يعد إدخال 5 فولت من أجل التشغيل السليم لـ IC ، نظرًا لأن إزالة العبور سيعطل منظم 5V المدمج ويحمي من جهد الدخل العالي من طرف 12V.

تعمل المحطة الطرفية 5 فولت كإخراج إذا كان مصدر الإمداد لديك يتراوح بين 7 فولت إلى 12 فولت ويعمل كمدخل إذا قمت بتطبيق أكثر من 12 فولت وتم إزالة العبور.

Jumper 2 و Jumper 3: إذا قمت بإزالة هذين العبورين ، فيجب عليك إدخال إشارة التمكين والتعطيل من وحدة التحكم الدقيقة ، ويفضل معظم المستخدمين إزالة العبور وتطبيق الإشارة من متحكم دقيق.

إذا احتفظت بالعبوتين ، فسيتم دائمًا تمكين OUT1 إلى OUT4. تذكر وصلة ENA لـ OUT1 و OUT2. وصلة عبور ENB لـ OUT3 و OUT4.

الخطوة 5: كتابة رمز لبرنامج في C. تحميل ملف HEX إلى ذاكرة فلاش متحكم دقيق

كتابة وبناء تطبيق متحكم AVR في كود C باستخدام منصة التطوير المتكاملة - Atmel Studio.

#ifndef F_CPU # حدد F_CPU 16000000UL // إخبار وحدة التحكم بتردد الكريستال (16 ميجا هرتز AVR ATMega328P) #endif

# تضمين // رأس لتمكين التحكم في تدفق البيانات عبر المسامير. يحدد المسامير والمنافذ وما إلى ذلك # تضمين // رأس لتمكين وظيفة التأخير في البرنامج

#define BUTTON1 2 // زر التبديل متصل بالمنفذ B رقم 2 #define DEBOUNCE_TIME 25 // وقت الانتظار أثناء زر "إزالة الارتداد" # حدد LOCK_INPUT_TIME 300 // وقت الانتظار بعد الضغط على الزر

// Timer0 و PWM Initialization void timer0_init () {// إعداد مؤقت OC0A و OC0B pin في وضع التبديل ووضع CTC TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01) ؛ // إعداد جهاز ضبط الوقت باستخدام مقياس مسبق = 256 TCCR0B | = (1 << CS02) ؛ // تهيئة العداد TCNT0 = 0 ؛ // تهيئة قيمة المقارنة OCR0A = 0 ؛ }

// ADC Initialization void ADC_init () {// Enable ADC، sampling freq = osc_freq / 128 set prescaler to max value، 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0) ؛

ADMUX = (1 << REFS0) ؛ // حدد مرجع الجهد (AVCC)

// حالة تبديل الزر غير موقعة char button_state () {

/ * يتم الضغط على الزر عندما يكون BUTTON1 بت واضحًا * /

إذا كان (! (PINB & (1 <

{

_delay_ms (DEBOUNCE_TIME) ،

إذا كان (! (PINB & (1 <

}

العودة 0 ؛

}

// تهيئة المنافذ باطلة port_init () {DDRB = 0b00011011؛ // PB0-IN1 ، PB1-IN2 ، PB3-IN3 ، PB4-IN4 ، PB2 - BUTTON 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 (باطل)

{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 (معكوسة)

if (button_state ()) // إذا تم الضغط على الزر ، فقم بتبديل حالة LED والتأخير لمدة 300 مللي ثانية (#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 في ذاكرة فلاش متحكم دقيق: اكتب في نافذة موجه DOS الأمر:

avrdude –c [اسم المبرمج] –p m328p –u –U flash: w: [اسم ملف hex الخاص بك]

في حالتي هو:

avrdude –c ISPProgv1 –p m328p –u –U فلاش: w: PWM.hex

يقوم هذا الأمر بكتابة ملف ست عشري في ذاكرة وحدة التحكم الدقيقة. شاهد الفيديو مع وصف تفصيلي لحرق ذاكرة فلاش متحكم دقيق: حرق ذاكرة فلاش متحكم دقيق …

نعم! الآن ، يعمل الميكروكونترولر وفقًا لتعليمات برنامجنا. دعونا التحقق من ذلك!

الخطوة السادسة: الدائرة الكهربائية

الدائرة الكهربائية
الدائرة الكهربائية
الدائرة الكهربائية
الدائرة الكهربائية

قم بتوصيل المكونات وفقًا للرسم التخطيطي.

موصى به: