Problemas com a implementação de PWM

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Problemas com a implementação de PWM

Mensagempor fredtg » 18 Dez 2008 20:21

Pessoal, preciso da ajuda de vc´s. Estou querendo gerar um sinal pwm usando um sinal analógico externo para determinar a razão cíclica. Estou usando o MikroC 8.2 Quando simulo com o PIC Simulator ou o próprio MikroC funciona blz, mas quando coloco na proto, hummm. O pwm resultante não tem sincronismo.
Estou desconfiando do pic, mas vale a pena dar uma revisada no código:

//testa PWM

unsigned int leitura;
char vref;

void main(){

trisa = 0xff;
trisb = 0x00;
trisc = 0x00;
adcon1 = 0x82;
pwm1_init(19530);
pwm1_start();
razao = 0;

while(1){
leitura = adc_read(0);
vref = leitura>>2; //converte o valor lido para 8bits
pwm1_change_duty(vref);
delay_us(250);
}
}

Na gravação, para um cristal de 20MHz uso HS.
fredtg
Bit
 
Mensagens: 19
Registrado em: 29 Mar 2007 10:34

Mensagempor Wagner de Queiroz » 18 Dez 2008 20:56

nao é a protoboard?

Ja vi problemas terriveis com protoboard nova. dai fizeram na placa padrao ou corroer numa placa a caneta e resolve. tente ver isso.
Seja Livre, Use Linux
Avatar do usuário
Wagner de Queiroz
Word
 
Mensagens: 872
Registrado em: 11 Out 2006 13:38
Localização: Barueri-SP

Mensagempor fredtg » 18 Dez 2008 21:10

Não é a proto não. Sei dos problemas que acontecem, mas nesse caso só tem alimentação, sinal de entrada e medição. Praticamente liguei os fios nos locais onde os pinos se encaixam. Estou desconfiado do pic mesmo, mas como não tenho outro para testar estou pedindo ajuda para conferir o código
fredtg
Bit
 
Mensagens: 19
Registrado em: 29 Mar 2007 10:34

Mensagempor ffcprog » 18 Dez 2008 21:39

você está setando o duty do pwm em função da tensão //?

explique o que está errado.

Lembrando que !! no proteus quando você seta VREF para os 5V da fonte, são 5V mesmo..
Ja com regulador pode ser 4.3 5.2.....

ffcprog
ffcprog
Byte
 
Mensagens: 145
Registrado em: 14 Fev 2007 23:16

Mensagempor fredtg » 19 Dez 2008 00:19

ffcprog escreveu:você está setando o duty do pwm em função da tensão //?

explique o que está errado.

Lembrando que !! no proteus quando você seta VREF para os 5V da fonte, são 5V mesmo..
Ja com regulador pode ser 4.3 5.2.....

ffcprog


o duty do pwm é um valor que pode variar de 0 a 255. Como o AD é de 10bits, estou pegando os 8 bits mais significativos e guardando na variável vref. Portanto, após a exclusão dos 2 bits menos significativos, a variável vref guardará valores entre 0 e 255.

Quando ligo a saída CCP1 no osciloscópio, o pwm ora mostra os pulsos com o duty ajustado ora não.

Para verificar se o programa estava correto, peguei um pic 16F628, que não tem AD, e fixei o duty. O pwm mostrado ficou 10! Fiz o mesmo com o pic em questão (16F873A), tirei o AD fora e ajustei o duty com um valor fixo. O problema persistiu.

Detalhe, não estou usando o Proteus não. Usei o Pic Simulator IDE
fredtg
Bit
 
Mensagens: 19
Registrado em: 29 Mar 2007 10:34

Mensagempor Peters » 19 Dez 2008 10:11

unsigned int no mikroC não é 8 bits???
Vc não está truncando os valores?
Avatar do usuário
Peters
Byte
 
Mensagens: 123
Registrado em: 12 Out 2006 11:42
Localização: Canoinhas, SC

Mensagempor fredtg » 19 Dez 2008 10:37

Peters escreveu:unsigned int no mikroC não é 8 bits???
Vc não está truncando os valores?


unsigned int no mikroC são 2 bytes, ou seja, de 0 a 65535.
fredtg
Bit
 
Mensagens: 19
Registrado em: 29 Mar 2007 10:34

Mensagempor ffcprog » 19 Dez 2008 11:30

humm, quer dizer que.
Se setar a frequencia do pwm, para 5khz, e duty para 127.
Tanto a frequencia quanto o duty, ficam variando sozinhos ?

