Mündəricat:

AVR mikro nəzarətçisi. Pulse Genişliyi Modulyasiyası. DC Motor və LED İşıq Gücünün Nəzarətçisi .: 6 Addım
AVR mikro nəzarətçisi. Pulse Genişliyi Modulyasiyası. DC Motor və LED İşıq Gücünün Nəzarətçisi .: 6 Addım

Video: AVR mikro nəzarətçisi. Pulse Genişliyi Modulyasiyası. DC Motor və LED İşıq Gücünün Nəzarətçisi .: 6 Addım

Video: AVR mikro nəzarətçisi. Pulse Genişliyi Modulyasiyası. DC Motor və LED İşıq Gücünün Nəzarətçisi .: 6 Addım
Video: How to use MOSFET Button IRF540 to control 5A to 20A DC Motor or LED light strip 2024, Iyul
Anonim
Image
Image

Hamıya salam!

Pulse Width Modulation (PWM) telekommunikasiya və güc nəzarətində çox yayılmış bir texnikadır. bir elektrik cihazına verilən gücü idarə etmək üçün istifadə olunur, istər motor olsun, istər LED, istər dinamiklər və s..

İşığın intensivliyindən asılı olaraq DC motorunun fırlanma sürətini idarə etmək üçün sadə elektrik dövrəsi qururuq. İşığın intensivliyini ölçmək üçün İşıqdan Asılı Rezistor və Analogdan Rəqəmsal Dönüşüm kimi AVR mikrokontrolör xüsusiyyətlərindən istifadə edəcəyik. Ayrıca, Dual H-Bridge Motor Sürücü Modulu-L298N-dən istifadə edəcəyik. Tipik olaraq mühərriklərin sürətini və istiqamətini idarə etmək üçün istifadə olunur, lakin müəyyən işıqlandırma layihələrinin parlaqlığını idarə etmək kimi digər layihələrdə istifadə edilə bilər. Ayrıca, mühərrikin fırlanma istiqamətini dəyişdirmək üçün dövrəmizə bir düymə əlavə etdi.

Addım 1: Təsvir

Təsvir
Təsvir
Təsvir
Təsvir

Bu dünyanın hər bir bədənində müəyyən ətalət var. Motor işə salındıqda dönər. Güc sönən kimi dayanmağa meylli olacaq. Ancaq dərhal dayanmır, bir az vaxt lazımdır. Ancaq tamamilə dayanmadan, yenidən işə düşür! Beləliklə hərəkət etməyə başlayır. Ancaq indi də tam sürətinə çatmaq üçün bir az vaxt lazımdır. Amma bu baş verməzdən əvvəl söndürülür və s. Beləliklə, bu hərəkətin ümumi təsiri, motorun davamlı, lakin daha aşağı sürətlə fırlanmasıdır.

Pulse Width Modulation (PWM), tamamilə açıq və tamamilə söndürülmüş səviyyələr arasında aralıq miqdarda elektrik enerjisi təmin etmək üçün nisbətən yeni bir güc dəyişdirmə texnikasıdır. Ümumiyyətlə, rəqəmsal pulsların açılma və sönmə müddəti eyni olur, lakin bəzi hallarda vaxtında/fasilədə daha çox/daha az olması üçün rəqəmsal nəbzə ehtiyacımız var. PWM texnikasında, lazım olan aralıq gərginlik dəyərlərini əldə etmək üçün qeyri -bərabər miqdarda açma və söndürmə vəziyyətinə malik rəqəmsal impulslar yaradırıq.

Vəzifə dövrü tam bir rəqəmsal nəbzdə yüksək gərginlik müddətinin faizi ilə müəyyən edilir. Bunu hesablamaq olar:

Duty dövrünün % -i = T on /T (dövr müddəti) x 100

Bir problem ifadəsini götürək. 45% iş dövrü olan 50 Hz PWM siqnalı yaratmalıyıq.

Tezlik = 50 Hz

Zaman dövrü, T = T (açıq) + T (söndürülmüş) = 1/50 = 0.02 s = 20 ms

İş dövrü = 45%

Beləliklə, yuxarıda verilən tənliyə görə həll edərək əldə edirik

T (aktiv) = 9 ms

T (söndürülmüş) = 11 ms

Addım 2: AVR Taymerləri - PWM rejimi

AVR Taymerləri - PWM rejimi
AVR Taymerləri - PWM rejimi
AVR Taymerləri - PWM rejimi
AVR Taymerləri - PWM rejimi

