Съдържание:

Генерирайте PWM вълна с микроконтролер PIC: 6 стъпки
Генерирайте PWM вълна с микроконтролер PIC: 6 стъпки

Видео: Генерирайте PWM вълна с микроконтролер PIC: 6 стъпки

Видео: Генерирайте PWM вълна с микроконтролер PIC: 6 стъпки
Видео: LDmicro 14: I2C LCD & DS3231 Real-Time Clock (Microcontroller PLC Ladder Programming with LDmicro) 2024, Ноември
Anonim
Генерирайте PWM вълна с микроконтролер PIC
Генерирайте PWM вълна с микроконтролер PIC
Генерирайте PWM вълна с микроконтролер PIC
Генерирайте PWM вълна с микроконтролер PIC
Генерирайте PWM вълна с микроконтролер PIC
Генерирайте PWM вълна с микроконтролер PIC
Генерирайте PWM вълна с микроконтролер PIC
Генерирайте PWM вълна с микроконтролер PIC

КАКВО Е ШИМ?

ШИМ стойките за модулация на широчината на импулса е техника, чрез която ширината на импулса се променя.

За да се разбере ясно тази концепция, имайте предвид тактовия импулс или всеки сигнал с квадратна вълна, който има 50% работен цикъл, което означава, че периодът Тон и Тоф е еднакъв. Общата продължителност, за която сигналът е бил висок, и продължителността, за която сигналът е нисък, се нарича обща времеви период.

За изображението, показано по -горе, тази вълна има работен цикъл от 50%

Работен цикъл = (време на включване / общо време)*100

ON time - време, за което сигналът е висок

OFF time - време на враг, чийто сигнал е нисък Общо време - Общ период от време на импулса (време за включване и изключване)

Стъпка 1: Избор на микроконтролер

Избор на микроконтролер
Избор на микроконтролер

Избирането на подходящ микроконтролер за проекта това е съществената част от проекта ШИМ сигналите могат да бъдат генерирани в микроконтролери с ШИМ канали (CCP регистри). За този проект планирам да се придържам към pic16f877. можете да изтеглите връзката към листа с данни е дадена по -долу

PIC16F877a лист с данни щракнете тук

Модулът CCP е отговорен за производството на PWM сигнал. CCP1 и CCP2 са мултиплексирани с PORTC. PORTC е 8-битов широк двупосочен порт. Съответният регистър за посока на данни е TRISC. Задаването на бита TRISC (= 1) ще накара съответния PORTC щифт да бъде въведен. Изчистването на бит TRISC (= 0) ще направи съответния PORTC извод изход.

TRISC = 0; // Изчистването на този бит ще направи PORTC като изход

Стъпка 2: КОНФИГУРИРАНЕ НА CCP МОДУЛ

КОНФИГУРИРАНЕ НА CCP МОДУЛ
КОНФИГУРИРАНЕ НА CCP МОДУЛ
КОНФИГУРИРАНЕ НА CCP МОДУЛ
КОНФИГУРИРАНЕ НА CCP МОДУЛ

CCP - МОДУЛИ ЗА УЛИВАНЕ/СРАВНЯВАНЕ/ШИМ

Всеки модул Capture/Compare/PWM (CCP) съдържа 16-битов регистър, който може да работи като:

• 16-битов регистър за улавяне

• 16-битов регистър за сравнение

• Регистър PWM Master/Slave Duty Cycle

Конфигурирайте регистъра CCP1CON в режим PWM

Описание на регистъра

CCPxCON Този регистър се използва за конфигуриране на CCP модула за работа на Capture/Compare/PWM.

CCPRxL Този регистър съдържа 8-Msb бита на PWM, по-ниските 2-бита ще бъдат част от регистъра CCPxCON.

TMR2 Свободно работещ брояч, който ще бъде сравнен с CCPR1L и PR2 за генериране на ШИМ изход.

Сега ще използвам двоичен код за представяне на битовете за конфигуриране на регистъра CCP1CON.

вижте изображението по -горе.

CCP1CON = 0b00001111;

Можете също така да имате шестнадесетичен формат

CCP1CON = 0x0F; // конфигуриране на CCP1CON регистър за PWM режим

Стъпка 3: Конфигуриране на модул Timer2 (TMR2 регистър)

Конфигуриране на модул Timer2 (TMR2 регистър)
Конфигуриране на модул Timer2 (TMR2 регистър)

Timer2 е 8-битов таймер с прескалер и постскалер. Може да се използва като времева база за ШИМ за режима ШИМ на модула (ите) на CCP. Регистърът TMR2 е четим и записваем и се изчиства на всяко устройство Нулиране.

Показва се регистър T2CON

Предварителното и постмащабното ниво ще регулират изходната честота на генерираната ШИМ вълна.

Честота = тактова честота/(4*прескалиране*(PR2-TMR2)*Мащабиране на постове*брой)

Където Tout = 1/честота

T2CON = 0b00000100;

Това ще генерира кристал от 2.5 KHz @ 1Mhz или 100KHz @ 4MHz (практически има ограничение за тази PWM честота, вижте конкретен лист с данни за повече подробности)

шестнадесетично представяне

T2CON = 0x04; // активиране на T2CON без предварителна настройка и конфигурация на мащаб

Стъпка 4: Конфигуриране на PR2 (Timer2 Period Register)

Модулът Timer2 има 8-битов период регистър, PR2. Timer2 се увеличава от 00h до съвпадение с PR2 и след това се нулира до 00h при следващия цикъл на нарастване. PR2 е регистър за четене и запис. Регистърът PR2 се инициализира на FFh при нулиране.

Задаването на подходящ диапазон за PR2 ще позволи използването за промяна на работния цикъл на генерираната PWM вълна

PR2 = 100; // Задайте времето на цикъла на 100 за промяна на работния цикъл от 0-100

За простота използвам PR2 = 100, като правя CCPR1L = 80; 80% работен цикъл може да бъде постигнат.

Стъпка 5: Конфигурирайте модул CCPR1l

Тъй като PR2 = 100 CCPR1l може да бъде конфигуриран навсякъде между 0-100, за да се получи желаният работен цикъл.

Стъпка 6: Напишете скицата на MPLAB X IDE на вашия код, който е даден по -долу

Напишете скицата на MPLAB X IDE, кодът е даден по -долу
Напишете скицата на MPLAB X IDE, кодът е даден по -долу

#включва

void delay (int a) // функция за генериране на забавяне {

for (int i = 0; i <a; i ++)

{

for (int j = 0; j <144; j ++);

}

}

void main ()

{TRISC = 0; // Изчистването на този бит ще направи PORTC като изход.

CCP1CON = 0x0F; // конфигуриране на CCP1CON регистър за PWM режим

T2CON = 0x04; // активиране на T2CON без предварителна настройка и конфигурация на мащаб.

PR2 = 100; // Задайте времето на цикъла на 100 за промяна на работния цикъл от 0-100

докато (1) {

CCPR1L = 75; // генерирано 75% забавяне на работния цикъл (1);

}

}

Направих и малка промяна в кода, така че честотата на генерираната ШИМ вълна

Този код е симулиран в протеус и изходната PWM вълна е показана по -долу. За да качите това на вашите карти за разработка на снимки, използвайте #include с подходящи битове за конфигуриране.

Благодаря ти

Препоръчано: