Você está na página 1de 19

MICROCONTROLADORES

EEM001
Prof. Dr. Edson Kitani

Prof. Dr. Edson Kitani - 2023 1


BIBLIOGRAFIA BÁSICA

Prof. Dr. Edson Kitani - 2023 2


SUMÁRIO

• PWM

Bibliografia:

• Manual do PIC 18F4550 – Microchip (Capítulos 15)


• Microcontroladores PIC18 – Alberto Noboru Miyadaira (Capítulo 12 )
• Notas de Aulas

Prof. Dr. Edson Kitani - 2023 3


PWM
PULSE WIDTH MODULATION

Prof. Dr. Edson Kitani - 2023 4


Prof. Dr. Edson Kitani - 2023 5
Além dos Timers 1, 2 e 3, o CCP usa também os pinos 16, 17, 28, 29, 30, 36. Como o
PWM usa parte da porta D, se usarmos com PWM no modo ECCP, precisaremos
desabilitar o display. Este PIC suporta 2 Capture ou 2 Compare ou 2 PWM. A operação
combinada deles está descrita na próxima página.

Prof. Dr. Edson Kitani - 2023 6


Possíveis composições de operação com o CCP1 e CCP2.

Prof. Dr. Edson Kitani - 2023 7


PWM é um recurso poderoso do conjunto CCP. No caso do PIC18F4550 tem duas
saídas de PWM. Um dos grandes benefícios do PWM é a capacidade de gerar um sinal
analógico usando apenas sinais digitais, ou seja, temos um tipo de conversor D/A
(Digital para Analógica).

A ideia do PWM é trabalhar com o valor médio de um sinal de onda quadrada.


𝑉𝑝𝑢𝑙𝑠𝑜 𝑡𝑝

1 1
𝐹𝑃𝑊𝑀 = =
𝑃𝑒𝑟í𝑜𝑑𝑜 𝑇
0𝑉
0 Período 𝑇

Para um sinal cujo perfil é uma onda quadrada, o valor médio do sinal será:
𝑡𝑝 𝑇 𝑡𝑝
1
𝑉𝑚é𝑑𝑖𝑜 = න 𝑉𝑝𝑢𝑙𝑠𝑜 𝑑𝑡 + න 0𝑑𝑡 = 𝑉𝑝𝑢𝑙𝑠𝑜
𝑇 0 𝑡𝑝 𝑇
Prof. Dr. Edson Kitani - 2023 8
Figura extraída de https://www.arduino.cc/en/Tutorial/PWM Prof. Dr. Edson Kitani - 2023 9
PWM
Se medirmos a saída do PWM com um multímetro teremos a leitura do valor médio do
sinal que sai do pino CCP1 ou CCP2. Contudo, nem todos os dispositivos conseguem
trabalhar com esse tipo de sinal. Então se faz necessário uma filtragem para obter um
sinal mais suavizado.
Essa suavização pode ser obtida através de um filtro passa baixas. Veja o circuito
abaixo.
18F455
0
CCP1

GND

𝐹𝑃𝑊𝑀 1
𝐹𝑓𝑖𝑙𝑡𝑟𝑜 ≤ 𝑒 𝐹𝑓𝑖𝑙𝑡𝑟𝑜 =
10 2𝜋𝑅𝐶
Prof. Dr. Edson Kitani - 2023 10
PWM

Nesse modo o PWM é controlado pelo TIMER 2. Todas as vezes que o TMR2 = PR2 o
timer é zerado e um novo período é iniciado. O tempo 𝑡𝑝 é controlado pelos
registradores CCPRxL e CCPxCON bits 4 e 5.

Prof. Dr. Edson Kitani - 2023 11


PWM - Cálculo
O período do PWM pode ser calculado como:

𝑃𝑅2 + 1 × 4 × 𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑒𝑟_𝑇𝑖𝑚𝑒𝑟2
𝑃𝑒𝑟í𝑜𝑑𝑜 =
𝐹𝐶𝑙𝑜𝑐𝑘

