Guia CNC Brasil - Tudo sobre CNC, Router, Laser, Torno e 3D Print
ELETRÔNICA / ELÉTRICA => Eletrônica Básica => Microcontroladores => Tópico iniciado por: Marcos Dornelas em 02 de Fevereiro de 2011, 21:44
-
E ai pessoal!
Meu nome e Marcos e ja fiz um curso de Inst.Elet.Industria is e em breve farei um tecnico em eletroeletronica!
Futuramente (dentro de alguns meses) precisarei junto com uns amigos construir um robo.
Dividindo as tarefas eu fiquei com o CEREBRO do robo,ou seja a programaçao.Nosso professor nos recomendou usar o PIC18F452 e o MPLAB,pragramando em C.
Ja vimos algumas coisas,funçoes,converçao analogica/digital e outras porem,digamos assim que ele prende as informaçoes.
Gostaria de saber como e que eu ultilizo o PWM(Modulaçao de Largura de Pulso) dãaaa!
Sei o que é e suas aplicaçoes em controles de motores Cc e no controle de potencia,mas por mais que eu leia o MPLAB C18 C compiler libraries nao consigo entender como programa-lo.
Visito o forum ja algum tempo e percebo que alem de pessoas inteligentes,ha pessoas dispostas a ajudar.
Por favor uma luz ou um "pisca-pisca"!
Obrigado!
-
Não sou bom em programação, e nunca trabalhei com o 452, mas acho q as orientações podema ajudar, pois entendi que você vai utilizar o C18 como compilador (as orientações foram retiradas do livro do Alberto Noboru)
Vamos por partes:
1 - Habilitar o PWM, função OpenPWM(período) carrega o valor do argumento para o registro do PR2 do timer. Lembre-se de que o timer tem que ser configurado primeiro.
O período é um valor de 8 bits (0 a 255) e é determinado pela equação:
período_pwm= [(periodo)+1]*4*(valor_prescaler_TMR 2)/Fosc
2 - Setar o DutyCycle, função SetDCPWMx(duty_cycle) onde no lugar do x deve ser colocado o número do PWM utilizado do uC, neste caso o duty é um valor de 10 bits (0 a 1023) e o tempo do sinal ativo é obtido pela equação:
Tempo_ativo= (duty_cycle*valor_prescaler_TMR2)/Fosc
Exemplo simples:
#include <p18f452.h>
#include <timers.h>
#include <pwm.h>
//Fosc = 10Mhz
#pragma config FOSC= HS
void main (void)
{
unsigned int taxa_pwm = 0; //largura do pulso PWM
TRISx = 0bxxxxxxxx; // escolher o port onde está o módulo PWM e setar devidament suas entradas e saídas
OpenTimer2(TIMER_INT_OFF //desabilita interrupçãp tmr2
&T2_PS_14); //Prescaler igual a 4 (1:4)
OpenPWMx (239); //PRx = 239 período pwm = 348us.
SetDCPWMx (120); // Tsinal alto = 120*4/10M = 48us.
while(1); //Looping infinito
}
Este exemplo foi retirado do livro Microcontroladores PIC18, Aprenda e Programe em Linguagem C, Alberto Noboru Miyadaira, Ed. Érica.
-
Blackmore,
Muito Obrigado cara,
Vou agora usar o seu exemplo,ficou bem mais claro algumas coisas!
Valeu! Quanto ao livro vou procura-lo!
Obrigado!
-
Espero que seja útil.
Quanto ao livro, eu gostei bastante e recomendo a todos que me perguntam sobre.
abraço!
-
Valeu Blackmore pela ajuda,mas incomodando mais um pouquinho,
por acaso voce poderia me dizer qual e a frequencia maxima PWM,"criada" pelo PIC?
Valeu e desculpa o incomodo!
-
Um pitaco, a frequência do PWM é ajustável e depende das opções que o processador oferece (divisões do prescaler,...) e da frequência de clock utilizada. No caso do PIC16F628 vale a tabela abaixo.
Eu daria uma olhada no datasheet do processador.
-
Muito Obrigado pela ajuda minilathe.
Se nao digo abobrinhas,tambem esta relacionado com a frequencia do oscilador correto!?
-
Marcos Dornelas
tambem esta relacionado com a frequencia do oscilador correto!?
a frequência do oscilador e frequência do clock citado pelo mestre minilathe são a mesma coisa no seu caso.
-
ValeU!
Por acaso voce tambem poderia me dizer se PWM so "sai" dos pinos RC1(ccp2) ou em todo portC e se por acaso dar para configurar cada um de maneira diferente,com uma frequencia diferente?
Desculpa a amolação!
Obrigado!
-
Se vc for utilizar o PWM interno do microcontrolador, vc soh vai conseguir utilizar o PWM dos pinos indicados (CCP1, CCP2, CCPx) ... se o microcontrolador possuir 2 ou mais saidas com PWM vc pode utilizálos independente um do outro, porém com frequências diferentes eu digo que não é possível, pq os PWM são atrelados ao TMR2, e você não vai conseguir mudar a config do TMR2 toda hora sem perder performance. O pessoal mais experiente me puxe a orelha se falei algo errado.
Mas eu pergunto, é realmente necessário vc utilizar frequência diferente no PWM?
-
Nao,nao e nescessario,era so por curiosidade mesmo!
Valeu por toda ajuda!
Muito Obrigado!