PWM etmək üçün AVR -də ayrı bir aparat var! Bunu istifadə edərək, CPU, xüsusi bir iş dövrünün PWM istehsal etməsi üçün aparata təlimat verir. ATmega328 -in 6 PWM çıxışı var, 2 -si taymer/sayaç0 (8bit), 2 -si taymer/sayaç1 (16bit), 2 -si taymer/sayğac 2 (8 bit) üzərində yerləşir. Timer/Counter0, ATmega328 -də ən sadə PWM cihazıdır. Timer/Counter0 3 rejimdə işləyə bilər:

  • Sürətli PWM
  • Faza və Tezlik Düzəldilmiş PWM
  • Faza Düzəldilmiş PWM

bu rejimlərin hər biri tərs və ya ters çevrilə bilər.

Timer0 -i PWM rejimində işə salın:

TCCR0A | = (1 << WGM00) | (1 << WGM01) - WGM qurun: Fast PWM

TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - A, B çıxış rejimini müqayisə edin

TCCR0B | = (1 << CS02) - prescaler = 256 ilə timer qurun

Addım 3: İşıq intensivliyinin ölçülməsi - ADC & LDR

İşıq intensivliyinin ölçülməsi - ADC & LDR
İşıq intensivliyinin ölçülməsi - ADC & LDR
İşıq intensivliyinin ölçülməsi - ADC & LDR
İşıq intensivliyinin ölçülməsi - ADC & LDR
İşıq intensivliyinin ölçülməsi - ADC & LDR
İşıq intensivliyinin ölçülməsi - ADC & LDR

İşığa Bağlı Rezistor (LDR), səthə işıq düşəndə müqavimətini dəyişən bir çeviricidir.

LDR -lər, işığa həssas xüsusiyyətlərə malik olmaq üçün yarımkeçirici materiallardan hazırlanır. Bu LDR -lər və ya FOTO Rezistorlar "Foto keçiricilik" prinsipi üzərində işləyirlər. İndi bu prinsipin dediyi odur ki, LDR səthinə işıq düşəndə (bu halda) elementin keçiriciliyi artır və ya başqa sözlə LDR səthinə işıq düşəndə LDR müqaviməti azalır. LDR üçün müqavimətin azalmasının bu xüsusiyyəti, səthdə istifadə olunan yarımkeçirici bir materialın xüsusiyyətinə görə əldə edilir. LDR əksər hallarda işığın varlığını aşkar etmək və ya işığın intensivliyini ölçmək üçün istifadə olunur.

Xarici fasiləsiz məlumatları (analoq məlumatları) rəqəmsal/hesablama sisteminə köçürmək üçün onları tam (rəqəmsal) dəyərlərə çevirməliyik. Bu növ çevrilmə Analogdan Digital Converter (ADC) tərəfindən həyata keçirilir. Bir analoq dəyərin rəqəmsal dəyərə çevrilməsi prosesi Analogdan Rəqəmsal Konversiyaya deyilir. Bir sözlə, analog siqnallar səs və işıq kimi ətrafımızdakı real dünya siqnallarıdır.

Rəqəmsal siqnallar, mikro nəzarətçilər kimi rəqəmsal sistemlər tərəfindən yaxşı başa düşülən rəqəmsal və ya rəqəmsal formatda analoq ekvivalentlərdir. ADC, analoq siqnalları ölçən və eyni siqnalın rəqəmsal ekvivalentini istehsal edən bir cihazdır. AVR mikrokontrolörləri, analog gərginliyi tam bir rəqəmə çevirmək üçün quraşdırılmış ADC qurğusuna malikdir. AVR onu 10 bitlik 0-dan 1023 aralığına çevirir.

İşığın intensivliyini ölçmək üçün LDR ilə bölücü dövrədən gərginlik səviyyəsinin analoqdan rəqəmsal çevrilməsinə istifadə edirik.

ADC -ni işə salın:

TADCSRA | = (1 << ADEN) - ADC -i aktiv edin

ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - ADC prescaler = 128 qurun

ADMUX = (1 << REFS0) - gərginlik istinadını qurun = AVCC; - Giriş Kanalını qurun = ADC0

Videoya ADC AVR mikrokontrolörünün ətraflı təsviri ilə baxın: AVR Mikrokontroller. İşıq intensivliyinin ölçülməsi. ADC & LDR

Addım 4: Controller DC Motor & Dual H-Bridge Motor Sürücü Modulu-L298N

Controller DC Motor və Dual H-Bridge Motor Sürücü Modulu-L298N
Controller DC Motor və Dual H-Bridge Motor Sürücü Modulu-L298N
Controller DC Motor və Dual H-Bridge Motor Sürücü Modulu-L298N
Controller DC Motor və Dual H-Bridge Motor Sürücü Modulu-L298N
Controller DC Motor və Dual H-Bridge Motor Sürücü Modulu-L298N
Controller DC Motor və Dual H-Bridge Motor Sürücü Modulu-L298N

