Ir ao conteúdo

Ajuda para entender PWM.


Andask

Posts recomendados

Postado

Olá pessoal,

Recentemente fiz eu curso básico de programação de microcontroladores

em Assembly, o microcontrolador utilizado no curso foi um 16F628A.

Pois bem, o curso foi mais uma introdução a linguagem e a utilização

de microcontroladores.

Agora preciso realizar um projeto com PWM ajustável.

Durante o curso cada aluno ganhou um "Desbravando o PIC", eu já li o

livro, mas na parte que diz respeito ao módulo CCP, o livro não diz

nada, apenas que já existe uma publicação que trata sobre o assunto.

Procurei já várias coisas na internet, no google, e nada, gostaria de

saber se alguem tem algum material sobre PWM, ou até mesmo um fonte em

asm bem simples para que eu possa dar uma estudada.

Abraços

Postado

Então cara, é que eu queria se possível um bem simples, pra eu entender o basicão sabe?

Eu até já consegui fazer um desses e tal, mas foi bem na várzea....

Queria saber como faz pra fazer um certinho no tempo que eu quero e tal....

Postado

Primeiramente devemos setar os bits 3 e 2 do registrador CCP1COM para selecionar o modo PWM.

O Sinal PWM será fornecido no pino RB3 CCP1.

O período do sinal PWM é definido pela fórmula:

T = (PR2 + 1) x 4 x Tosc x (prescaler do TMR2)

O ciclo ativo é definido pelo valor escrito no registrador CCPR1L e nos bits 5 e 4 do registrador CCP1CON

O CCPR1L contém os 8 bits mais significativos.

A fórmula para o cálculo do ciclo ativo é:

Ciclo ativo = (CCPR1L:CCP1CON<5:4>) x Tosc x (prescaler do TMR2)

Postado

Eu estou querendo fazer um PWM e 17Khz, mas não to conseguindo calcular utilizando essa fórmula..... alguém sabe como eu calculo? O.o

Postado

Para uma frequência de 17 KHz, o período é de 1/17000 = 58,82 microsegundos.

Se a frequência do oscilador do PIC for de 4MHz, Tosc = 250 nanosegundos.

Prescaler do TMR2 = 1.

Aplicando a fórmula:

T = (PR2 + 1) x 4 x Tosc x (prescaler do TMR2)

0,00005882 = (PR2 + 1) x 4 x 0,00000025 x 1

PR2 + 1 = 0,00005882 / 4 x 0,00000025 x 1

PR2 + 1 = 58,82

PR2 = 58,82 - 1

PR2 = 57,82

O valor inteiro mais próximo para PR2 é 58.

Com este valor, a frequência do sinal PWM será de 16949 Hz.

Postado
INICIO

BANK0

MOVLW B'00000111'

MOVWF CMCON

MOVLW B'00001100'

MOVWF CCP1CON

MOVLW B'00000100'

MOVWF T2CON

BANK1

MOVLW B'00000000'

MOVWF TRISA

MOVLW B'00000000'

MOVWF TRISB

MOVLW B'10000100'

MOVWF OPTION_REG

MOVLW B'00000000'

MOVWF INTCON

MOVLW B'00111010'

MOVWF PR2

BANK0

Onde eu estaria errando??

Porque pelo Proteus deu 8474 Khz....

Postado

Está correto, se a frequência de clock do PIC for de 4MHz.

Mas, faltou definir o ciclo ativo.

Experimente com um ciclo ativo de 29,41 microsegundos, o que equivale a 50%.

Pela fórmula do ciclo ativo, o valor de CCPR1L:CCP1CON<5:4> seria 117,6. O valor inteiro mais próximo (118), resulta em 29,5 microsegundos.

Em binário:

CCPR1L = 00011101

CCP1CON<5:4> = 10

Postado

Opa, perfeito, funcionou direitinho agora!

