- Какво е ШИМ сигнал?
- Как да конвертирате ШИМ сигнал в аналогово напрежение?
- Електрическа схема:
- Програмиране на MSP за ШИМ сигнал:
- Управление на яркостта на светодиода с ШИМ:
Този урок е част от поредицата уроци за MSP430G2 LaunchPad, в които се учим да използваме MSP430G2 LaunchPad от Texas Instruments. Досега научихме основите на платката и разгледахме как да четем аналогово напрежение, интерфейс LCD с MSP430G2 и т.н. Сега продължаваме със следващата стъпка за изучаване на ШИМ в MSP430G2. Ще направим това, като контролираме яркостта на светодиода, като променяме потенциометъра. Така че потенциометърът ще бъде прикрепен към аналогов щифт на MSP430, за да отчете неговото аналогово напрежение, поради което е препоръчително да знаете, че трябва да преминете през ръководството за ADC, преди да продължите.
Какво е ШИМ сигнал?
Модулация на широчината на импулса (PWM) е цифров сигнал, който се използва най-често в схемите за управление. Този сигнал е настроен на висок (3.3v) и нисък (0v) за предварително зададено време и скорост. Времето, през което сигналът остава висок, се нарича „on time“, а времето, през което сигналът остава нисък, се нарича „off time“. Има два важни параметъра за ШИМ, както е обсъдено по-долу:
Работен цикъл на ШИМ:
Процентът от времето, през което ШИМ сигналът остава ВИСОКИ (навреме) се нарича работен цикъл. Ако сигналът винаги е включен, той е в 100% работен цикъл и ако винаги е изключен, това е 0% работен цикъл.
Работен цикъл = Време за включване / (Време за включване + Време за изключване)
Честота на ШИМ:
Честотата на PWM сигнал определя колко бързо PWM завършва един период. Един период е завършен и изключен на ШИМ сигнал, както е показано на горната фигура. В нашия урок честотата е 500Hz, тъй като това е стойността по подразбиране, зададена от Energia IDE.
Има множество приложения за PWM сигнали в реално време, но за да ви дадем представа, PWM сигналът може да се използва за управление на серво мотори и може да се преобразува в аналогово напрежение, което може да контролира яркостта на яркостта на светодиода. Нека научим малко за това как може да се направи това.
Ето няколко примера за ШИМ с други микроконтролери:
- Генериране на ШИМ с помощта на микроконтролер PIC с MPLAB и XC8
- Серво моторно управление с Raspberry Pi
- LED димер, базиран на Arduino, използващ ШИМ
Проверете всички проекти, свързани с ШИМ тук.
Как да конвертирате ШИМ сигнал в аналогово напрежение?
За ШИМ сигнали към аналогово напрежение можем да използваме верига, наречена RC филтър. Това е проста и най-често използвана схема за тази цел. Веригата включва последователно резистор и кондензатор, както е показано в схемата по-долу.
И така, това, което всъщност се случва тук, е, че когато PWM сигналът е висок, кондензаторът се зарежда чрез резистора и когато PWM сигналът отива ниско, кондензаторът се разрежда през съхранения заряд. По този начин винаги ще имаме постоянно напрежение на изхода, което ще бъде пропорционално на работния цикъл на ШИМ.
В графиката, показана по-горе, жълтият цвят е ШИМ сигналът, а синият цветен е изходното аналогово напрежение. Както можете да видите, изходната вълна няма да бъде чиста постоянна вълна, но трябва много добре да работи за нашето приложение. Ако имате нужда от чиста DC вълна за друг тип приложения, трябва да проектирате комутационна верига.
Електрическа схема:
Схемата е доста проста; той просто има потенциометър и резистор и кондензатор, за да образува RC верига и самия Led. Потенциометърът се използва за осигуряване на аналогово напрежение, въз основа на което може да се контролира работният цикъл на ШИМ сигнала. Изходът на пота е свързан към Pin P1.0, който може да отчита аналогови напрежения. След това трябва да произведем ШИМ сигнал, което може да се направи с помощта на щифта Р1.2, този ШИМ сигнал се изпраща след това към RC филтърната верига, за да преобразува ШИМ сигнала в аналогово напрежение, което след това се дава на светодиода.
Много е важно да се разбере, че не всички щифтове на платката MSP могат да четат аналогово напрежение или да генерират PWM щифтове. Конкретните щифтове, които могат да изпълняват конкретните задачи, са показани на фигурата по-долу. Винаги използвайте това като насока, за да изберете пиновете си за програмиране.
Съберете цялата схема, както е показано по-горе, можете да използвате макет и няколко джъмперни проводника и лесно да направите връзките. След като свързването свърши, дъската ми изглеждаше, както е показано по-долу.
Програмиране на MSP за ШИМ сигнал:
След като хардуерът е готов, можем да започнем с нашето програмиране. Първото нещо в програмата е да декларираме щифтовете, които ще използваме. Тук ще използваме пин номер 4 (P1.2) като изходен пин, тъй като той има способността да генерира ШИМ. Така че ние създаваме променлива и присвояваме името на пина, така че да е лесно да се обърнете към нея по-късно в програмата. Пълната програма е дадена в края.
int PWMpin = 4; // Използваме 4-ия щифт на MSP модула като PWM щифт
След това дойде на настройка функция. Какъвто и код да е написан тук, ще бъде изпълнен само веднъж, тук декларираме, че използваме този 4 -ти пин като изходен пин, тъй като PWM е изходна функционалност. Имайте предвид, че тук сме използвали променливата PWMpin вместо числото 4, така че кодът да изглежда по-смислен
void setup () { pinMode (PWMpin, OUTPUT); // PEMpin е зададен като Outptut }
Най-накрая да влезе в цикъл функция. Каквото и да напишем тук, се изпълнява отново и отново. В тази програма трябва да прочетем аналоговото напрежение и да генерираме ШИМ сигнал съответно и това трябва да се случва отново и отново. Така че първо да започнем с четене на аналоговото напрежение от щифта A0, тъй като към него сме свързали потенциометър.
Тук четем стойността с помощта на функцията AanalogRead , тази функция ще върне стойност от 0-1024 въз основа на стойността на напрежението, приложено към щифта. След това съхраняваме тази стойност в променлива, наречена “val”, както е показано по-долу
int val = analogRead (A0); // отчитаме ADC стойността от щифт A0
Трябва да преобразуваме стойностите от 0 до 1024 от ADC в стойности от 0 до 255, за да го дадем на функцията PWM. Защо трябва да преобразуваме това? Ще го кажа накратко, но засега не забравяйте, че трябва да конвертираме. За да конвертирате един набор от стойности в друг набор от стойности, Energia има функция на картата, подобна на Arduino. Затова преобразуваме стойностите от 0-1204 в 0-255 и ги запазваме обратно в променливата “val”.
val = карта (val , 0, 1023, 0, 255); // ADC ще даде стойност 0-1023, преобразува го в 0-255
Сега имаме променлива стойност 0-255 въз основа на позицията на потенциометъра. Всичко, което трябва да направим, е да използваме тази стойност на PWM щифта, това може да стане с помощта на следния ред.
analogWrite (PWMpin, val); // Запишете тази стойност в PWM щифта.
Да се върнем на въпроса защо 0-255 се записва в PWM щифта. Тази стойност 0-255 решава работния цикъл на ШИМ сигнала. Например, ако стойността на сигнала е 0, това означава, че работният цикъл е 0%, за 127 е 50%, а за 255 е 100%, точно както е показано и обяснено в горната част на тази статия.
Управление на яркостта на светодиода с ШИМ:
След като разберете хардуера и кода, е време да се позабавлявате с работата на веригата. Качете кода на платката MSP430G2 и завъртете копчето за потенциометър. Докато въртите копчето, напрежението на щифт 2 ще варира, което ще се чете от микроконтролера и според напрежението PWM сигналите ще се генерират на щифт 4. Колкото по-голямо е напрежението, толкова по-голям ще бъде работният цикъл и обратно.
След това този ШИМ сигнал се преобразува в аналогово напрежение, за да свети светодиод. В яркостта на светодиод е пряко пропорционално на работния цикъл PWM сигнал. Освен LED на борда, можете да забележите и smd светодиода (червен цвят), който променя яркостта си, подобно на led на борда. Това е LED също е свързан към същия щифт, но той няма RC мрежа, така че всъщност мига много бързо. Можете да разклатите дъската в тъмна стая, за да проверите нейния трептящ характер. Цялата работа може да се види и във видеото по-долу.
Това е всичко за сега хора, научихме се как да използваме ШИМ сигнали на платката MSP430G2, в следващия урок ще научим колко лесно е да управляваме серво мотор, използвайки същите ШИМ сигнали. Ако имате някакви съмнения, публикувайте ги в раздела за коментари по-долу или във форумите за техническа помощ.