Com certeza o problema esta no uControlador mesmo.

Porque se for problema de variação de fonte sem o bor estar ligado, a unica coisa que pode acontecer é tensão de pico do pwm variar, pois o pwm do pic é totalmente digital...

Sendo assim, tanto F quanto Dtcy deveriam estar estaveis....

ffcprog
ffcprog
Byte
 
Mensagens: 145
Registrado em: 14 Fev 2007 23:16

Mensagempor fredtg » 03 Fev 2009 17:43

Para ilustrar oq está acontecendo

Imagem

Imagem
fredtg
Bit
 
Mensagens: 19
Registrado em: 29 Mar 2007 10:34

Mensagempor ffcprog » 04 Fev 2009 07:05

primo, faça o seguinte.

Coloque a parte basica do seu SC aqui pra "NÒIZ" darmos uma olhadinha, pode ser algum erro "ilógico!?" que esta passando batido.

ffcprog
ffcprog
Byte
 
Mensagens: 145
Registrado em: 14 Fev 2007 23:16

Mensagempor otavio luiz » 04 Fev 2009 07:56

Bom, C não é minha área mas vou te dar uma dica, configura o conversor AD do pic pra justificar o valor lido à esqueda, depois leia somente o registrador da parte alta do valor que ele já estara em 8 bits, eu não sei como funciona esta instrução adc_read mas voce pode fazer isso não mão mesmo, seta o bit de inicio de conversão depois fica monitorando o flag de fim de conversão depois continua com o resto do prog. Se quiser voce pode utilizar a interrupção pra isso, basta setar o inico de conversão e aguardar a interrupção, após ela ocorrer basta tratar a interrupção.
Lembre-se, zona de Fresnel não é nenhuma franquia de puteiro.
Avatar do usuário
otavio luiz
Byte
 
Mensagens: 257
Registrado em: 11 Out 2006 13:56
Localização: Barretos - SP, terra de Peão

Mensagempor fredtg » 04 Fev 2009 08:43

ffcprog escreveu:primo, faça o seguinte.

Coloque a parte basica do seu SC aqui pra "NÒIZ" darmos uma olhadinha, pode ser algum erro "ilógico!?" que esta passando batido.

ffcprog


Ok, mas oq é SC?
fredtg
Bit
 
Mensagens: 19
Registrado em: 29 Mar 2007 10:34

Mensagempor joao » 04 Fev 2009 08:50

Eu chutaria que é:
SC = Source code(Código Fonte)


[]'s
Como já diria um grande amigo: Só sei que nada sei!!!
Avatar do usuário
joao
Byte
 
Mensagens: 463
Registrado em: 17 Out 2006 08:21

Mensagempor fredtg » 04 Fev 2009 10:31

otavio luiz escreveu:Bom, C não é minha área mas vou te dar uma dica, configura o conversor AD do pic pra justificar o valor lido à esqueda, depois leia somente o registrador da parte alta do valor que ele já estara em 8 bits, eu não sei como funciona esta instrução adc_read mas voce pode fazer isso não mão mesmo, seta o bit de inicio de conversão depois fica monitorando o flag de fim de conversão depois continua com o resto do prog. Se quiser voce pode utilizar a interrupção pra isso, basta setar o inico de conversão e aguardar a interrupção, após ela ocorrer basta tratar a interrupção.


Otavio, mesmo só usando a rotina de pwm do compilador MikroC o problema continua. Pelas formas de ondas capturadas com o osciloscópio da para perceber que o tempo de falha e o tempo em que o pwm funciona é o mesmo. Portanto, o problema não e aleatório.

Fiz os testes com os pic 16F628(funcionou), 16F690(funcionou), 16F873A(apresentou o problema) e 16F877(apresentou o problema). Basicamente o código fonte é o mesmo que foi postado anteriormente, ou seja:

void main(){
PWM_Init(5000);
PWM_Start();
while(1){
PWM_Change_Duty(160);}}

fusíveis ligados: HS(estou usando cristal de 20MHz) e Power Up time
fredtg
Bit
 
Mensagens: 19
Registrado em: 29 Mar 2007 10:34

Mensagempor ffcprog » 04 Fev 2009 10:39

void main(){
PWM1_Init(5000);
PWM1_Start();
PWM1_Change_Duty(160);
while(1){
//tenta assim, e veja se o problema acaba.

}
}

ffcprog
ffcprog
Byte
 
Mensagens: 145
Registrado em: 14 Fev 2007 23:16

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Google [Bot] e 1 visitante

cron

x