Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
Entre para seguir isso  
Andask

Ajuda para entender PWM.

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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....

Editado por soschip
retirar citação desnecessária

Compartilhar este post


Link para o post
Compartilhar em outros sites

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)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
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....

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Editado por Andask

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, mas, o valor máximo para CCPR1L:CCP1CON<5:4> depende do valor escrito no PR2. Além deste valor, qualquer um resultará num ciclo ativo de 100%.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites
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.

Editado por Mulder_Fox

Compartilhar este post


Link para o post
Compartilhar em outros sites
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....

Editado por Andask

Compartilhar este post


Link para o post
Compartilhar em outros sites
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
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....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para PR2 = 50, e ciclo ativo de 100%, (CCPR1L:CCP1CON<5:4>) = 204.

Não seria 19999.99999?

Isto é praticamente 20000.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×