Мазмуну:
- 1 -кадам: Description
- 2 -кадам: AVR таймерлери - PWM режими
- 3 -кадам: Жарык интенсивдүүлүгүн өлчөө - ADC & LDR
- 4-кадам: Controller DC Motor & Dual H-Bridge Motor Driver Module-L298N
- 5 -кадам: C программасына код жазуу. HEX файлын микроконтроллердин флэш -эсине жүктөө
- 6 -кадам: Электр схемасы
Video: AVR микроконтроллери. Импульстун туурасы модуляциясы. DC моторунун жана LED жарыгынын интенсивдүүлүгүнүн көзөмөлчүсү: 6 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:40
Баарыңарга салам!
Pulse Width Modulation (PWM) - бул телекоммуникацияда жана электр энергиясын башкарууда эң кеңири таралган техника. ал, адатта, электр түзүлүшүнө берилүүчү кубаттуулукту көзөмөлдөө үчүн колдонулат, мотор болобу, светодиод, динамиктер ж.б. Ал негизинен модуляция техникасы, аналогдук сигнал сигналына ылайык ташуучу импульстун туурасы ар кандай болот..
Биз жарыктын интенсивдүүлүгүнө көз каранды болгон DC моторунун айлануу ылдамдыгын көзөмөлдөө үчүн жөнөкөй электр схемасын жасайбыз. Биз жарыктын интенсивдүүлүгүн өлчөө үчүн аналогдук санарипке айлантуу сыяктуу Light көз каранды резистор жана AVR микроконтроллеринин функцияларын колдонобуз. Ошондой эле биз Dual H-Bridge Motor Driver Module-L298N колдонобуз. Ал, адатта, моторлордун ылдамдыгын жана багытын башкарууда колдонулат, бирок башка долбоорлордо, мисалы, кээ бир жарык берүүчү долбоорлордун жарыктыгы үчүн колдонулат. Ошондой эле, мотордун айлануу багытын алмаштыруу үчүн биздин схемага баскыч кошулду.
1 -кадам: Description
Бул дүйнөдөгү ар бир дене кандайдыр бир инерцияга ээ. Мотор күйгүзүлгөн сайын айланат. Ал өчүрүлөрү менен токтоп калат. Бирок ал дароо токтобойт, бир аз убакыт талап кылынат. Бирок ал толугу менен токтой электе, ал кайра күйөт! Ошентип кыймылдай баштайт. Бирок азыр да анын толук ылдамдыгына жетүү үчүн бир аз убакыт керек. Бирок ал боло электе, ал өчүрүлөт ж.б. Ошентип, бул иш -аракеттердин жалпы эффектиси мотордун үзгүлтүксүз, бирок төмөн ылдамдыкта айланышында.
Импульстун туурасы модуляциясы (PWM) - бул электр энергиясынын орточо көлөмүн толугу менен күйгүзүлгөн жана толугу менен өчүрүлгөн деңгээлдер менен камсыздоо үчүн салыштырмалуу жаңы кубаттуулукту алмаштыруу ыкмасы. Адатта, санарип импульстар бирдей убакытка ээ жана өчөт, бирок кээ бир учурларда санариптик импульстун убактысы боюнча/азыраак болушу керек. PWM техникасында биз керектүү аралык чыңалуу маанилерин алуу үчүн бирдей эмес күйүү жана өчүрүү абалындагы санарип импульстарды түзөбүз.
Милдеттүү цикл толук цифралык импульстагы жогорку чыңалуу узактыгынын пайызы менен аныкталат. Аны төмөнкүчө эсептесе болот:
Милдеттин циклинин % = T on /T (мезгил мезгили) x 100
Келгиле, көйгөйлүү билдирүүнү алалы. Биз 45% жумуш циклине ээ 50 Гц PWM сигналын жаратышыбыз керек.
Frequency = 50 Гц
Убакыт мезгили, T = T (on) + T (off) = 1/50 = 0.02 s = 20 ms
Милдеттүү цикл = 45%
Ошентип, жогоруда берилген теңдемеге ылайык чечүү менен, биз алабыз
T (күйүк) = 9 мс
T (өчүрүү) = 11 мс
2 -кадам: AVR таймерлери - PWM режими
PWM жасоо үчүн AVR өзүнчө жабдыктарды камтыйт! Муну колдонуу менен, CPU аппараттык жабдыкка белгилүү бир кызмат циклинин PWM өндүрүшүн көрсөтөт. ATmega328де 6 PWM чыгышы бар, 2 таймерде/counter0де (8бит), 2 таймерде/counter1де (16bit), 2 таймерде/counter2де (8bit) жайгашкан. Таймер/Counter0 - ATmega328деги эң жөнөкөй PWM түзмөгү. Таймер/Counter0 3 режимде иштей алат:
- Тез PWM
- Фаза жана жыштык туураланган PWM
- Фаза Түзөтүлгөн PWM
бул режимдердин ар бири тескери же тескери болушу мүмкүн.
Таймерди PWM режиминде баштоо:
TCCR0A | = (1 << WGM00) | (1 << WGM01) - WGM орнотуу: Fast PWM
TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - салыштыруу чыгаруу режимин A, B орнотуу
TCCR0B | = (1 << CS02) - prescaler менен таймерди орнотуу = 256
3 -кадам: Жарык интенсивдүүлүгүн өлчөө - ADC & LDR
Жарыкка көз каранды болгон резистор (LDR) - бул жарыктын бетине түшкөндө каршылыгын өзгөртүүчү өзгөрткүч.
LDRлер жарыкты сезгич касиеттерине ээ болуу үчүн жарым өткөргүч материалдардан жасалган. Бул LDRs же PHOTO RESISTORS "Сүрөт өткөргүчтүк" принциби боюнча иштейт. Эми бул принцип эмне дейт: LDRдин бетине жарык түшкөндө (бул учурда) элементтин өткөрүмдүүлүгү жогорулайт же башкача айтканда, LDRдин бетине жарык түшкөндө LDR каршылыгы төмөндөйт. LDR үчүн каршылыктын төмөндөшүнүн бул касиети анын үстүндө колдонулган жарым өткөргүч материалдын касиети болгондуктан жетишилет. LDR көбүнчө жарыктын бар экендигин аныктоо же жарыктын интенсивдүүлүгүн өлчөө үчүн колдонулат.
Тышкы үзгүлтүксүз маалыматты (аналогдук маалыматты) санариптик/эсептөө тутумуна өткөрүү үчүн биз аларды бүтүн (санарип) баалуулуктарга айландырышыбыз керек. Которуунун бул түрү санариптик конверторго аналогдук (ADC) тарабынан жүргүзүлөт. Аналогдук маанини санариптик мааниге айландыруу процесси Аналогду санарипке айландыруу деп аталат. Кыскача айтканда, аналогдук сигналдар үн жана жарык сыяктуу бизди курчап турган чыныгы дүйнөлүк сигналдар.
Санарип сигналдар санариптик же сандык форматтагы аналогдук эквиваленттер, алар микроконтроллер сыяктуу санарип системалары тарабынан жакшы түшүнүлөт. ADC - аналогдук сигналдарды өлчөгөн жана ошол эле сигналдын санарип эквивалентин чыгаруучу аппараттык жабдыктардын бири. AVR микроконтроллерлери аналогдук чыңалууну бүтүн санга айландыруу үчүн ADC орноткон. AVR аны 10дон 0го чейин 1023 диапазонуна айландырат.
Биз жарыктын интенсивдүүлүгүн өлчөө үчүн LDR менен бөлүштүргүч схемадан чыңалуу деңгээлинин аналогдук жана санариптик конверсиясын колдонобуз.
ADCди баштоо:
TADCSRA | = (1 << ADEN) - ADC иштетүү
ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - ADC prescaler орнотуу = 128
ADMUX = (1 << REFS0) - чыңалуу шилтемесин орнотуу = AVCC; - Input Channel = ADC0 орнотуу
ADC AVR микроконтроллеринин толук сүрөттөлүшү менен видеону көрүңүз: AVR микроконтроллери. Жарык интенсивдүүлүгүн өлчөө. ADC & LDR
4-кадам: Controller DC Motor & Dual H-Bridge Motor Driver Module-L298N
Биз DC мотор драйверлерин колдонобуз, анткени микроконтроллерлер жалпысынан 100 миллиамперден ашпаган токту жеткире албайт. Микроконтроллерлер акылдуу, бирок күчтүү эмес; Бул модуль жогорку кубаттуулуктагы DC кыймылдаткычтарын айдоо үчүн микроконтроллерлерге кээ бир булчуңдарды кошот. Ал бир эле учурда 2 амперге чейин же 2 тепкичтүү моторду башкара алат. Биз PWMди колдонуп ылдамдыкты көзөмөлдөй алабыз, ошондой эле моторлордун айлануу багытын. Ошондой эле, бул LED лентасынын жарыктыгы үчүн колдонулат.
Pin сүрөттөмөсү:
DC моторун туташтыруу үчүн OUT1 жана OUT2 порту. LED лентасын туташтыруу үчүн OUT3 жана OUT4.
ENA жана ENB иштетүүчү казыктар: ENAны бийикке (+5V) туташтыруу менен OUT1 жана OUT2 портун иштетет.
Эгерде сиз ENA пинин төмөн (GND) туташтырсаңыз, анда OUT1 жана OUT2 өчүрүлөт. Ошо сыяктуу эле, ENB жана OUT3 жана OUT4 үчүн.
IN1ден IN4кө чейин AVRга туташтырыла турган кирүү казыктары бар.
Эгерде IN1-бийик (+5V), IN2-төмөн (GND), OUT1 жогору бурулат жана OUT2 төмөн бурулат, ошондо биз моторду айдай алабыз.
Эгерде IN3-бийик (+5V), IN4-төмөн (GND) болсо, OUT4 жогору бурулат жана OUT3 төмөн бурулат, андыктан LED лента жарыгы күйөт.
Эгерде сиз мотордун айлануу багытын өзгөрткүңүз келсе, IN1 жана IN2 полярдуулугун тескерисинче IN3 жана IN4 үчүн.
ENA жана ENBге PWM сигналын колдонуу менен сиз эки башка чыгаруу портундагы мотордун ылдамдыгын көзөмөлдөй аласыз.
Такта номиналдык 7Vдан 12Vга чейин кабыл алат.
Секирүүчүлөр: Үч секирүүчү казык бар; Jumper 1: Эгерде сизде моторго 12Вдан ашык электр энергиясы керек болсо, анда Jumper 1ди ажыратып, 12V терминалында керектүү чыңалууну (max 35V) колдонушуңуз керек. 5V терминалында дагы 5V камсыздоону жана киргизүүнү алып келиңиз. Ооба, 12Vдан ашык колдонуу керек болсо, 5V киргизүү керек (Jumper 1 алынып салынганда).
5V киргизүү ICдин туура иштеши үчүн, анткени секиргичти алып салуу орнотулган 5V жөндөгүчтү иштен чыгарат жана 12V терминалдан жогорку кирүү чыңалуусунан коргойт.
5V терминалы сиздин камсыздооңуз 7Vдан 12Vга чейин болсо, чыгуучу катары иштейт жана эгер сиз 12Vдан ашык колдонсоңуз, секирүүчү алынып салынат.
Jumper 2 жана Jumper 3: Эгерде сиз бул эки секиргичти алып салсаңыз, микроконтроллерден сигналды иштетүү жана өчүрүү керек, көпчүлүк колдонуучулар эки секиргичти алып салууну жана микроконтроллерден сигналды колдонууну жактырышат.
Эгерде сиз эки секиргичти кармасаңыз, OUT1ден OUT4кө чейин дайыма иштей берет. OUT1 жана OUT2 үчүн ENA секирүүчүсүн эстеңиз. OUT3 жана OUT4 үчүн ENB секиргичи.
5 -кадам: C программасына код жазуу. HEX файлын микроконтроллердин флэш -эсине жүктөө
Интегралдык өнүктүрүү платформасын колдонуу менен C Codeде AVR микроконтроллер тиркемесин жазуу жана куруу - Atmel Studio.
#ifndef F_CPU #аныктоо F_CPU 16000000UL // контроллердин кристаллдык жыштыгын айтуу (16 MHz AVR ATMega328P) #endif
#include // header, пиндердин үстүндө маалымат агымын башкарууну иштетүү үчүн. Пиндерди, портторду ж.б. аныктайт #include // header программасында кечигүү функциясын иштетүү үчүн
#define BUTTON1 2 // баскычты которуу B пин 2 портуна туташуу #DEBOUNCE_TIME 25ти аныктоо // "de-bouncing" баскычын күтүү убактысы #define LOCK_INPUT_TIME 300 // баскычты баскандан кийин күтүү убактысы
// Timer0, PWM Initialization void timer0_init () {// которуу режиминде таймер OC0A, OC0B пин орнотуу жана CTC режиминде TCCR0A | = (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // таймерди prescaler менен орнотуу = 256 TCCR0B | = (1 << CS02); // эсептегичти инициализациялоо TCNT0 = 0; // баштоо салыштыруу мааниси OCR0A = 0; }
// ADC Initialization void ADC_init () {// ADCти иштетүү, тандап алуу freq = osc_freq/128 prescaler максималдуу мааниге, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
ADMUX = (1 << REFS0); // Voltage Reference тандоо (AVCC)
// Түймө которуштуруу статусу белгисиз char button_state () {
/ * баскыч BUTTON1 бит ачык болгондо басылат */
эгер (! (PINB & (1 <
{
_delay_ms (DEBOUNCE_TIME);
эгер (! (PINB & (1 <
}
return 0;
}
// Портторду баштоо void port_init () {DDRB = 0b00011011; // PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2-ТҮЙМӨЛҮК ТУУРДУУ ПОРТБ = 0b00010110;
DDRD = 0b01100000; // PD5-ENB (OC0B), PD6-ENA (OC0A) PORTD = 0b00000000;
DDRC = 0b00000000; // PC0-ADC PORTC = 0b00000000; // PORTC бардык казыктарын өчүрүп коюңуз. }
// Бул функция аналогдун маанисин санарипке которот. uint16_t get_LightLevel () {_delay_ms (10); // Канал тандалганга чейин бир аз күтө туруңуз ADCSRA | = (1 << ADSC); // ADSC битин коюу менен ADC конверсиясын баштаңыз. ADSCке 1 жазыңыз
while (ADCSRA & (1 << ADSC)); // Конверсиянын бүтүшүн күтө туруңуз
// ADSC ага чейин кайра 0 болуп калат, циклди тынымсыз иштетүү _delay_ms (10); кайтуу (ADC); // 10 биттик жыйынтыкты кайтарыңыз
}
// Бул функция бир диапазондогу (0-1023) башка диапазонго (0-100) кайра карта коет. 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 main (боштук)
{uint16_t i1 = 0;
port_init ();
timer0_init (); ADC_init (); // ADC инициализациясы
учурда (1)
{i1 = карта (get_LightLevel (), 0, 1023, 0, 100);
OCR0A = i1; // Орнотууну салыштыруу реестр каналы A OCR0B = 100-i1; // Чыгууну салыштыруу регистринин каналын коюу B (тескери)
if (button_state ()) // Эгерде кнопка басылса, LEDдин абалын которуңуз жана 300msге кечиктириңиз (#define LOCK_INPUT_TIME) {PORTB ^= (1 << 0); // IN1 пиндин учурдагы абалын которуу. PORTB ^= (1 << 1); // IN2 пиндин учурдагы абалын которуу. Мотордун айлануу багытын тескери буруңуз
PORTB ^= (1 << 3); // IN3 пиндин учурдагы абалын которуу. PORTB ^= (1 << 4); // IN4 пиндин учурдагы абалын которуу. LED тасмасы өчүрүлөт/күйгүзүлөт. _ кечигүү_ms (LOCK_INPUT_TIME); }}; return (0); }
Программалоо аяктады. Андан кийин, долбоордун кодун hex файлына түзүү жана түзүү.
HEX файлын микроконтроллердин флэш -эсине жүктөө: DOS чакыруу терезесине буйрукту териңиз:
avrdude –c [программисттин аты] –p m328p –u –U flash: w: [hex файлыңыздын аталышы]
Менин учурда бул:
avrdude –c ISPProgv1 –p m328p –u –U flash: w: PWM.hex
Бул буйрук он алтылык файлды микроконтроллердин эсине жазат. Видеону микроконтроллердин флэш -эсинин толук сүрөттөлүшү менен көрүңүз: Микроконтроллердин флеш -эси күйүп жатат…
Макул! Эми микроконтроллер биздин программанын көрсөтмөсүнө ылайык иштейт. Кел, аны текшерип көрөлү!
6 -кадам: Электр схемасы
Схемалык схемага ылайык компоненттерди туташтырыңыз.
Сунушталууда:
Arduino Control DC моторунун ылдамдыгы жана багыты потенциометрди, OLED дисплейди жана баскычтарды колдонуу: 6 кадам
Arduino Control DC моторунун ылдамдыгы жана багыты потенциометрди, OLED дисплейди жана баскычтарды колдонуу: Бул окуу куралында биз L298N DC MOTOR CONTROL драйверин жана потенциометрди DC моторунун ылдамдыгын жана багытын эки баскыч менен башкаруу жана потенциометрдин маанисин көрсөтүү үчүн колдонууну үйрөнөбүз. OLED дисплейинде. Демонстрациялык видеону көрүңүз
Arduino Control DC моторунун ылдамдыгы жана багыты потенциометрди жана баскычтарды колдонуу: 6 кадам
Ардуино Control DC моторунун ылдамдыгы жана багыты потенциометрди жана баскычтарды колдонуу: Бул окуу куралында биз L298N DC MOTOR CONTROL драйверин жана потенциометрди DC моторунун ылдамдыгын жана багытын эки баскыч менен башкаруу үчүн колдонууну үйрөнөбүз
Потенциометрди колдонуу менен Arduino Control DC моторунун ылдамдыгы жана багыты: 6 кадам
Потенциометрди колдонуу менен Arduino Control DC моторунун ылдамдыгы жана багыты: Бул окуу куралында биз L298N DC MOTOR CONTROL драйверин жана потенциометрди DC моторунун ылдамдыгын жана багытын башкаруу үчүн колдонууну үйрөнөбүз
Nodemcu жана Blynk менен Quadcopter (Учуу көзөмөлчүсү жок): 5 кадам (Сүрөттөр менен)
Квадрокоптер Nodemcu жана Blynk менен (Учуу көзөмөлчүсү жок): Саламатсыздарбы балдар!! Учуу диспетчери жок учкучсуз учакты издөө ушул жерде аяктайт. Мен кандайдыр бир долбоорду ишке ашыруу үчүн дрондорду жасап жаткам. учуу диспетчери жана ал абдан нааразы болду
Импульстун туурасы модуляцияланган LED шамы: 8 кадам
Pulse Width Модулированный LED Torch: Pulse туурасы модуляциясы (PWM) көптөгөн түзмөктөрдүн кубаттуулугун, ылдамдыгын же жарыктыгын өзгөртүү үчүн колдонулушу мүмкүн. Жарык диоддору менен PWM аларды күңүрттөө же жаркыратуу үчүн колдонулушу мүмкүн. Мен аларды кичинекей кол шамы кылып жасайм. LEDди тез күйгүзүү менен күңүрт болот