Агуулгын хүснэгт:
- Алхам 1: Тодорхойлолт
- Алхам 2: AVR таймерууд - PWM горим
- Алхам 3: Гэрлийн эрчмийг хэмжих - ADC & LDR
- Алхам 4: Controller DC Motor & Dual H-Bridge Motor Driver Module-L298N
- Алхам 5: C програм дээр код бичих. HEX файлыг микроконтроллерийн флаш санах ойд байршуулах
- Алхам 6: Цахилгаан хэлхээ
Видео: AVR микроконтроллер. Импульсийн өргөний модуляци. DC мотор ба LED гэрлийн эрчимийг хянагч: 6 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:03
Бүгдээрээ сайн уу!
Импульсийн өргөний модуляци (PWM) нь цахилгаан холбоо, цахилгаан хяналтанд маш түгээмэл техник юм. Энэ нь мотор, LED, чанга яригч гэх мэт цахилгаан төхөөрөмжөөс тэжээгддэг хүчийг хянахад ихэвчлэн хэрэглэгддэг бөгөөд энэ нь аналог мессежийн дохионы дагуу дамжуулагч импульсийн өргөнийг өөрчилдөг модуляцийн техник юм..
Бид гэрлийн эрчимээс хамаарч тогтмол гүйдлийн хөдөлгүүрийн эргэлтийн хурдыг хянах энгийн цахилгаан хэлхээг хийдэг. Бид гэрлийн эрч хүчийг хэмжихийн тулд Гэрэл хамааралтай эсэргүүцэл ба AVR микроконтроллерийн аналоги тооноос хөрвүүлэх шинж чанарыг ашиглах гэж байна. Мөн бид хос H-Bridge мотор драйверийн модуль-L298N-ийг ашиглах гэж байна. Энэ нь ихэвчлэн моторын хурд, чиглэлийг хянахад ашиглагддаг боловч зарим гэрэлтүүлгийн төслүүдийн гэрэлтүүлгийг нэмэгдүүлэх гэх мэт бусад төслүүдэд ашиглаж болно. Түүнчлэн, хөдөлгүүрийн эргэх чиглэлийг солих товчлуурыг манай хэлхээнд нэмсэн.
Алхам 1: Тодорхойлолт
Энэ дэлхийн бүх бие махбодь бүр инерцтэй байдаг. Мотор асаах бүрт эргэдэг. Үүнийг унтраасан даруйд зогсох хандлагатай болно. Гэхдээ тэр даруй зогсдоггүй, хэсэг хугацаа шаардагддаг. Гэхдээ бүрэн зогсохоосоо өмнө дахин асдаг! Тиймээс тэр хөдөлж эхэлдэг. Гэхдээ одоо ч гэсэн түүний бүрэн хурдыг олж авахад хэсэг хугацаа шаардагдана. Гэхдээ ийм зүйл болохоос өмнө үүнийг унтраасан гэх мэт. Тиймээс энэ үйл ажиллагааны ерөнхий үр нөлөө нь мотор тасралтгүй эргэлддэг боловч бага хурдтай байдаг.
Импульсийн өргөний модуляци (PWM) нь харьцангуй сүүлийн үед цахилгаан асаах болон бүрэн унтраах түвшний хооронд завсрын хэмжээний цахилгаан эрчим хүч нийлүүлэх арга юм. Ихэвчлэн дижитал импульс нь асаах, унтраах хугацаатай байдаг боловч зарим тохиолдолд дижитал импульс илүү/бага байх шаардлагатай байдаг. ХОУХ -ны техникт бид завсрын хүчдэлийн шаардлагатай утгыг авахын тулд асаах, унтраах тэгш бус тооны дижитал импульс үүсгэдэг.
Ажлын мөчлөгийг бүрэн дижитал импульсийн өндөр хүчдэлийн үргэлжлэх хугацааны хувиар тодорхойлдог. Үүнийг дараахь томъёогоор тооцоолж болно.
Үүргийн мөчлөгийн % = T on /T (хугацааны хугацаа) x 100
Асуудлын талаархи мэдэгдлийг авч үзье. Бид 45% -ийн ажлын мөчлөгтэй 50 Гц давтамжтай ХОУХШ -ийн дохио үүсгэх ёстой.
Давтамж = 50 Гц
Цаг хугацаа, T = T (асаалттай) + T (унтраалттай) = 1/50 = 0.02 s = 20 ms
Ажлын мөчлөг = 45%
Тиймээс, дээр дурдсан тэгшитгэлийн дагуу бид олж авна
T (асаалттай) = 9 ms
T (унтраалттай) = 11 ms
Алхам 2: AVR таймерууд - PWM горим
ХОУХ -ийг хийхийн тулд AVR нь тусдаа тоног төхөөрөмж агуулдаг! Үүнийг ашигласнаар CPU нь тодорхой үүргийн мөчлөгийн ХБХ үйлдвэрлэхийг техник хангамжид зааварладаг. ATmega328 нь ХОУХ -ны 6 гаралттай, 2 нь таймер/тоолуур0 (8 бит) дээр, 2 нь таймер/тоолуур1 (16 бит) дээр, 2 нь таймер/тоолуур2 (8 бит) дээр байрладаг. Таймер/Тоолуур0 нь ATmega328 дээрх хамгийн энгийн ХБХ төхөөрөмж юм. Timer/Counter0 нь 3 горим дээр ажиллах чадвартай:
- Хурдан ХОУХ
- Үе шат ба давтамжийг залруулсан ХОУХ
- Үе шатыг залруулсан ХБХ
Эдгээр горим бүрийг урвуу эсвэл урвуугаар хийх боломжтой.
Timer0 -ийг PWM горимд эхлүүлэх:
TCCR0A | = (1 << WGM00) | (1 << WGM01) - WGM: Fast PWM -ийг тохируулах
TCCR0A | = (1 << COM0A1) | (1 << COM0B1) - A, B гаралтын горимыг харьцуулж тохируулна уу.
TCCR0B | = (1 << CS02) - таймерыг урьдчилсан тооцоолуураар тохируулах = 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; - Оролтын сувгийг тохируулах = ADC0
ADC AVR микроконтроллерийн дэлгэрэнгүй тайлбар бүхий видеог үзээрэй: AVR микроконтроллер. Гэрлийн эрчмийг хэмжих. ADC & LDR
Алхам 4: Controller DC Motor & Dual H-Bridge Motor Driver Module-L298N
Микроконтроллер нь ерөнхийдөө 100 миллиамп -аас ихгүй гүйдэл дамжуулах чадваргүй тул бид DC мотор драйверуудыг ашигладаг. Микроконтроллер нь ухаалаг боловч хүчтэй биш; Энэ модуль нь өндөр хүчдэлийн тогтмол гүйдлийн хөдөлгүүрийг ажиллуулахын тулд микроконтроллеруудад зарим булчинг нэмж өгөх болно. Энэ нь 2 тогтмол гүйдлийн 2 мотор тус бүр 2 ампер хүртэл эсвэл нэг шатлалт моторыг удирдах боломжтой. Бид PWM болон хөдөлгүүрийн эргэлтийн чиглэлийг ашиглан хурдыг хянах боломжтой. Түүнчлэн, энэ нь LED соронзон хальсны гэрлийг сайжруулахад ашиглагддаг.
Пин тайлбар:
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 хүртэлх хүчдэлийг хүлээн авах боломжтой.
Үсрэгчид: Гурван холбогч тээглүүр байдаг; 1 -р холбогч: Хэрэв танд мотор 12В -оос дээш хүчдэл хэрэгтэй бол та холбогч 1 -ийг салгаж, 12V терминал дээр хүссэн хүчдэл (хамгийн их 35В) өгөх хэрэгтэй. 5V -ийн терминал дээр өөр 5V -ийн тэжээл, оролтыг авчирна уу. Тийм ээ, хэрэв та 12В -оос дээш хүчдэл ашиглах шаардлагатай бол 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 програмд саатуулах функцийг идэвхжүүлнэ
#define BUTTON1 2 // товчлуурын унтраалга B pin 2-т холбогдсон #DEBOUNCE_TIME 25-ийг тодорхойлох // "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 эхлүүлэх void ADC_init () {// ADC -ийг идэвхжүүлээрэй, түүвэрлэлтийн freq = osc_freq/128 prescaler -ийг хамгийн их утгад тохируулна, 128 ADCSRA | = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
ADMUX = (1 << REFS0); // Хүчдэлийн лавлагаа (AVCC) сонгох
// Товч солих статус гарын үсэг зураагүй char button_state () {
/ * BUTTON1 бит тодорхой байх үед товчлуур дарагдана */
хэрэв (! (PINB & (1 <
{
_хойшлох_ms (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 гэж бичнэ үү
байхад (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) {буцах (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); }}; буцах (0); }
Програмчлал дууссан. Дараа нь төслийн кодыг hex файл болгон бүтээж эмхэтгэнэ.
HEX файлыг микроконтроллерийн флаш санах ойд байршуулж байна: DOS хүлээх цонхонд дараах тушаалыг бичнэ үү:
avrdude –c [програмистын нэр] –p m328p –u –U флэш: w: [таны зургаан талт файлын нэр]
Миний хувьд энэ нь:
avrdude –c ISPProgv1 –p m328p –u –U flash: w: PWM.hex
Энэ тушаал нь hex файлыг микроконтроллерийн санах ойд бичдэг. Микроконтроллерийн флаш санах ойн шаталтын дэлгэрэнгүй тайлбар бүхий видеог үзээрэй: Микроконтроллерийн флаш санах ой шатаж байна …
Болж байна уу! Одоо микроконтроллер нь манай програмын зааврын дагуу ажиллаж байна. Үүнийг шалгаж үзье!
Алхам 6: Цахилгаан хэлхээ
Схемийн дагуу бүрэлдэхүүн хэсгүүдийг холбоно уу.
Зөвлөмж болгож буй:
Visuino нь LED -ийн тод байдлыг өөрчлөхийн тулд импульсийн өргөний модуляцийг (PWM) хэрхэн ашиглах вэ: 7 алхам
Visuino нь LED -ийн тод байдлыг өөрчлөхийн тулд импульсийн өргөний модуляцийг (PWM) хэрхэн ашиглах вэ: Энэхүү гарын авлагад бид Arduino UNO болон Visuino -той холбогдсон LED -ийг ашиглан импульсийн өргөний модуляц (PWM) ашиглан тод байдлыг нь өөрчлөх болно
Температур ба гэрлийн эрчимийг хэрхэн яаж хийх вэ? Proteus симуляци - Гүйцэтгэх - Liono Maker: 5 алхам
Температур ба гэрлийн эрчимийг хэрхэн яаж хийх вэ? Proteus симуляци | Гүйцэтгэх | Liono Maker: Сайн байна уу энэ бол Liono Maker, энэ бол миний албан ёсны YouTube суваг юм. Энэ бол нээлттэй эх сурвалжтай YouTube суваг юм.Энэ холбоос байна: Liono Maker YouTube Channel энд видео линк байна: Temp & Гэрлийн эрч хүчийг бүртгэх Энэ гарын авлагад бид Темпер хэрхэн хийхийг сурах болно
BH1715 ба Raspberry Pi: 5 алхам ашиглан гэрлийн эрчимийг хэмжих
BH1715 ба Raspberry Pi ашиглан гэрлийн эрчимийг хэмжих: Өчигдөр бид LCD дэлгэц дээр ажиллаж байсан бөгөөд тэдгээрийн дээр ажиллаж байхдаа гэрлийн эрчимийг тооцоолохын ач холбогдлыг ойлгосон. Гэрлийн эрч хүч нь зөвхөн энэ ертөнцийн физик ертөнцөд чухал үүрэг гүйцэтгэдэг төдийгүй биологид сайн үүрэг гүйцэтгэдэг
LED ашиглан импульсийн өргөний модуляцид (PWM) зориулсан Visuino RAMPS: 8 алхам
LED ашиглан импульсийн өргөний модуляци (PWM) хийх Visuino RAMPS: Энэхүү гарын авлагад бид Arduino UNO болон Visuino -той холбогдсон LED -ийг ашиглан импульсийн өргөний модуляци (PWM) болон налуу замыг ашиглан LED -ийг бүдэгрүүлэх болно
Энгийн (ба бохир) импульсийн өргөний модуляци (PWM) 555 таймертай: 3 алхам
555 таймертай энгийн (ба бохир) импульсийн өргөний модуляци (PWM): 555 таймер ашиглан DC моторын хурдыг хянах энгийн сэнс (сэнсний хурдны хяналт, гэрэл / LED бүдэгрүүлэх гэх мэт). гар 555 таймер IC -тай бохирдсон. Зарим нь үүнийг хамгийн их биш гэж маргах болно