Ae se eu quiser variar o ciclo ativo eu começo com .0 em CCPR1L:CCP1CON<5:4> e vou aumentando até o máximo?

  • 2 semanas depois...
Postado

O valor do meu PR2 é 58, e o valor que você me passou para ter um ciclo de 50% é de 118, mas em uma das mensagens de cima, você citou que qualquer valor de CCPR1L:CCP1CON<5:4> que fosse maior que o valor de PR2, o meu ciclo ativo seria de 100%. :confused:

Mais uma coisa, eu quero que o meu PWM seja incrementado de 1% em 1%.

Fiz o calculo e o valor que eu deveria jogar no CCPR1L:CCP1CON<5:4> foi de 2,36, creio que esteja certo, portanto devo utilizar o valor inteiro mais próximo, no caso, 2.

Isso está correto?

Postado
O valor do meu PR2 é 58, e o valor que você me passou para ter um ciclo de 50% é de 118, mas em uma das mensagens de cima, você citou que qualquer valor de CCPR1L:CCP1CON<5:4> que fosse maior que o valor de PR2, o meu ciclo ativo seria de 100%. :confused:

Não me referi ao valor do PR2, mas, ao valor máximo que CCPR1L:CCP1CON<5:4> pode assumir, com base no valor adotado para PR2.

Mais uma coisa, eu quero que o meu PWM seja incrementado de 1% em 1%.

Fiz o calculo e o valor que eu deveria jogar no CCPR1L:CCP1CON<5:4> foi de 2,36, creio que esteja certo, portanto devo utilizar o valor inteiro mais próximo, no caso, 2.

Isso está correto?

Está correto, mas, este número quebrado dificulta obter os incrementos de 1% em 1%. Se você puder usar a frequência de 20kHz, aí dá o valor exato de 2 para cada incremento.

Postado
Não me referi ao valor do PR2, mas, ao valor máximo que CCPR1L:CCP1CON<5:4> pode assumir, com base no valor adotado para PR2.

Não entendi muito bom o que você quis dizer por aqui...

Está correto, mas, este número quebrado dificulta obter os incrementos de 1% em 1%. Se você puder usar a frequência de 20kHz, aí dá o valor exato de 2 para cada incremento.

Se eu coloco a frequência pra 20Khz o PWM a vai lá pra cima....

E eu tentei calcular o novo valor pra colocar em PR2, mas pelas minhas contas, o valor do PR2 teria que ser 293...

E agora? ;/

P.S.: Fiquei um tempo sem entrar no tópico pois estive doente, não vim trabalhar durante uma semana toda....

Postado
Não entendi muito bom o que você quis dizer por aqui...

Qualquer valor para (CCPR1L:CCP1CON<5:4>) que seja maior do que (PR2 + 1) x 4, resultará num ciclo ativo de 100%.

Se eu coloco a frequência pra 20Khz o PWM a vai lá pra cima....

Como assim?

E eu tentei calcular o novo valor pra colocar em PR2, mas pelas minhas contas, o valor do PR2 teria que ser 293...

E agora? ;/

Para uma frequência de 20 kHz, PR2 = 49.

Postado
Qualquer valor para (CCPR1L:CCP1CON<5:4>) que seja maior do que (PR2 + 1) x 4, resultará num ciclo ativo de 100%.

Ahhh acho que entendi, por exemplo, para o ciclo ser 100% se meu PR2 fosse 50 o valor em (CCPR1L:CCP1CON<5:4>) teria que ser 200?

Para uma frequência de 20 kHz, PR2 = 49.

Eu coloquei 49 e meu PWM foi lá na casa dos 19999....

Postado

É isso mesmo mulder, varia entre 19999 e 20000....

O que eu preciso é de um PWM de 17000.

E que avance de 1% no ciclo ativo.

Parece que encontrei uma "adaptação" não citada no manual. :D

Mas o código que fiz está no computador do trabalho...

Amanhã, se minha "gambiarra" realmente funcionar, postarei aqui o código.

Abraços....

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!