Isi kandungan:
- Langkah 1: Penerangan
- Langkah 2: Pemasa AVR - Mod PWM
- Langkah 3: Pengukuran Intensiti Cahaya - ADC & LDR
- Langkah 4: Pengawal Motor DC & Modul Pemacu Motor Dual H-Bridge-L298N
- Langkah 5: Menulis Kod untuk Program di C. Memuat naik Fail HEX Ke Memori Kilat Mikrokontroler
- Langkah 6: Litar Elektrik
Video: Mikrokontroler AVR. Modulasi Lebar Nadi. Pengawal Motor DC dan Intensiti Lampu LED .: 6 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:09
Hai semua!
Pulse Width Modulation (PWM) adalah teknik yang sangat biasa dalam telekomunikasi dan kawalan kuasa. biasanya digunakan untuk mengontrol daya yang disalurkan ke alat elektrik, baik itu motor, LED, speaker, dll. Pada dasarnya ini adalah teknik modulasi, di mana lebar nadi pembawa bervariasi sesuai dengan isyarat mesej analog.
Kami membuat litar elektrik sederhana untuk mengawal kelajuan putaran motor DC bergantung kepada intensiti cahaya. Kami akan menggunakan ciri Light Dependent Resistor dan AVR mikrokontroler seperti Analog ke Digital Conversion untuk mengukur intensiti cahaya. Kita juga akan menggunakan Modul Pemandu Motor Dual H-Bridge-L298N. Ini biasanya digunakan dalam mengendalikan kecepatan dan arah motor, tetapi dapat digunakan untuk projek lain seperti mendorong kecerahan projek pencahayaan tertentu. Juga, tambahkan butang ke litar kami untuk menukar arah putaran mesin.
Langkah 1: Penerangan
Setiap badan di dunia ini mempunyai sedikit inersia. Motor berpusing setiap kali dihidupkan. Sebaik sahaja dimatikan, ia akan cenderung berhenti. Tetapi ia tidak berhenti serta-merta, memerlukan sedikit masa. Tetapi sebelum berhenti sepenuhnya, ia dihidupkan semula! Oleh itu ia mula bergerak. Tetapi walaupun sekarang, ia memerlukan sedikit masa untuk mencapai kepantasan sepenuhnya. Tetapi sebelum ia berlaku, ia dimatikan, dan seterusnya. Oleh itu, kesan keseluruhan tindakan ini adalah bahawa motor berputar secara berterusan, tetapi pada kelajuan yang lebih rendah.
Pulse Width Modulation (PWM) adalah teknik menukar kuasa yang agak baru-baru ini untuk menyediakan jumlah kuasa elektrik antara antara tahap aktif dan mati sepenuhnya. Biasanya, denyutan digital mempunyai jangka waktu hidup dan mati yang sama, tetapi dalam beberapa keadaan kita memerlukan denyutan digital untuk mempunyai lebih banyak / kurang pada waktu / waktu henti. Dalam teknik PWM, kami membuat denyutan digital dengan jumlah keadaan hidup dan mati yang tidak sama untuk mendapatkan nilai voltan perantaraan yang diperlukan.
Duty cycle ditentukan oleh peratusan jangka masa voltan tinggi dalam nadi digital lengkap. Ia boleh dikira dengan:
% Duty cycle = T on / T (jangka masa) x 100
Mari kita ambil penyataan masalah. Kita perlu menghasilkan isyarat PWM 50 Hz yang mempunyai kitaran tugas 45%.
Kekerapan = 50 Hz
Tempoh masa, T = T (aktif) + T (mati) = 1/50 = 0.02 s = 20 ms
Kitaran Tugas = 45%
Oleh itu, menyelesaikan berdasarkan persamaan yang diberikan di atas, kita dapat
T (on) = 9 ms
T (mati) = 11 ms
Langkah 2: Pemasa AVR - Mod PWM
Untuk membuat PWM, AVR mengandungi perkakasan yang berasingan! Dengan menggunakan ini, CPU memerintahkan perkakasan untuk menghasilkan PWM kitaran tugas tertentu. ATmega328 mempunyai 6 output PWM, 2 terletak pada timer / counter0 (8bit), 2 terletak pada timer / counter1 (16bit), dan 2 terletak pada timer / counter2 (8bit). Timer / Counter0 adalah peranti PWM termudah pada ATmega328. Timer / Counter0 mampu berjalan pada 3 mod:
- PWM pantas
- Fasa dan Frekuensi yang Dibetulkan PWM
- PWM yang Dibetulkan Fasa
setiap mod ini boleh terbalik atau tidak terbalik.
Memulakan Pemasa0 dalam mod PWM:
TCCR0A | = (1 << WGM00) | (1 << WGM01) - sediakan WGM: PWM Cepat
TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - siapkan mod output output A, B
TCCR0B | = (1 << CS02) - sediakan pemasa dengan prescaler = 256
Langkah 3: Pengukuran Intensiti Cahaya - ADC & LDR
Light Dependent Resistor (LDR) adalah transduser yang mengubah rintangannya apabila cahaya jatuh di permukaannya berubah.
LDR dibuat dari bahan semikonduktor untuk membolehkan mereka mempunyai sifat sensitif cahaya. LDR atau FOTO RESISTOR ini berfungsi berdasarkan prinsip "Photo Conductivity". Sekarang apa yang dikatakan oleh prinsip ini adalah setiap kali cahaya jatuh di permukaan LDR (dalam kes ini) konduktansi elemen meningkat atau dengan kata lain rintangan LDR menurun apabila cahaya jatuh di permukaan LDR. Ini sifat penurunan rintangan untuk LDR dicapai kerana ia adalah sifat bahan semikonduktor yang digunakan di permukaan. LDR digunakan paling kerap untuk mengesan kehadiran cahaya atau untuk mengukur intensiti cahaya.
Untuk memindahkan maklumat berterusan luaran (maklumat analog) ke dalam sistem digital / pengkomputeran, kita mesti mengubahnya menjadi nilai integer (digital). Jenis penukaran ini dilakukan oleh Analog to Digital Converter (ADC). Proses menukar nilai analog menjadi nilai digital dikenali sebagai Analog to Digital Conversion. Ringkasnya, isyarat Analog adalah isyarat dunia nyata di sekitar kita seperti bunyi dan cahaya.
Isyarat digital adalah setara analog dalam format digital atau angka yang dapat difahami dengan baik oleh sistem digital seperti mikrokontroler. ADC adalah salah satu perkakasan yang mengukur isyarat analog dan menghasilkan setara digital dengan isyarat yang sama. Mikrokontroler AVR mempunyai kemudahan ADC bawaan untuk menukar voltan analog menjadi integer. AVR menukarnya menjadi nombor 10-bit dari 0 hingga 1023.
Kami menggunakan penukaran tahap voltan analog ke digital dari litar pembahagi dengan LDR untuk mengukur intensiti cahaya.
Memulakan ADC:
TADCSRA | = (1 << ADEN) - Dayakan ADC
ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - sediakan ADC prescaler = 128
ADMUX = (1 << REFS0) - tetapkan rujukan voltan = AVCC; - sediakan Input Channel = ADC0
Tonton video dengan penerangan terperinci mengenai mikrokontroler ADC AVR: Mikrokontroler AVR. Pengukuran Intensiti Cahaya. ADC & LDR
Langkah 4: Pengawal Motor DC & Modul Pemacu Motor Dual H-Bridge-L298N
Kami menggunakan pemacu motor DC kerana pengawal mikro tidak mampu menyampaikan arus tidak lebih dari 100 miliamp secara umum. Pengawal mikro pintar tetapi tidak kuat; modul ini akan menambahkan beberapa otot pada pengawal mikro untuk menggerakkan motor DC berkuasa tinggi. Ia dapat mengawal 2 motor DC secara serentak hingga 2 amp masing-masing atau satu motor stepper. Kita dapat mengawal kelajuan menggunakan PWM dan juga arah putaran motornya. Juga, ini digunakan untuk mendorong kecerahan pita LED.
Huraian pin:
Port OUT1 dan OUT2, iaitu untuk menyambungkan motor DC. OUT3 dan OUT4 untuk menyambungkan pita LED.
ENA dan ENB adalah pin yang diaktifkan: dengan menghubungkan ENA ke tinggi (+ 5V) ia membolehkan port OUT1 dan OUT2.
Sekiranya anda menyambungkan pin ENA ke rendah (GND), ia mematikan OUT1 dan OUT2. Begitu juga untuk ENB dan OUT3 dan OUT4.
IN1 hingga IN4 adalah pin input yang akan disambungkan ke AVR.
Sekiranya tinggi IN1 (+ 5V), rendah IN2 (GND), OUT1 bertukar tinggi dan OUT2 bertukar rendah, maka kita dapat menggerakkan motor.
Sekiranya tinggi IN3 (+ 5V), rendah IN4 (GND), OUT4 bertukar tinggi dan OUT3 bertukar rendah, maka lampu pita LED menyala.
Sekiranya anda mahu membalikkan arah putaran motor, sebaliknya terbalikkan polaritas IN1 dan IN2, sama untuk IN3 dan IN4.
Dengan menggunakan isyarat PWM ke ENA dan ENB, anda dapat mengawal kelajuan motor pada dua port output yang berbeza.
Papan boleh menerima dari 7V hingga 12V secara nominal.
Pelompat: Terdapat tiga pin pelompat; Jumper 1: Sekiranya motor memerlukan bekalan lebih dari 12V, anda mesti memutuskan sambungan Jumper 1 dan menggunakan voltan yang dikehendaki (maksimum 35V) pada terminal 12V. Bawa bekalan dan input 5V lain di terminal 5V. Ya, anda harus memasukkan 5V jika anda perlu menggunakan lebih dari 12V (semasa Jumper 1 dikeluarkan).
Input 5V adalah untuk berfungsi dengan baik IC, kerana melepaskan jumper akan mematikan pengatur 5V bawaan dan melindungi dari voltan input yang lebih tinggi dari terminal 12V.
Terminal 5V bertindak sebagai output jika bekalan anda antara 7V hingga 12V dan bertindak sebagai input jika anda menggunakan lebih dari 12V dan jumper dikeluarkan.
Jumper 2 dan Jumper 3: Sekiranya anda melepaskan kedua pelompat ini, anda mesti memasukkan isyarat aktif dan nyahaktifkan dari mikrokontroler, kebanyakan pengguna lebih suka mengeluarkan dua pelompat dan menggunakan isyarat dari mikrokontroler.
Sekiranya anda menyimpan dua pelompat, OUT1 hingga OUT4 akan sentiasa diaktifkan. Ingat pelompat ENA untuk OUT1 dan OUT2. Jumper ENB untuk OUT3 dan OUT4.
Langkah 5: Menulis Kod untuk Program di C. Memuat naik Fail HEX Ke Memori Kilat Mikrokontroler
Menulis dan membangun aplikasi mikrokontroler AVR dalam C Code menggunakan Integrated Development Platform - Atmel Studio.
#ifndef F_CPU # define F_CPU 16000000UL // memberitahu frekuensi kristal pengawal (16 MHz AVR ATMega328P) #endif
#include // header untuk membolehkan kawalan aliran data ke atas pin. Mentakrifkan pin, port, dan lain-lain #include // header untuk mengaktifkan fungsi kelewatan dalam program
#define BUTTON1 // suis butang disambungkan ke port B pin 2 #define DEBOUNCE_TIME 25 // masa untuk menunggu sementara butang "de-bouncing" #define LOCK_INPUT_TIME 300 // masa untuk menunggu setelah tekan butang
// Timer0, PWM Initialization void timer0_init () {// sediakan pemasa OC0A, pin OC0B dalam mod togol dan mod CTC TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // tetapkan pemasa dengan prescaler = 256 TCCR0B | = (1 << CS02); // memulakan kaunter TCNT0 = 0; // memulakan nilai perbandingan OCR0A = 0; }
// ADC Initialization batal ADC_init () {// Aktifkan ADC, pengambilan sampel freq = osc_freq / 128 set prescaler ke nilai maksimum, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
ADMUX = (1 << REFS0); // Pilih Rujukan Voltan (AVCC)
// Status suis butang char_state char tidak bertanda () {
/ * butang ditekan ketika BUTTON1 bit kosong * /
jika (! (PINB & (1 <
{
_delay_ms (DEBOUNCE_TIME);
jika (! (PINB & (1 <
}
pulangan 0;
}
// Permulaan Pelabuhan batal port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2 - BUTTON SWITCH LANGSUNG PORTB = 0b00010110;
DDRD = 0b01100000; // PD5-ENB (OC0B), PD6-ENA (OC0A) PORTD = 0b00000000;
DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // Tetapkan semua pin PORTC rendah yang mematikannya. }
// Fungsi ini membaca nilai analog ke digital convert. uint16_t get_LightLevel () {_delay_ms (10); // Tunggu beberapa saat sehingga saluran terpilih ADCSRA | = (1 << ADSC); // Mulakan penukaran ADC dengan menetapkan bit ADSC. Tulis 1 hingga ADSC
sementara (ADCSRA & (1 << ADSC)); // Tunggu penukaran selesai
// ADSC menjadi 0 lagi sehingga kemudian, jalankan gelung berterusan _delay_ms (10); pulangan (ADC); // Kembalikan hasil 10-bit
}
// Fungsi ini Memetakan semula nombor dari satu jarak (0-1023) ke yang lain (0-100). peta uint32_t (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 utama (tidak sah)
{uint16_t i1 = 0;
port_init ();
pemasa0_init (); ADC_init (); // inisialisasi ADC
semasa (1)
{i1 = peta (get_LightLevel (), 0, 1023, 0, 100);
OCR0A = i1; // Tetapkan output bandingkan saluran daftar A OCR0B = 100-i1; // Tetapkan output bandingkan saluran B (terbalik)
if (button_state ()) // Jika butang ditekan, alihkan keadaan LED dan tunda 300ms (#define LOCK_INPUT_TIME) {PORTB ^ = (1 << 0); // menukar keadaan pin IN1 semasa. PORTB ^ = (1 << 1); // menukar keadaan pin IN2 semasa. Balikkan arah putaran motor
PORTB ^ = (1 << 3); // menukar keadaan pin IN3 semasa. PORTB ^ = (1 << 4); // menukar keadaan pin IN4 semasa. Pita LED dimatikan / dihidupkan. _delay_ms (LOCK_INPUT_TIME); }}; pulangan (0); }
Pengaturcaraan selesai. Seterusnya, membina dan menyusun kod projek ke dalam fail hex.
Memuat naik fail HEX ke dalam memori flash mikrokontroler: ketik tetingkap prompt DOS arahan:
avrdude –c [nama programmer] –p m328p –u –U flash: w: [nama fail hex anda]
Dalam kes saya adalah:
avrdude –c ISPProgv1 –p m328p –u –U flash: w: PWM.hex
Perintah ini menulis fail hex ke memori mikrokontroler. Tonton video dengan penerangan terperinci mengenai pembakaran memori kilat mikrokontroler: Pembakaran memori kilat mikrokontroler…
Okey! Kini, mikrokontroler berfungsi mengikut arahan program kami. Mari kita periksa!
Langkah 6: Litar Elektrik
Sambungkan komponen mengikut gambarajah skematik.
Disyorkan:
Peranti Pintar Perisian Perkakasan dan Perisian, Tuya dan Jalur Lebar LED, Sonoff, Palam Pintar BSD33: 7 Langkah
Peranti Pintar Perisian Perkakasan dan Perisian, Tuya dan Broadlink LED, Sonoff, BSD33 Smart Plug: Dalam Instruksional ini saya menunjukkan kepada anda bagaimana saya memancarkan beberapa peranti pintar dengan firmware saya sendiri, jadi saya dapat mengawalnya dengan MQTT melalui persediaan Openhab saya. Saya akan menambah peranti baru ketika saya menggodamnya. Sudah tentu ada kaedah berasaskan perisian lain untuk mem
Cara Menukar PWM 8Ch ke Modulasi Kedudukan Nadi: 4 Langkah
Cara Menukar 8Ch PWM ke Modulasi Kedudukan Nadi: Kami akan mengkaji 2 format isyarat output Penerima radio untuk model yang dikendalikan radio (atau model RC). Jenis isyarat Penerima tradisional dan paling biasa adalah PWM, dan biasanya PWM hanya memerlukan satu wayar setiap saluran. Pemberian isyarat PPM kini semakin
Konfigurasi Fuse Bits Mikrokontroler AVR. Membuat dan Memuat naik dalam Memory Flash Mikrokontroler Program Berkelip LED: 5 Langkah
Konfigurasi Fuse Bits Mikrokontroler AVR. Membuat dan Memuat Naik dalam Memori Flash Mikrokontroler Program Berkelip LED: Dalam kes ini, kita akan membuat program sederhana dalam kod C dan membakarnya ke dalam memori mikrokontroler. Kami akan menulis program kami sendiri dan menyusun fail hex, menggunakan Atmel Studio sebagai platform pembangunan bersepadu. Kami akan mengkonfigurasi fius bi
Modulasi Lebar Nadi Sederhana (dan Kotor) (PWM) Dengan Pemasa 555: 3 Langkah
Modulasi Lebar Nadi Sederhana (dan Kotor) (PWM) Dengan Pemasa 555: Litar sederhana untuk kawalan kelajuan Motor DC (kawalan kelajuan kipas, peredupan cahaya / LED dan lain-lain) menggunakan pemasa 555. Juga titik permulaan yang baik untuk pemula yang ingin mendapatkannya tangan kotor dengan IC pemasa 555. Ada yang berpendapat bahawa ini bukan yang paling
Torch LED Modulasi Lebar Nadi: 8 Langkah
Pulse Width Modulated LED Torch: Pulse width modulation (PWM) dapat digunakan untuk mengubah daya, kelajuan atau kecerahan banyak perangkat. Dengan LED, PWM dapat digunakan untuk meredupkannya, atau membuatnya lebih terang. Saya akan menggunakannya untuk membuat obor tangan kecil. LED boleh dimalapkan dengan menyalakannya dengan cepat dan