DC motor sürücülərindən istifadə edirik, çünki mikro nəzarətçilər ümumiyyətlə 100 milliampdan çox olmayan cərəyan verə bilmirlər. Mikro nəzarətçilər ağıllıdır, lakin güclü deyil; Bu modul, yüksək güclü DC mühərrikləri idarə etmək üçün mikrokontrolörlərə bəzi əzələlər əlavə edəcək. Hər biri 2 amperə qədər və ya bir pilləli mühərriklə eyni vaxtda 2 DC mühərriki idarə edə bilər. PWM istifadə edərək sürəti və mühərriklərin fırlanma istiqamətini idarə edə bilərik. Ayrıca, LED lentin parlaqlığını idarə etmək üçün istifadə olunur.

Pin təsviri:

DC mühərrikini birləşdirmək üçün OUT1 və OUT2 portu. LED lentini bağlamaq üçün OUT3 və OUT4.

ENA və ENB aktivləşdirmə pinləridir: ENA -nı yüksək (+5V) ilə birləşdirərək OUT1 və OUT2 portunu aktivləşdirir.

ENA pinini aşağıya (GND) bağlasanız, OUT1 və OUT2 -ni deaktiv edir. Eynilə, ENB və OUT3 və OUT4 üçün.

IN1 - IN4, AVR -ə bağlanacaq giriş pinləridir.

IN1-yüksək (+5V), IN2-aşağı (GND), OUT1 yüksək və Çıxış 2 aşağı dönərsə, beləliklə motor idarə edə bilərik.

IN3-yüksək (+5V), IN4-aşağı (GND), OUT4 yüksək və OUT3 aşağı çevrilirsə, LED lent işığı yanır.

Mühərrikin fırlanma istiqamətini geri çevirmək istəyirsinizsə, IN1 və IN2 polaritesini tərsinə çevirin, eyni şəkildə IN3 və IN4 üçün.

ENA və ENB -ə PWM siqnalı tətbiq edərək iki fərqli çıxış portundakı mühərriklərin sürətini idarə edə bilərsiniz.

Lövhə nominal olaraq 7V -dan 12V -a qədər qəbul edə bilər.

Tullananlar: Üç tullanan sancaq var; Tullanan 1: Əgər mühərrikin 12V -dan çox təchizatına ehtiyacınız varsa, Jumper 1 -i ayırıb 12V terminalda istədiyiniz gərginliyi (maksimum 35V) tətbiq etməlisiniz. 5V terminalda başqa bir 5V təchizatı və girişi gətirin. Bəli, 12V -dan çox tətbiq etmək lazımdırsa, 5V daxil etməlisiniz (Jumper 1 çıxarıldıqda).

5V girişi, IC-nin düzgün işləməsi üçündür, çünki tullanan çıxarılaraq quraşdırılmış 5V tənzimləyicisi deaktiv ediləcək və 12V terminaldan yüksək giriş gərginliyindən qorunacaqdır.

Təchizatınız 7V ilə 12V arasında olduqda 5V terminal çıxış rolunu oynayır və 12V -dən çox tətbiq etsəniz giriş kimi çıxış edir və tullanan sökülür.

Jumper 2 və Jumper 3: Bu iki atlayıcını çıxararsanız, mikrokontrolördən siqnalı aktiv etməli və söndürməlisiniz, istifadəçilərin əksəriyyəti iki atlayıcını çıxarmağı və mikro nəzarətçidən siqnal tətbiq etməyi üstün tutur.

İki atlayıcını saxlasanız, OUT1 -OUT4 həmişə aktiv olacaq. OUT1 və OUT2 üçün ENA tullananını xatırlayın. OUT3 və OUT4 üçün ENB tullanan.

Addım 5: C proqramında kod yazmaq. HEX faylını mikro nəzarətçinin flaş yaddaşına yükləmək

İnteqrasiya edilmiş İnkişaf Platforması - Atmel Studio -dan istifadə edərək AVR mikrokontrolör tətbiqini C Kodunda yazmaq və qurmaq.

#ifndef F_CPU #F_CPU 16000000UL təyin edin // nəzarətçi kristal tezliyini bildirir (16 MHz AVR ATMega328P) #endif

Sancaqlar üzərində məlumat axını nəzarətini təmin etmək üçün #include // header. Proqramda gecikmə funksiyasını aktiv etmək üçün sancaqlar, limanlar və s. #İnclude // header təyin edir

