Orodha ya maudhui:

Mdhibiti mdogo wa AVR. Pulse Modulation Upana. Mdhibiti wa DC Motor na Mwangaza wa Mwanga wa LED.: 6 Hatua
Mdhibiti mdogo wa AVR. Pulse Modulation Upana. Mdhibiti wa DC Motor na Mwangaza wa Mwanga wa LED.: 6 Hatua

Video: Mdhibiti mdogo wa AVR. Pulse Modulation Upana. Mdhibiti wa DC Motor na Mwangaza wa Mwanga wa LED.: 6 Hatua

Video: Mdhibiti mdogo wa AVR. Pulse Modulation Upana. Mdhibiti wa DC Motor na Mwangaza wa Mwanga wa LED.: 6 Hatua
Video: Using Digispark Attiny85 Mini Arduino boards: Lesson 108 2024, Julai
Anonim
Image
Image

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

Maelezo
Maelezo
Maelezo
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

Vipima muda vya AVR - Njia ya PWM
Vipima muda vya AVR - Njia ya PWM
Vipima muda vya AVR - Njia ya PWM
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

Upimaji wa Mwanga Mwanga - ADC & LDR
Upimaji wa Mwanga Mwanga - ADC & LDR
Upimaji wa Mwanga Mwanga - ADC & LDR
Upimaji wa Mwanga Mwanga - ADC & LDR
Upimaji wa Mwanga Mwanga - ADC & LDR
Upimaji wa Mwanga 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

Mdhibiti DC Motor & Dual H-Bridge Motor Module Module-L298N
Mdhibiti DC Motor & Dual H-Bridge Motor Module Module-L298N
Mdhibiti DC Motor & Dual H-Bridge Motor Module Module-L298N
Mdhibiti DC Motor & Dual H-Bridge Motor Module Module-L298N
Mdhibiti DC Motor & Dual H-Bridge Motor Module Module-L298N
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

Mzunguko wa Umeme
Mzunguko wa Umeme
Mzunguko wa Umeme
Mzunguko wa Umeme

Unganisha vifaa kulingana na mchoro wa skimu.

Ilipendekeza: