Мазмұны:

AVR микроконтроллері. Импульстің ені модуляциясы. Тұрақты ток қозғалтқышы мен жарықдиодты жарықтың қарқындылығын бақылаушы: 6 қадам
AVR микроконтроллері. Импульстің ені модуляциясы. Тұрақты ток қозғалтқышы мен жарықдиодты жарықтың қарқындылығын бақылаушы: 6 қадам

Бейне: AVR микроконтроллері. Импульстің ені модуляциясы. Тұрақты ток қозғалтқышы мен жарықдиодты жарықтың қарқындылығын бақылаушы: 6 қадам

Бейне: AVR микроконтроллері. Импульстің ені модуляциясы. Тұрақты ток қозғалтқышы мен жарықдиодты жарықтың қарқындылығын бақылаушы: 6 қадам
Бейне: Avr studiо, proteus, программатор | Микроконтроллеры с нуля #2 2024, Желтоқсан
Anonim
Image
Image

Барлығына сәлем!

Импульстік ен модуляциясы (PWM) - телекоммуникация мен қуатты басқаруда өте кең тараған әдіс. ол әдетте электрлік құрылғыға берілетін қуатты басқару үшін қолданылады, ол қозғалтқыш, жарық диоды, динамиктер және т..

Біз тұрақты ток қозғалтқышының жарық қарқындылығына байланысты айналу жылдамдығын басқару үшін қарапайым электр тізбегін жасаймыз. Біз жарық интенсивтілігін өлшеу үшін жарыққа тәуелді резистор мен AVR микроконтроллерінің аналогты цифрлық түрлендіруді қолданатын боламыз. Біз сондай-ақ L298N D-H-Bridge мотор драйверінің модулін қолданамыз. Ол әдетте қозғалтқыштардың жылдамдығы мен бағытын басқаруда қолданылады, бірақ оны басқа жобалар үшін қолдануға болады, мысалы, кейбір жарықтандыру жобаларының жарықтығы. Сондай -ақ, қозғалтқыштың айналу бағытын ауыстыру үшін біздің схемаға түйме қосылды.

1 -қадам: Сипаттама

Сипаттама
Сипаттама
Сипаттама
Сипаттама

Бұл әлемдегі әрбір денеде инерция бар. Қозғалтқыш қосылған кезде айналады. Ол өшіріле салысымен тоқтап қалады. Бірақ ол бірден тоқтамайды, біраз уақыт қажет. Бірақ ол толық тоқтамай тұрып, қайтадан қосылады! Осылайша ол қозғала бастайды. Бірақ қазірдің өзінде оның толық жылдамдығына жету үшін біраз уақыт қажет. Бірақ ол болмай тұрып, оны өшіреді және т.б. Осылайша, бұл әрекеттің жалпы әсері - қозғалтқыш үздіксіз айналады, бірақ төмен жылдамдықта.

Импульстік ен модуляциясы (PWM) - бұл толық қосылған және толық өшірілген деңгейлер арасында электр энергиясының аралық көлемін қамтамасыз ететін салыстырмалы түрде соңғы кездегі коммутация әдісі. Әдетте, цифрлық импульстердің қосылу және өшіру уақыттары бірдей болады, бірақ кейбір жағдайларда уақыт/үзіліс уақытында көбірек/аз болуы үшін бізге цифрлық импульс қажет. PWM техникасында біз кернеудің аралық мәндерін алу үшін тең емес қосылу және өшіру күйіндегі цифрлық импульстер жасаймыз.

Жұмыс циклы толық цифрлы импульстегі жоғары кернеудің ұзақтығының пайызымен анықталады. Оны есептеуге болады:

Duty циклінің % = T on /T (кезең уақыты) x 100

Мәселе туралы мәлімдеме алайық. Біз 45% жұмыс циклі бар 50 Гц PWM сигналын жасауымыз керек.

Жиілік = 50 Гц

Уақыт кезеңі, T = T (қосулы) + Т (өшірулі) = 1/50 = 0,02 с = 20 мс

Жұмыс циклі = 45%

Осылайша, жоғарыда келтірілген теңдеуге сәйкес біз аламыз

T (қосулы) = 9 мс