#define BUTTON1 2 // düymə açarı B pin 2-ə bağlıdır #DEBOUNCE_TIME 25-i təyin edin "de-sıçrayan" düyməsini #define LOCK_INPUT_TIME 300 // düyməni basdıqdan sonra gözləmək üçün vaxt

// Timer0, PWM Initialization void timer0_init () {// keçid rejimində timer OC0A, OC0B pin və CTC rejimində TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // prescaler ilə timer qurun = 256 TCCR0B | = (1 << CS02); // sayğacı işə salın TCNT0 = 0; // müqayisə dəyərini işə salın OCR0A = 0; }

// ADC Başlanğıc boşluğu ADC_init () {// ADC -ni aktiv edin, nümunə götürmə freq = osc_freq/128 prescaler -ı maksimum dəyərə təyin edin, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

ADMUX = (1 << REFS0); // Gərginlik Referansını seçin (AVCC)

// Button switch status unsigned char button_state () {

/ * BUTTON1 biti aydın olduqda düyməyə basılır */

əgər (! (PINB & (1 <

{

_delay_ms (DEBOUNCE_TIME);

əgər (! (PINB & (1 <

}

qaytarma 0;

}

// Limanların Başlanması void port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2-DÜĞMƏ SWITCH DIRECT PORTB = 0b00010110;

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

DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Bütün PORTC pinlərini söndürən aşağıya endirin. }

// Bu funksiya analoqun dəyərini rəqəmsal formaya çevirir. uint16_t get_LightLevel () {_delay_ms (10); // Kanalın seçilmiş ADCSRA almasını bir müddət gözləyin | = (1 << ADSC); // ADSC bitini təyin edərək ADC çevrilməsinə başlayın. ADSC -ə 1 yazın

while (ADCSRA & (1 << ADSC)); // Dönüşümün tamamlanmasını gözləyin

// ADSC o vaxta qədər yenidən 0 olur, döngəni davamlı olaraq işlədin _delay_ms (10); qayıt (ADC); // 10 bitlik nəticəni qaytarın

}

// Bu funksiya bir aralığın (0-1023) aralığından digərinə (0-100) bir rəqəmi yenidən xəritələyir. uint32_t xəritəsi (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 (boş)

{uint16_t i1 = 0;

port_init ();

timer0_init (); ADC_init (); // ADC -nin işə salınması

vaxt (1)

{i1 = xəritə (get_LightLevel (), 0, 1023, 0, 100);

OCR0A = i1; // Çıxış müqayisəsi qeydiyyat kanalını təyin edin A OCR0B = 100-i1; // Çıxış müqayisə kanalını qeyd et B kanalı (tərs)

if (button_state ()) // Düymə basıldığı təqdirdə, LED -in vəziyyətini və 300ms gecikməsini dəyişin (#define LOCK_INPUT_TIME) {PORTB ^= (1 << 0); // IN1 pininin cari vəziyyətini dəyişmək. PORTB ^= (1 << 1); // IN2 pininin mövcud vəziyyətini dəyişdirmək. Motorun fırlanma istiqamətini tərsinə çevirin

PORTB ^= (1 << 3); // IN3 pininin cari vəziyyətini dəyişmək. PORTB ^= (1 << 4); // IN4 pininin cari vəziyyətini dəyişmək. LED Bant söndürülür/açılır. _delay_ms (LOCK_INPUT_TIME); }}; qayıt (0); }

Proqramlaşdırma tamamlandı. Sonra, layihə kodunu hex faylına qurun və tərtib edin.

HEX faylını mikrokontrolör flash yaddaşına yükləyirik: DOS istək pəncərəsinə əmr yazın:

avrdude –c [proqramçının adı] –p m328p –u –U flash: w: [hex faylınızın adı]

Mənim vəziyyətimdə belədir:

avrdude –c ISPProgv1 –p m328p –u –U flaş: w: PWM.hex

Bu əmr mikro nəzarətçinin yaddaşına hex fayl yazır. Videoya mikro nəzarətçi flash yaddaşının yanmasının ətraflı təsviri ilə baxın: Mikro nəzarətçi flash yaddaşının yanması…

Tamam! İndi mikrokontrolör proqramımızın təlimatlarına uyğun işləyir. Gəlin yoxlayaq!

Addım 6: Elektrik dövrəsi

Elektrik dövrəsi
Elektrik dövrəsi
Elektrik dövrəsi
Elektrik dövrəsi

Şematik sxemə uyğun olaraq komponentləri birləşdirin.

Tövsiyə: