Orodha ya maudhui:
- Hatua ya 1: Maelezo
- Hatua ya 2: Vipima muda vya AVR - Njia ya PWM
- Hatua ya 3: Upimaji wa Ukubwa wa Mwanga - ADC & LDR
- Hatua ya 4: Mdhibiti DC Motor & Dual H-Bridge Motor Module Module-L298N
- Hatua ya 5: Kuandika Nambari ya Programu katika C. Kupakia faili ya HEX Kwenye Kumbukumbu ya Kiwango cha Microcontroller
- Hatua ya 6: Mzunguko wa Umeme
Video: Mdhibiti mdogo wa AVR. Pulse Modulation Upana. Mdhibiti wa DC Motor na Mwangaza wa Mwanga wa LED.: 6 Hatua
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:52
Halo kila mtu!
Moduli ya Upana wa Pulse (PWM) ni mbinu ya kawaida sana katika mawasiliano ya simu na udhibiti wa nguvu. hutumiwa kwa kawaida kudhibiti nguvu inayolishwa kwa kifaa cha umeme, iwe ni motor, LED, spika, nk. Kimsingi ni moduli ya teknolojia, ambayo upana wa mapigo ya carrier hutofautiana kulingana na ishara ya ujumbe wa analog.
Tunafanya mzunguko rahisi wa umeme kudhibiti kasi ya kuzunguka kwa gari la DC kwa nguvu ya mwangaza. Tutatumia Resistor ya Kitegemezi cha Nuru na huduma ndogo za AVR kama vile Analog kwa Uongofu wa Dijiti kupima kiwango cha nuru. Pia tutatumia Moduli ya Dereva wa Magari Dual H-Bridge-L298N. Inatumika kudhibiti mwendo wa kasi na mwelekeo wa motors, lakini inaweza kutumika kwa miradi mingine kama vile kuendesha mwangaza wa miradi fulani ya taa. Pia, aliongeza kitufe kwenye mzunguko wetu kugeuza mwelekeo wa kuzunguka kwa injini.
Hatua ya 1: Maelezo
Kila mwili katika ulimwengu huu una hali fulani. Pikipiki huzunguka kila inapowashwa. Mara tu inapozimwa, itasimama. Lakini haachi mara moja, inachukua muda. Lakini kabla ya kusimama kabisa, inawashwa tena! Kwa hivyo huanza kusonga. Lakini hata sasa, inachukua muda kufikia kasi yake kamili. Lakini kabla ya kutokea, imezimwa, na kadhalika. Kwa hivyo, athari ya jumla ya hatua hii ni kwamba motor huzunguka kila wakati, lakini kwa kasi ya chini.
Moduli ya Upana wa Pulse (PWM) ni mbinu ya kubadilisha nguvu ya hivi karibuni kwa kutoa kiwango cha kati cha nguvu za umeme kati ya viwango kamili na kamili. Kawaida, kunde za dijiti huwa na wakati sawa na nje, lakini katika hali zingine tunahitaji pigo la dijiti kuwa na zaidi / chini kwa wakati / wakati wa kupumzika. Katika mbinu ya PWM, tunaunda kunde za dijiti na kiwango kisicho sawa cha hali ya ndani na nje kupata maadili ya kati ya voltage.
Mzunguko wa jukumu hufafanuliwa na asilimia ya muda wa voltage nyingi katika mpigo kamili wa dijiti. Inaweza kuhesabiwa na:
% ya Mzunguko wa Ushuru = T juu / T (muda wa muda) x 100
Wacha tuchukue taarifa ya shida. Tunahitaji kutoa ishara ya 50 Hz PWM iliyo na mzunguko wa ushuru wa 45%.
Mzunguko = 50 Hz
Kipindi cha muda, T = T (juu) + T (mbali) = 1/50 = 0.02 s = 20 ms
Mzunguko wa Ushuru = 45%
Kwa hivyo, kutatua kulingana na equation iliyotolewa hapo juu, tunapata
T (juu) = 9 ms
T (mbali) = 11 ms
Hatua ya 2: Vipima muda vya AVR - Njia ya PWM
Kwa kutengeneza PWM, AVR ina vifaa tofauti! Kwa kutumia hii, CPU inaagiza vifaa kutengeneza PWM ya mzunguko fulani wa ushuru. ATmega328 ina matokeo 6 ya PWM, 2 ziko kwenye timer / counter0 (8bit), 2 ziko kwenye timer / counter1 (16bit), na 2 iko kwenye timer / counter2 (8bit). Timer / Counter0 ni kifaa rahisi zaidi cha PWM kwenye ATmega328. Timer / Counter0 ina uwezo wa kukimbia kwa njia 3:
- PWM haraka
- Awamu na Mzunguko Iliyorekebishwa PWM
- Awamu iliyosahihishwa PWM
kila moja ya njia hizi zinaweza kugeuzwa au kutobadilishwa.
Anzisha Timer0 katika hali ya PWM:
TCCR0A | = (1 << WGM00) | (1 << WGM01) - weka WGM: Fast PWM
TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - weka kulinganisha hali ya pato A, B
TCCR0B | = (1 << CS02) - weka kipima muda na prescaler = 256
Hatua ya 3: Upimaji wa Ukubwa wa Mwanga - ADC & LDR
Resistor ya Kitegemezi cha Nuru (LDR) ni transducer ambayo hubadilisha upinzani wake wakati mwanga unapoanguka juu ya uso wake.
LDRs zimetengenezwa kutoka kwa vifaa vya semiconductor kuwawezesha kuwa na mali nyepesi nyepesi. LDRs hizi au WAPINZANI WA PICHA hufanya kazi kwa kanuni ya "Uendeshaji wa Picha". Sasa kanuni hii inasema nini wakati nuru inapoanguka juu ya uso wa LDR (katika kesi hii) mwenendo wa kitu huongezeka au kwa maneno mengine upinzani wa LDR hupungua wakati taa inapoanguka juu ya uso wa LDR. Mali hii ya kupungua kwa upinzani kwa LDR inafanikiwa kwa sababu ni mali ya vifaa vya semiconductor kutumika juu ya uso. LDR hutumiwa mara nyingi kugundua uwepo wa nuru au kupima ukubwa wa nuru.
Kwa kuhamisha habari ya nje inayoendelea (habari ya analogi) kuwa mfumo wa dijiti / kompyuta, lazima tuibadilishe kuwa nambari kamili (dijiti). Aina hii ya ubadilishaji hufanywa na Analog to Digital Converter (ADC). Mchakato wa kubadilisha thamani ya analojia kuwa nambari ya dijiti inajulikana kama Analog hadi Ubadilishaji wa Dijiti. Kwa kifupi, ishara za Analog ni ishara halisi za ulimwengu zinazotuzunguka kama sauti na mwanga.
Ishara za dijiti ni sawa na analog katika muundo wa dijiti au nambari ambazo zinaeleweka vizuri na mifumo ya dijiti kama watawala wadogo. ADC ni vifaa kama vile ambavyo hupima ishara za analog na hutoa sawa na dijiti ya ishara sawa. Mdhibiti mdogo wa AVR ameunda kituo cha ADC ili kubadilisha voltage ya analog kuwa nambari. AVR ibadilishe kuwa nambari 10-bit ya masafa 0 hadi 1023.
Tunatumia analog kwa ubadilishaji wa dijiti wa kiwango cha voltage kutoka mzunguko wa mgawanyiko na LDR kupima kiwango cha mwangaza.
Anzisha ADC:
TADCSRA | = (1 << ADEN) - Wezesha ADC
ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - weka prescaler ya ADC = 128
ADMUX = (1 << REFS0) - kuanzisha marejeleo ya voltage = AVCC; - sanidi Kituo cha Kuingiza = ADC0
Tazama video hiyo na maelezo ya kina juu ya mdhibiti mdogo wa ADC AVR: AVR Microcontroller. Upimaji wa Mwanga Mwanga. ADC & LDR
Hatua ya 4: Mdhibiti DC Motor & Dual H-Bridge Motor Module Module-L298N
Tunatumia madereva ya DC kwa sababu watawala wadogo hawana uwezo wa kutoa sasa sio zaidi ya milliamps 100 kwa ujumla. Mdhibiti mdogo ni mwerevu lakini hana nguvu; moduli hii itaongeza misuli kadhaa kwa watawala wadogo ili kuendesha motors za nguvu za DC. Inaweza kudhibiti motors 2 DC wakati huo huo hadi 2 amps kila motor au stepper moja. Tunaweza kudhibiti kasi kwa kutumia PWM na pia mwelekeo wake wa kuzunguka kwa motors. Pia, Ilitumia kuendesha mwangaza wa mkanda wa LED.
Maelezo ya siri:
OUT1 na bandari ya OUT2, ambayo ni ya kuunganisha motor DC. OUT3 na OUT4 ya kuunganisha mkanda wa LED.
ENA na ENB zinawezesha pini: kwa kuunganisha ENA hadi juu (+ 5V) inawezesha bandari OUT1 na OUT2.
Ukiunganisha pini ya ENA hadi chini (GND), inalemaza OUT1 na OUT2. Vivyo hivyo, kwa ENB na OUT3 na OUT4.
IN1 hadi IN4 ni pini za kuingiza ambazo zitaunganishwa na AVR.
Ikiwa IN1-juu (+ 5V), IN2-low (GND), OUT1 inageuka juu na OUT2 inageuka chini, kwa hivyo tunaweza kuendesha gari.
Ikiwa IN3-juu (+ 5V), IN4-low (GND), OUT4 inageuka juu na OUT3 inageuka chini, kwa hivyo taa ya mkanda wa LED imewashwa.
Ikiwa unataka kugeuza mwelekeo wa kuzunguka wa gari tu ingiza IN1 na IN2 polarity, vivyo hivyo kwa IN3 na IN4.
Kwa kutumia ishara ya PWM kwa ENA na ENB unaweza kudhibiti kasi ya motors kwenye bandari mbili tofauti za uzalishaji.
Bodi inaweza kukubali kutoka 7V hadi 12V kwa jina.
Wanarukaji: Kuna pini tatu za kuruka; Jumper 1: Ikiwa wewe ni motor unahitaji zaidi ya usambazaji wa 12V lazima utenganishe Jumper 1 na utumie voltage inayotaka (max 35V) kwenye terminal ya 12V. Kuleta ugavi mwingine wa 5V na pembejeo kwenye kituo cha 5V. Ndio, lazima uingize 5V ikiwa unahitaji kutumia zaidi ya 12V (wakati Jumper 1 inapoondolewa).
Uingizaji wa 5V ni kwa utendakazi mzuri wa IC, kwani kuondoa jumper italemaza mdhibiti wa 5V uliojengwa na kulinda kutoka kwa kiwango cha juu cha pembejeo kutoka kwa terminal ya 12V.
Kituo cha 5V hufanya kama pato ikiwa usambazaji wako ni kati ya 7V hadi 12V na hufanya kama pembejeo ikiwa utatumia zaidi ya 12V na jumper imeondolewa.
Jumper 2 na Jumper 3: Ukiondoa hizi mbili za kuruka lazima uingize kuwezesha na kuzima ishara kutoka kwa mdhibiti mdogo, watumiaji wengi wanapendelea kuondoa warukaji wawili na kutumia ishara kutoka kwa mdhibiti mdogo.
Ukiweka vinaruka viwili OUT1 hadi OUT4 vitawezeshwa kila wakati. Kumbuka ENA jumper ya OUT1 na OUT2. ENB jumper ya OUT3 na OUT4.
Hatua ya 5: Kuandika Nambari ya Programu katika C. Kupakia faili ya HEX Kwenye Kumbukumbu ya Kiwango cha Microcontroller
Kuandika na kujenga matumizi ya AVR microcontroller katika C Code ukitumia Jukwaa la Maendeleo Jumuishi - Studio ya Atmel.
#ifndef F_CPU # fafanua F_CPU 16000000UL // kuwaambia mtiririko wa kioo cha mtawala (16 MHz AVR ATMega328P) #endif
# pamoja na kichwa // kuwezesha udhibiti wa mtiririko wa data juu ya pini. Inafafanua pini, bandari, nk. # Ikiwa ni pamoja na kichwa cha kichwa ili kuwezesha kazi ya kuchelewesha katika programu
#fafanua BUTTON1 2 // kitufe cha kushona kilichounganishwa kwenye bandari B pini 2 #fafanua DEBOUNCE_TIME 25 // wakati wa kusubiri wakati "unapoondoa" kifungo #fafanua LOCK_INPUT_TIME 300 // wakati wa kusubiri baada ya bonyeza kitufe
// Timer0, PWM Uzinduzi batili timer0_init () {// kuanzisha kipima muda OC0A, OC0B pin katika mode toggle na CTC mode TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // kuanzisha kipima muda na prescaler = 256 TCCR0B | = (1 << CS02); // anzisha kaunta TCNT0 = 0; // kuanzisha thamani ya kulinganisha OCR0A = 0; }
// Uanzishaji wa ADC batili ADC_init () {// Wezesha ADC, sampuli freq = osc_freq / 128 set prescaler to max max, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
ADMUX = (1 << REFS0); // Chagua Marejeo ya Voltage (AVCC)
// Kitufe cha kubadili kitufe ambacho hakijasainiwa char button_state () {
/ * kitufe kinabanwa wakati BUTTON1 kidogo iko wazi * /
ikiwa (! (PINB & (1 <
{
kuchelewa_ms (DEBOUNCE_TIME);
ikiwa (! (PINB & (1 <
}
kurudi 0;
}
// Uanzishaji wa Bandari batili 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; // Weka pini zote za chini za PORTC ambazo huzima. }
// Kazi hii inasoma thamani ya analog kwa kubadilisha dijiti. uint16_ pata_LightLevel () {_delay_ms (10); // Subiri kwa muda ili kituo kichaguliwe ADCSRA | = (1 << ADSC); // Anza ubadilishaji wa ADC kwa kuweka ADSC kidogo. Andika 1 kwa ADSC
wakati (ADCSRA & (1 << ADSC)); // Subiri ubadilishaji ukamilike
// ADSC inakuwa 0 tena hadi wakati huo, endesha kitanzi mfululizo _delay_ms (10); kurudi (ADC); // Rudisha matokeo ya 10-bit
}
// Kazi hii Ramani tena nambari kutoka kwa masafa moja (0-1023) hadi nyingine (0-100). ramani ya uint32_ (uint32_t x, uint32_t in_min, uint32_t in_max, uint32_t out_min, uint32_t out_max) {kurudi (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
kuu (batili)
{uint16_t i1 = 0;
bandari_init ();
timer0_init (); ADC_init (); // kuanzisha ADC
wakati (1)
{i1 = ramani (pata_LightLevel (), 0, 1023, 0, 100);
OCR0A = i1; // Weka pato linganisha kituo cha rejista A OCR0B = 100-i1; // Weka pato kulinganisha rejista kituo B (kilichogeuzwa)
ikiwa (button_state ()) // Ikiwa kitufe kinabanwa, toa hali ya LED na ucheleweshe kwa 300ms (#fafanua LOCK_INPUT_TIME) {PORTB ^ = (1 << 0); // kugeuza hali ya sasa ya pini IN1. PORTB ^ = (1 << 1); // kugeuza hali ya sasa ya pini IN2. Reverse mwelekeo wa kuzunguka kwa motor
PORTB ^ = (1 << 3); // kugeuza hali ya sasa ya pini IN3. PORTB ^ = (1 << 4); // kugeuza hali ya sasa ya pini IN4. Tape ya LED imezimwa / kuwashwa. kuchelewa_ms (LOCK_INPUT_TIME); }}}; kurudi (0); }
Programu imekamilika. Ifuatayo, kujenga na kukusanya nambari ya mradi kuwa faili ya hex.
Kupakia faili ya HEX kwenye kumbukumbu ndogo ya microcontroller: andika kwenye DOS haraka dirisha la amri:
avrdude –c [jina la programu] –p m328p -u -U flash: w: [jina la faili yako ya hex]
Kwa upande wangu ni:
avrdude -c ISPProgv1 -p m328p -u -U flash: w: PWM.hex
Amri hii inaandika faili ya hex kwenye kumbukumbu ya microcontroller. Tazama video hiyo na maelezo ya kina juu ya kuungua kwa kumbukumbu ya microcontroller: kumbukumbu ndogo ya Microcontroller inawaka…
Sawa! Sasa, mdhibiti mdogo hufanya kazi kulingana na maagizo ya programu yetu. Wacha tuiangalie!
Hatua ya 6: Mzunguko wa Umeme
Unganisha vifaa kulingana na mchoro wa skimu.
Ilipendekeza:
Visuino Jinsi ya Kutumia Pulse Modulation Width (PWM) Kubadilisha Mwangaza wa LED: Hatua 7
Visuino Jinsi ya kutumia Pulse Modulation Width (PWM) kubadilisha Mwangaza wa LED: Katika mafunzo haya tutatumia LED iliyounganishwa na Arduino UNO na Visuino kufanya mabadiliko ni mwangaza kwa kutumia Pulse Width Modulation (PWM). Tazama video ya onyesho
Mdhibiti mdogo wa AVR. Geuza LED Kutumia Kitufe cha Kushinikiza. Kitufe cha kushinikiza Kudondoa: Hatua 4
Mdhibiti mdogo wa AVR. Geuza LED Kutumia Kitufe cha Kushinikiza. Kitufe cha kushinikiza Kudondoa: Katika sehemu hii, tutajifunza Jinsi ya kutengeneza nambari C ya mpango wa ATMega328PU kugeuza hali ya LED tatu kulingana na pembejeo kutoka kwa kitufe cha kifungo. Pia, tumechunguza suluhisho la shida ya ni 'Badilisha Bounce'. Kama kawaida, sisi
Mradi Mdogo wa Mdhibiti Mdogo wa Chini ya Dola 2: Hatua 11
Mradi Mdogo wa Mdhibiti Mdogo wa Chini ya $ 2 Bucks: Kuna mengi kwenye mtandao kuhusu kuanza na watawala wa Micro. Kuna chaguo nyingi huko nje, njia nyingi za kuzipanga ikiwa unaanza au sio na chip yenyewe, bodi za maendeleo au SOC kamili (System On Chip)
Rahisi (na Chafu) Upanaji wa Pulse Upana (PWM) Na 555 Timer: 3 Hatua
Rahisi (na Chafu) upanaji wa mpigo wa mpigo (PWM) Ukiwa na kipima muda cha 555: Mzunguko rahisi wa udhibiti wa kasi ya DC Motor (udhibiti wa kasi ya shabiki, taa nyepesi / mwangaza wa LED na nk) ukitumia kipima muda cha 555. Pia mahali pazuri pa novice kutaka kupata mikono machafu na 555 timer IC. Wengine wanaweza kusema kuwa hii sio zaidi
Upana wa Pulse Mwenge wa Mwenge wa LED: Hatua 8
Upana wa Pulse Mwenge wa Mwenge wa LED: Moduli ya upana wa kunde (PWM) inaweza kutumika kutofautisha nguvu, kasi au mwangaza wa vifaa vingi. Na LEDs, PWM inaweza kutumika kuzipunguza, au kuzifanya ziwe nuru. Nitazitumia kutengeneza tochi ndogo ya mkono. LED inaweza kupunguzwa kwa kuiwasha haraka na