Fórum

Alterar a frequênci...
 
Notifications
Clear all

Alterar a frequência do PWM

2 Posts
2 Users
0 Likes
1,461 Leituras
(@sergioluiz)
Estimable Member
Joined: 11 anos ago
Posts: 88
Topic starter  

Boa noite Claudio, tudo bem? Espero que sim, pode me ajudar com uma programa que vc escreveu?

gostaria de mudar a frequência do pwm de 1khz para 10khz teria como me mostrar onde ajusto no programa?

Segue o programa:

//******************************************************************************
//
// PWM_SW_EPP.C
//
//
// CONTROLE DE POTENCIA CARGA CC (METODO PWM)
//
// Utiliza 2 chaves dactilares para controle.
// Frequência PWM de 1khz
//
// Autor: Cláudio Lários
// Data: 04/11/2014
// Alteração: 09/08/2016 - salva na eeprom a situação da saída
//
// Este arquivo é parte integrante do blog "LÁRIOS.TECNOLOGIA.WS'.
// Obs. apenas para fins didáticos.
//

// PINAGENS:
// pino 1 - +5v
// pino 2 - chave dactilar ao gnd
// pino 3 - chave dactilar ao gnd
// pino 4 - desligado
// pino 5 - saída pwm a um resistor de 470 a base do transistor npn. Emissor
// ao gnd e coletor a carga a ser controlada (conforme corrente).
// pino 6 - desligado
// pino 7 - desligado
//
//==============================================================================

#include <12F675.h>
#device adc=8
#use delay(clock=4000000)// OSC INTERNO DE 4MHZ
#fuses NOWDT,INTRC_IO, NOCPD, NOPROTECT, NOMCLR, PUT, BROWNOUT //CONFIG WORD
#rom 0x2100 = {2}
//bytes

#byte gpio = 0x05
#byte trisio = 0x85
#byte tmr0 = 0x01
#byte wpu = 0x95
#bit gwpu = 0x81.7 //geral pullups

#bit out = 0x5.2 //saida pwm
#bit sw_up = 0x5.4 //sw aumenta percentual ligado
#bit sw_dw = 0x5.5 //sw reduz percentual ligado

//VARIÁVEIS GLOBAIS

int8 cont,pwm,passo;
unsigned int1 f_gr,f_t1;

const int8 velocidade = 20; //tempo de 5 segundos para ir do 0 a 100% na saída

#int_timer0
void tmr_isr(){//GERA PWM NA SAIDA
if(!passo){
pwm=cont;
tmr0=~pwm;
passo++;
if(pwm==2){ out=0;}else {out=1;}
}
else
{
tmr0=pwm;
passo=0;
if(pwm==254) {out=1;} else{out=0;}
}
}

//==============================================================================
// CONFIGURAÇÕES
//==============================================================================

void main() {

setup_adc_ports(NO_ANALOGS|VSS_VDD);//DESLIGA COMPARADORES
setup_adc(ADC_OFF);
setup_counters(RTCC_INTERNAL,RTCC_DIV_4);//TIMER 0
setup_timer_1(T1_DISABLED); //DESABILITA TIMER 1
setup_vref(FALSE);//DESLIGA VREF
setup_comparator(NC_NC_NC_NC);//DESLIGA COMPARADORES
wpu=0b110000;//pullup
gpio=0;//ZERA GPIO
trisio= 0b111011; //ACERTA DIREÇÃO DOS PORTS
passo=0;
gwpu=0;//geral dos pullups

cont=read_eeprom(0);
pwm=cont;
enable_interrupts(GLOBAL);//liga geral das interrupções
enable_interrupts(INT_TIMER0);//liga interrupção do tmr0
f_t1=0;

//==============================================================================
// INICIO DO PROGRAMA
//==============================================================================

for(;;){//LOOP INFINITO

f_gr=0;
if(!sw_up){ f_gr=1; if(++cont==255)cont--; //testa chave de incremento
}
if(!sw_dw){ f_gr=1; if(--cont==1)cont++; //testa chave de decremento
}
if(f_gr)f_t1=1;
if(!f_gr&&f_t1){
disable_interrupts(GLOBAL);
f_t1=0;
write_eeprom(0,cont);
enable_interrupts(GLOBAL);
}
delay_ms(velocidade);//velocidade de incrementos/decrementos
}
}

 

Desde já muito obrigado!


   
Quote
(@clarios)
Reputable Member Admin
Joined: 12 anos ago
Posts: 357
 

Olá Sergio!

Num pwm de 10 khz  teremos um passo de 1 microsegundos (1 % => 1 microsegundo ligado e 99 microsegundos desligado).

O Pic trabalhando com clock interno de 4 mhz resulta em cada instrução gastando 1 microsegundo. Por aqui já vemos que não vamos conseguir gerar este valor de pwm na faixa de 0 a 100 %.

Sugiro que você use um pic que tenha em seu hardware interno um modulo PWM.


   
ReplyQuote
(@sergioluiz)
Estimable Member
Joined: 11 anos ago
Posts: 88
Topic starter  

Ola Claudio, vou ver isso obrigado!!! forte abraço!!!!!


   
ReplyQuote
Back To Top