Assim, que a frequência do PWM é influenciado pelos parâmetros PR2, Prescaler do


Timer 2 e a frequencia do clock. A tabela abaixo fornece alguns exemplos para um clock
de 40 MHz.

No nosso caso, caso se escolhemos o prescaler = 16 e o PR2 para FFh, temos:


255+1 ×4×16 1 1
𝑃𝑒𝑟í𝑜𝑑𝑜 = = 341,33 𝜇𝑠 𝐹𝑃𝑊𝑀 = 𝑃𝑒𝑟í𝑜𝑑𝑜 = 341,33 𝜇𝑠 = 2,83 𝑘𝐻𝑧
48 𝑀𝐻𝑧

Prof. Dr. Edson Kitani - 2023 12


Prof. Dr. Edson Kitani - 2023 13
// Exemplo de configuração de um PWM
void main()
{
unsigned char Texto0[] = "FATEC Sto Andre ";
unsigned char Texto1[] = ”PWM – 2023 ";
unsigned char Texto2[] = ”Duty Cycle 1 = ";
unsigned char Texto3[] = ”Duty Cycle 2 = ";
unsigned int Duty_Cycle1 = 500;
unsigned int Duty_Cycle2 = 500;
unsigned int Duty_Cycle = 0;

/ Inicializa PWM1 e PWM2

T2CON = 0x04; // Liga Timer2 e ativa prescaler 2


PR2 = 255; // Carrega PR2 no máximo
CCP1CON = 0x3C; // Ativa PWM 1 em modo single
CCPR1L = 0x00; // Duty Cycle (junto com os bits 4 e 5 de CCP1CON para formar 10 bits)
CCP2CON = 0x3C; // Ativa PWM 2 em modo single

Prof. Dr. Edson Kitani - 2023 14


ADCON1 = 0b00001110; //Define a entrada AN0
TRISB = 0xFF ; // Define todos como entrada
TRISC = 0x00; // Define todos como saída

// Configura LCD e tela de saudação


ConfiguraLCD();
DesligaCursor();
PosicaoCursorLCD(1, 1);
EscreveFraseRamLCD(Texto0);
PosicaoCursorLCD(2, 1);
EscreveFraseRamLCD(Texto1);
delay_ms(3000); // Apresenta a Saudação durante 3 segundos
PosicaoCursorLCD(1, 1);
EscreveFraseRamLCD(Texto2);
PosicaoCursorLCD(2,1);
EscreveFraseRamLCD(Texto3);

Prof. Dr. Edson Kitani - 2023 15


// Programa principal que envia o valor da variável Duty_Cycle para os PWMs.

While(1)
{

CCP1CONbits.DC1B0 = Duty_Cycle1;
CCP1CONbits.DC1B1 = Duty_Cycle1 >> 1;
CCPR1L = Duty_Cycle1 >> 2;

CCP2CONbits.DC2B0 = Duty_Cycle2;
CCP2CONbits.DC2B1 = Duty_Cycle2 >> 1;
CCPR2L = Duty_Cycle2 >> 2;

Prof. Dr. Edson Kitani -2023 16


Prof. Dr. Edson Kitani - 2023 16
Exercício 1 com PWM.

Coloque um potenciômetro na entrada AN0 e carregue o programa PWM.c que está no


TEAMS e observe o funcionamento.

Prof. Dr. Edson Kitani - 2023 17


Exercício 2 com PWM.

Modifique o programa anterior para ele varie o brilho de um led de 0 à 100% e depois
mostre no display o valor lido da intensidade luminosa (0 a 100%) via o LDR. O LDR
(sensor de luz deve ser ligado na entrada AN1.

Prof. Dr. Edson Kitani - 2023 18


Prof. Dr. Edson Kitani - 2023 19

Você também pode gostar