T (өшірулі) = 11 мс

2 -қадам: AVR таймері - PWM режимі

AVR таймері - PWM режимі
AVR таймері - PWM режимі
AVR таймері - PWM режимі
AVR таймері - PWM режимі

PWM жасау үшін AVR бөлек жабдықты қамтиды! Осыны қолдана отырып, процессор аппараттық құралға белгілі бір жұмыс циклінің PWM өндіруін тапсырады. ATmega328 -де 6 PWM шығысы бар, 2 таймерде/есептегіште0 (8бит), 2 таймерде/есептегіште1 (16 бит), ал 2 таймерде/есептегіште 2 (8 биттік) орналасқан. Таймер/Counter0 - ATmega328 -дегі ең қарапайым PWM құрылғысы. Таймер/Counter0 3 режимде жұмыс істей алады:

  • Жылдам PWM
  • Фазалық және жиіліктік түзетілген PWM
  • Фазалық түзетілген PWM

бұл режимдердің әрқайсысы инвертті немесе кері емес болуы мүмкін.

PWM режимінде Timer0 инициализациясы:

TCCR0A | = (1 << WGM00) | (1 << WGM01) - WGM орнату: Жылдам PWM

TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - салыстыру шығыс режимін A, B орнату

TCCR0B | = (1 << CS02) - таймерді алдын ала есептегішпен орнату = 256

3 -қадам: Жарықтың қарқындылығын өлшеу - ADC & LDR

Жарық қарқындылығын өлшеу - ADC & LDR
Жарық қарқындылығын өлшеу - ADC & LDR
Жарық қарқындылығын өлшеу - ADC & LDR
Жарық қарқындылығын өлшеу - ADC & LDR
Жарық қарқындылығын өлшеу - ADC & LDR
Жарық қарқындылығын өлшеу - ADC & LDR

Жарыққа тәуелді резистор (LDR) - жарық өзгерген кезде оның қарсылығын өзгертетін түрлендіргіш.

LDR жартылай өткізгіш материалдардан жасалған, олардың жарық сезімтал қасиеттеріне ие болу үшін. Бұл LDRs немесе PHOTO RESISTORS «Фотоөткізгіштік» принципі бойынша жұмыс істейді. Енді бұл принцип LDR бетіне жарық түскен кезде (бұл жағдайда) элементтің өткізгіштігі жоғарылайды немесе басқаша айтқанда, LDR бетіне жарық түскенде LDR кедергісі төмендейді. LDR кедергісінің төмендеуінің бұл қасиетіне қол жеткізіледі, себебі ол жер бетінде қолданылатын жартылай өткізгіш материалдың қасиеті болып табылады. LDR көбінесе жарықтың болуын анықтау үшін немесе жарық қарқындылығын өлшеу үшін қолданылады.

Сыртқы үздіксіз ақпаратты (аналогтық ақпаратты) цифрлық/есептеу жүйесіне беру үшін біз оларды бүтін (цифрлық) мәндерге түрлендіруіміз керек. Түрлендірудің бұл түрін аналогты цифрлық түрлендіргіш (ADC) жүзеге асырады. Аналогты мәнді цифрлық мәнге айналдыру процесі аналогты цифрлық түрлендіру деп аталады. Қысқаша айтқанда, аналогтық сигналдар - бұл дыбыс пен жарық сияқты айналамыздағы нақты әлем сигналдары.

Сандық сигналдар сандық немесе сандық форматтағы аналогты эквиваленттер болып табылады, оларды микроконтроллерлер сияқты цифрлық жүйелер жақсы түсінеді. ADC - бұл аналогтық сигналдарды өлшейтін және сол сигналдың цифрлық эквивалентін шығаратын аппараттық құралдардың бірі. AVR микроконтроллерлерінде аналогты кернеуді бүтін санға түрлендіретін ADC қондырғысы бар. AVR оны 0-ден 1023-ке дейінгі 10-биттік санға түрлендіреді.

Біз жарық интенсивтілігін өлшеу үшін LDR бар ажыратқыш тізбектен кернеу деңгейін аналогты -цифрлық түрлендіруді қолданамыз.

ADC инициализациясы:

TADCSRA | = (1 << ADEN) - ADC қосу

ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1ADPS0) - ADC prescaler = 128 орнатыңыз

ADMUX = (1 << REFS0) - кернеудің сілтемесін орнату = AVCC; - кіріс арнасын = ADC0 орнатыңыз

ADC AVR микроконтроллерінің толық сипаттамасымен бейнені қараңыз: AVR микроконтроллері. Жарықтың қарқындылығын өлшеу. ADC & LDR

4-қадам: DC қозғалтқышы мен қос H-Bridge мотор драйверінің модулі-L298N

Тұрақты ток қозғалтқышы мен қос H-Bridge драйвер модулі-L298N
Тұрақты ток қозғалтқышы мен қос H-Bridge драйвер модулі-L298N
Тұрақты ток қозғалтқышы мен қос H-Bridge қозғалтқыш модулінің модулі-L298N
Тұрақты ток қозғалтқышы мен қос H-Bridge қозғалтқыш модулінің модулі-L298N
Тұрақты ток қозғалтқышы мен қос H-Bridge драйвер модулі-L298N
Тұрақты ток қозғалтқышы мен қос H-Bridge драйвер модулі-L298N

Біз тұрақты ток қозғалтқыштарының драйверлерін қолданамыз, себебі микроконтроллерлер токты жалпы шамасы 100 миллиамптан аспайды. Микроконтроллерлер ақылды, бірақ күшті емес; Бұл модуль жоғары қуатты тұрақты ток қозғалтқыштарын басқару үшін микроконтроллерлерге кейбір бұлшықеттер қосады. Ол бір мезгілде әрқайсысы 2 амперге дейінгі 2 тұрақты ток қозғалтқышын басқара алады. Біз PWM көмегімен жылдамдықты басқара аламыз, сонымен қатар оның қозғалтқыштардың айналу бағытын. Сонымен қатар, ол жарық диодты таспаның жарықтығын жоғарылату үшін қолданылады.

Сипаттаманы бекіту:

Тұрақты қозғалтқышты қосуға арналған OUT1 және OUT2 порты. Жарықдиодты таспаны қосуға арналған OUT3 және OUT4.

ENA мен ENB қосқыш түйреуіштер: ENA -ны жоғары (+5V) қосу арқылы OUT1 және OUT2 портын қосады.

Егер сіз ENA түйреуішін төменге (GND) қоссаңыз, ол OUT1 мен OUT2 ажыратады. Сол сияқты ENB және OUT3 және OUT4 үшін.

IN1 - IN4 - бұл AVR -ге қосылатын кіріс түйреуіштері.

Егер IN1 жоғары (+5В), IN2 төмен (GND) болса, OUT1 жоғарыға, ал OUT2 төмен айналса, біз моторды басқара аламыз.

Егер IN3-жоғары (+5В), IN4-төмен (GND) болса, OUT4 жоғарыға, ал OUT3 төменге бұрылады, осылайша LED таспа жарығы қосылады.

Егер сіз қозғалтқыштың айналу бағытын өзгерткіңіз келсе, IN1 және IN2 полярлығын дәл IN3 және IN4 үшін өзгертіңіз.

PWM сигналын ENA мен ENB -ге қолдану арқылы сіз екі түрлі шығыс порттарындағы қозғалтқыштардың жылдамдығын басқара аласыз.

Тақта номиналды түрде 7 В -тан 12 В -қа дейін қабылдай алады.

Секіргіштер: үш секіргіш түйреуіш бар; 1 -секіргіш: Егер сізге қозғалтқышқа 12В -тан көп қуат қажет болса, онда сіз 1 -ші қосқышты ажыратып, 12 В -тық терминалда кернеуді (максимум 35 В) қолданыңыз. Басқа 5В кернеуді 5В терминалына қосыңыз. Иә, 12В -тан жоғары кернеу қажет болса, 5В енгізу керек (1 -секіргіш жойылғанда).

5В кіріс IC-тің дұрыс жұмыс істеуі үшін арналған, себебі секіргішті алып тастау кіріктірілген 5В реттегішті өшіреді және 12 В терминалынан жоғары кіріс кернеуінен қорғайды.

5В терминалы, егер сіздің қоректенуіңіз 7В -тан 12В -қа дейін болса, шығыс рөлін атқарады, ал егер сіз 12В -тан жоғары қолдансаңыз және секіргіш алынып тасталса, кіріс ретінде әрекет етеді.

2 -секіргіш пен 3 -ші қосқыш: Егер сіз осы екі секіргішті алып тастасаңыз, микроконтроллерден сигналды қосу және өшіру қажет, пайдаланушылардың көпшілігі екі секіргішті алып тастауды және микроконтроллерден сигналды қолдануды жөн көреді.

Егер сіз екі секіргішті сақтасаңыз, OUT1 -OUT4 әрқашан қосылады. OUT1 және OUT2 үшін ENA секіргішін есте сақтаңыз. OUT3 және OUT4 үшін ENB секіргісі.

5 -қадам: C бағдарламасындағы кодты жазу. HEX файлын микроконтроллердің флэш -жадына жүктеу

Біріктірілген даму платформасы - Atmel Studio көмегімен CR кодында AVR микроконтроллер қосымшасын жазу және құру.

#ifndef F_CPU #анықтау F_CPU 16000000UL // контроллердің кристалды жиілігін айту (16 МГц AVR ATMega328P) #endif

түйіндер бойынша деректер ағынын басқаруды қосу үшін #include // header. Бағдарламада кідіріс функциясын қосу үшін түйреуіштерді, порттарды және т.б. #include // header анықтайды

#define BUTTON1 2 // түйме қосқышы B түйреуіші 2-ге қосылды #DEBOUNCE_TIME 25-ді анықтау // «өшіру» батырмасын күту уақыты #анықтау 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 инициализациясының жарамсыздығы ADC_init () {// ADC қосу, жиілікті таңдау = osc_freq/128 алдын ала есептегішті максималды мәнге, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

ADMUX = (1 << REFS0); // Кернеу анықтамасын таңдау (AVCC)

// Түймені ауыстыру күйі белгісіз char button_state () {

/ * түймесі BUTTON1 биті бос болған кезде басылады */

егер (! (PINB & (1 <

{

_кідіріс_мінеттері (DEBOUNCE_TIME);

егер (! (PINB & (1 <

}

қайтару 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; // В шығыс салыстыру регистрінің арнасын орнатыңыз (кері)

if (button_state ()) // Егер түйме басылса, жарық диодтың күйі мен кідірісін 300 мске ауыстырыңыз (#define LOCK_INPUT_TIME) {PORTB ^= (1 << 0); // IN1 түйреуішінің ағымдағы күйін ауыстыру. PORTB ^= (1 << 1); // IN2 түйреуішінің ағымдағы күйін ауыстыру. Қозғалтқыштың айналу бағытын өзгертіңіз

PORTB ^= (1 << 3); // IN3 түйреуішінің ағымдағы күйін ауыстыру. PORTB ^= (1 << 4); // IN4 түйреуішінің ағымдағы күйін ауыстыру. Жарықдиодты таспа өшірулі/қосулы. _кідіріссіз (LOCK_INPUT_TIME); }}; қайтару (0); }

Бағдарламалау аяқталды. Содан кейін жоба кодын он алтылық файлға құру және құрастыру.

HEX файлын микроконтроллердің флэш -жадына жүктеу: DOS шақыру терезесінде пәрменді теріңіз:

avrdude –c [бағдарламашының аты] –p m328p –u –U жарқыл: w: [он алтылық файлдың атауы]

Менің жағдайда бұл:

avrdude –c ISPProgv1 –p m328p –u –U жарқыл: w: PWM.hex

Бұл пәрмен он алтылық файлды микроконтроллердің жадына жазады. Микроконтроллердің флэш жадының жануы туралы толық сипаттамасы бар бейнені қараңыз: Микроконтроллердің флэш жады жанып тұр …

Жарайды ма! Енді микроконтроллер біздің бағдарламаның нұсқауларына сәйкес жұмыс істейді. Оны тексеріп көрейік!

6 -қадам: Электр тізбегі

Электр тізбегі
Электр тізбегі
Электр тізбегі
Электр тізбегі

Схемалық схемаға сәйкес компоненттерді қосыңыз.

Ұсынылған: