- Основи на ШИМ сигнала
- Хардуерна настройка и изисквания
- Схема на веригата за LED димиране на микроконтролера Nuvoton N76E003
- PWM щифтове на N76E003 Nuvoton Microcontroller
- ШИМ регистри и функции в N76E003 Nuvoton Microcontroller
- ШИМ режими на работа в микроконтролера Nuvoton N6E003
- Програмиране на Nuvoton N76E003 за ШИМ
- Мигане на кода и тестване на изхода
Модулацията на широчината на импулса (PWM) е често използвана техника в микроконтролерите за производство на непрекъснат импулсен сигнал с определена честота и работен цикъл. Накратко, PWM е за промяна на ширината на импулса, докато честотата е постоянна.
PWM сигнал се използва най-вече за управление на серво мотор или яркост на LED. Освен това, тъй като микроконтролерите могат да осигуряват Logic 1 (High) или Logic 0 (Low) на изходните си щифтове, той не може да осигурява променливо аналогово напрежение, освен ако не се използва преобразувател на ЦАП или цифрово-аналогов преобразувател. В такъв случай микроконтролерът може да бъде програмиран да извежда ШИМ с различен работен цикъл, който след това може да бъде преобразуван в променливото аналогово напрежение. Преди това сме използвали PWM периферни устройства и в много други микроконтролери.
- Урок за ARM7-LPC2148 PWM: Управление на яркостта на светодиода
- Модулация с широчина на импулса (ШИМ) с използване на MSP430G2: Контролиране на яркостта на светодиода
- Генериране на ШИМ с помощта на микроконтролер PIC с MPLAB и XC8
- Модулация с широчина на импулса (PWM) в STM32F103C8: Контрол на скоростта на DC вентилатора
- Генериране на PWM сигнали на GPIO щифтове на PIC микроконтролер
- Урок за PWM на Raspberry Pi
- Урок за PWM с ESP32
В този урок ще свържем светодиод, който ще се управлява с помощта на този ШИМ сигнал от микроконтролера N76E003. Ще оценим какъв вид хардуерна настройка се нуждаем и как трябва да програмираме нашия микроконтролер. Преди това нека да разберем някои основи на PWM сигнала.
Основи на ШИМ сигнала
На изображението по-долу е показан постоянен ШИМ сигнал.
Горното изображение не е нищо друго освен постоянна квадратна вълна със същото време за включване и същото време за изключване. Да предположим, че общият период на сигнала е 1 секунда. По този начин времето за включване и изключване е 500ms. Ако към този сигнал е свързан светодиод, той ще се включи за 500ms и ще се изключи за 500ms. Следователно, в изглед в перспектива, светодиодът ще светне с половината от действителната яркост, ако е включен в директен 5V сигнал без никакво време за изключване.
Както е показано на горното изображение, ако работният цикъл се промени, светодиодът ще светне с 25% от действителната яркост, използвайки същия принцип, както беше обсъдено по-горе. Ако искате да научите повече и да научите за Pulse Width Modulation (PWM), можете да разгледате свързаната статия.
Хардуерна настройка и изисквания
Тъй като изискването на този проект е да се управлява светодиода с помощта на ШИМ. За свързване с N76E003 е необходим светодиод. Тъй като в платката за развитие на N76E003 е наличен светодиод, той ще бъде използван в този проект. Не се изискват други компоненти.
Да не говорим, че ни е необходим N76E003 базиран на микроконтролер борд за разработка, както и Nu-Link Programmer. Може да се наложи допълнителен 5V захранващ блок, ако програмистът не се използва като източник на захранване.
Схема на веригата за LED димиране на микроконтролера Nuvoton N76E003
Както можем да видим в схемата по-долу, тестовият светодиод е наличен вътре в платката за разработка и е свързан на порт 1.4. Най-вляво е показана връзката на интерфейса за програмиране.
PWM щифтове на N76E003 Nuvoton Microcontroller
N76E003 има 20 пина, от които 10 пина могат да се използват като ШИМ. На снимките по-долу са показани PWM щифтовете, маркирани в червения квадрат.
Както виждаме, маркираните PWM щифтове могат да се използват и за други цели. Тази друга цел на щифтовете обаче няма да е налична, когато щифтовете са конфигурирани за PWM изход. Пин 1.4, който се използва като ШИМ изходен пин, той ще загуби другата функционалност. Но това не е проблем, тъй като за този проект не се изисква друга функционалност.
Причината за избора на пин 1.4 като изходен пин е, че вграденият тестов светодиод е свързан към този щифт в платката за разработка, поради което не се изискват външни светодиоди. Въпреки това, в този микроконтролер от 20 извода, 10 извода могат да се използват като PWM изходен щифт и всякакви други PWM изводи могат да се използват за свързани с изхода цели.
ШИМ регистри и функции в N76E003 Nuvoton Microcontroller
N76E003 използва системен часовник или препълване на таймер 1, разделен на PWM часовник с възможност за избор на Предскалер от 1/1 ~ 1/128. Периодът на ШИМ може да бъде зададен с помощта на 16-битовия регистър на периоди PWMPH и PWMPL регистър.
Микроконтролерът има шест отделни ШИМ регистри, които генерират шест ШИМ сигнала, наречени PG0, PG1, PG2, PG3, PG4 и PG5. Периодът обаче е един и същ за всеки ШИМ канал, тъй като те споделят един и същ 16-битов брояч на периоди, но дебитният цикъл на всеки ШИМ може да се различава от другите, тъй като всеки ШИМ използва различен 16-битов регистър на работния цикъл, наречен {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L} и {PWM5H, PWM5L}. По този начин в N76E003 шест PWM изхода могат да бъдат генерирани независимо с различни работни цикли.
За разлика от други микроконтролери, разрешаването на PWM не задава I / O щифтовете в PWM изхода им автоматично. По този начин потребителят трябва да конфигурира I / O изходния режим.
И така, каквото и да се изисква за приложението, първата стъпка е да определите или изберете кой един или два или дори повече от два I / O щифта като PWM изход. След избирането на един, I / O щифтовете трябва да бъдат зададени като режим Push-Pull или квази-двупосочен за генериране на PWM сигнал. Това може да бъде избрано с помощта на регистъра PxM1 и PxM2. Тези два регистъра задават режимите на вход / изход, където x означава номера на порта (Например, порт P1.0 регистърът ще бъде P1M1 и P1M2, за P3.0 ще бъде P3M1 и P3M2 и т.н.)
Конфигурацията може да се види на изображението по-долу -
След това следващата стъпка е да активирате PWM в този конкретен вход / изход (и). За да направи това, потребителят трябва да настрои регистрите PIOCON0 или PIOCON1. Регистърът зависи от картографирането на пиновете, тъй като PIOCON0 и PIOCON1 управляват различни пинове в зависимост от PWM сигналите. Конфигурацията на тези два регистъра може да се види на изображението по-долу -
Както виждаме, горният регистър контролира 6 конфигурации. За останалото използвайте регистъра PIOCON1.
По този начин горният регистър контролира останалите 4 конфигурации.
ШИМ режими на работа в микроконтролера Nuvoton N6E003
Следващата стъпка е да изберете режимите на ШИМ. Всеки ШИМ поддържа три режима на работа - независим, синхронен и режим на разрешаване на мъртво време.
Независимият режим предоставя решението, при което шестте ШИМ сигнала могат да се генерират независимо. Това се изисква максимално време, когато операциите или зумерите, свързани с LED, трябва да бъдат включени и контролирани.
В режим синхронни определя PG1 / 3/5 в същата PWM изхода на фаза, също както PG0 / 2/4, където PG0 / 2/4 осигурява независими PWM изходни сигнали. Това се изисква главно за управление на трифазни двигатели.
Режимът на вмъкване на Dead-Time е малко сложен и се прилага в реални двигателни приложения, особено в индустриални приложения. В такива приложения допълнителният ШИМ изход трябва да бъде вмъкване на „мъртво време“, което предотвратява повреда на устройствата за превключване на захранването като GPIB. Конфигурациите се задават в този режим по начин, по който PG0 / 2/4 осигурява PWM изходни сигнали по същия начин като независимия режим, но PG1 / 3/5 осигурява „изходни PWM сигнали“ изход на PG0 / 2/4 съответно и игнорирайте PG1 / 3/5 Дежурен регистър.
Над три режима могат да бъдат избрани, като се използва конфигурацията на регистъра по-долу -
Следващата конфигурация е изборът на PWM типове с помощта на регистъра PWMCON1.
И така, както виждаме, са налични два типа ШИМ, които могат да бъдат избрани с помощта на горния регистър. При подравняване на ръба, 16-битовият брояч използва операция с един наклон, като отброява от 0000H до зададената стойност на {PWMPH, PWMPL} и след това започва от 0000H. Изходната форма на вълната е подравнена вляво.
Но в режим на централно подравняване, 16-битовият брояч използва операция с двоен наклон, като отброява от 0000H до {PWMPH, PWMPL} и след това отново преминава от {PWMPH, PWMPL} до 0000H чрез отброяване. Изходът е подравнен към центъра и е полезен за генериране на неприпокриващи се форми на вълната. Сега накрая операциите за контрол на ШИМ, които могат да бъдат проверени в регистрите по-долу -
За да настроите източника на часовника, използвайте регистъра за управление на часовника CKCON.
ШИМ изходният сигнал може също да бъде маскиран с помощта на регистъра PMEN. Използвайки този регистър, потребителят може да маскира изходния сигнал с 0 или 1.
Следва регистърът за управление на ШИМ -
Горният регистър е полезен за стартиране на ШИМ, зареждане на нов период и дежурно натоварване, контрол на ШИМ флага и изчистване на ШИМ брояча.
Свързаните битови конфигурации са показани по-долу -
За да зададете делител на часовника, използвайте PWMCON1 регистъра за PWM делител на часовника. 5-ият бит се използва за групиран ШИМ с разрешен групов режим и осигурява същия работен цикъл за първите три двойки ШИМ.
Програмиране на Nuvoton N76E003 за ШИМ
Кодирането е просто и пълният код, използван в този урок, може да бъде намерен в долната част на тази страница. Светодиодът е свързан към щифта P1.4. По този начин P1.4 щифтът е необходим, за да се използва за ШИМ изход.
В основната програма настройките се извършват в съответния ред. Под редове с кодове се задава PWM и се конфигурира P1.4 пина като PWM изход.
P14_PushPull_Mode;
Това се използва за настройка на щифта P1.4 в режим на издърпване. Това е дефинирано в библиотеката Function_define.h като-
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
Следващите редове, използвани за активиране на ШИМ в пин P1.4. Това също е дефинирано в библиотеката Function_define.h като-
#define PWM1_P14_OUTPUT_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS- = 0x01; PIOCON1- = 0x02; TA = 0xAA; TA = 0x55; SFRS & = 0xFE; EAP = BIT_T.4 PWM1 изход позволява PWM_IMDEPENDENT_MODE;
Кодът по-долу се използва за настройване на ШИМ в независим режим. В библиотеката Function_define.h тя се определя като-
#define PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
След това трябва да зададем PWM изход тип EDGE. В библиотеката Function_define.h тя се определя като-
#define PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
На следващо място, ние трябва да се изчисти брояч стойност на PWM, който е на разположение в SFR_Macro.h library-
#define set_CLRPWM CLRPWM = 1
След това PWM часовникът е избран като часовник Fsys, а използваният коефициент на деление е 64 деление.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
И двете са определени като-
#define PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
Под реда на кода се използва за маскиране на изходния ШИМ сигнал с 0, дефиниран като-
#define PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
След това трябва да зададем периода от време на ШИМ сигнала. Тази функция задава периода в PWMPL и PWMPH регистър. Тъй като това е 16-битов регистър, функцията използва метод за битово преместване, за да зададе PWM Период.
void set_PWM_period (неподписана int стойност) { PWMPL = (стойност & 0x00FF); PWMPH = ((стойност & 0xFF00) >> 8); }
Въпреки това, освен 1023 и 8-битовия период, потребителите могат да използват и други стойности. Увеличаването на периода води до плавно затъмняване или избледняване.
set_PWMRUN;
Това ще стартира PWM, който е дефиниран в библиотеката SFR_Macro.h като-
#define set_PWMRUN PWMRUN = 1
След това, в цикъл while , светодиодът се включва и непрекъснато избледнява.
while (1) { for (value = 0; value <1024; value + = 10) { set_PWM1 (value); Timer1_Delay10ms (3); } за (стойност = 1023; стойност> 0; стойност - = 10) { set_PWM1 (стойност); Timer1_Delay10ms (2); } } }
Работният цикъл се задава от set_PWM1 ();, функция, която задава работния цикъл в регистъра PWM1L и PWM1H.
void set_PWM1 (неподписана int стойност) { PWM1L = (стойност & 0x00FF); PWM1H = ((стойност & 0xFF00) >> 8); set_LOAD; }
Мигане на кода и тестване на изхода
След като кодът е готов, просто го компилирайте и го качете на контролера. Ако не сте запознати с околната среда, вижте как да започнете с урока Nuvoton N76E003, за да научите основите. Както можете да видите от резултата по-долу, кодът връща 0 предупреждение и 0 грешки и мига, използвайки метода на мигане по подразбиране от Keil. Приложението започва да работи.
Rebuild започна: Проект: PWM Rebuild мишена "Target 1" сглобяване STARTUP.A51… съставянето Стартиране… съставянето Delay.c… свързване… Програма Размер: данни = 35.1 XDATA = 0 = 709 код създаване шестнадесетичен файл от ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 Грешка (и), 0 Предупреждение (и). Изминало време на изграждане: 00:00:05
Хардуерът е свързан към източника на захранване и работи както се очаква. Това е яркостта на вградения светодиод, намалена и след това увеличена, за да покаже промяната в работния цикъл на ШИМ.
Пълната работа на този урок може да бъде намерена и във видеото, свързано по-долу. Надявам се, че ви е харесал урокът и сте научили нещо полезно, ако имате въпроси, оставете ги в раздела за коментари или можете да използвате нашите форуми за други технически въпроси.