Mündəricat:
- Addım 1: Təsvir
- Addım 2: AVR Taymerləri - PWM rejimi
- Addım 3: İşıq intensivliyinin ölçülməsi - ADC & LDR
- Addım 4: Controller DC Motor & Dual H-Bridge Motor Sürücü Modulu-L298N
- Addım 5: C proqramında kod yazmaq. HEX faylını mikro nəzarətçinin flaş yaddaşına yükləmək
- Addım 6: Elektrik dövrəsi
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
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
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
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
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
İşığ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
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
Şematik sxemə uyğun olaraq komponentləri birləşdirin.
Tövsiyə:
Visuino LED -in Parlaqlığını dəyişdirmək üçün Nəbz Genişliyi Modulyasiyasından (PWM) necə istifadə olunur: 7 addım
Bir LED -in Parlaqlığını dəyişdirmək üçün Puls Genişliyi Modulyasiyasını (PWM) necə istifadə etmək olar: Bu dərslikdə Pulse Width Modulation (PWM) istifadə edərək parlaqlığını dəyişdirmək üçün Arduino UNO və Visuino ilə əlaqəli bir LED istifadə edəcəyik
Digispark ATtiny85: 7 Addım üçün Batareya Gücünün Azaldılması
Digispark ATtiny85 üçün Batareya Gücünün Azaldılması: və ya: 2032 sikkə hüceyrəsi olan bir Arduinonun 2 il işlədilməsi. Digispark Arduino Kartınızı Arduino proqramı ilə qutudan çıxarmaqla 5 voltda 20 mA çəkir. 5 volt güc bankı ilə 2000 mAh yalnız 4 gün işləyəcək
BH1715 və Arduino Nano istifadə edərək İşıq Gücünün Hesablanması: 5 addım
BH1715 və Arduino Nano istifadə edərək işıq intensivliyi hesablaması: Dünən LCD displeylər üzərində işləyirdik və onların üzərində işləyərkən işıq intensivliyi hesablamasının əhəmiyyətini anladıq. İşıq intensivliyi təkcə bu dünyanın fiziki aləmində deyil, bioloji fəaliyyətində də çox yaxşı deyilən rola malikdir
AVR mikro nəzarətçisi. Bir düyməni istifadə edərək LED -i dəyişdirin. Push Button Debouncing .: 4 Addım
AVR mikro nəzarətçisi. Bir düyməni istifadə edərək LED -i dəyişdirin. Push Button Debouncing .: Bu bölmədə, ATMega328PU üçün üç LED -in vəziyyətini bir düymənin açarına uyğun olaraq dəyişdirmək üçün C proqramının necə hazırlanacağını öyrənəcəyik. Ayrıca, 'Switch Bounce' probleminin həllini araşdırdıq. Həmişə olduğu kimi, biz
Pulse Genişliyi Modulyasiya edilmiş LED Məşəli: 8 Addım
Pulse Width Modulated LED Torch: Pulse width modulation (PWM) bir çox cihazın gücünü, sürətini və ya parlaqlığını dəyişmək üçün istifadə edilə bilər. LED -lərlə PWM onları qaraltmaq və ya daha parlaq etmək üçün istifadə edilə bilər. Kiçik bir əl məşəli etmək üçün onlardan istifadə edəcəyəm. Bir LED tez bir zamanda açılaraq söndürülə bilər və