LusoRobótica - Robótica em Português

Sistemas específicos => PIC => Tópico iniciado por: beirao em 25 de Fevereiro de 2011, 20:44

Título: Frequências "baixas" de PWM num PIC
Enviado por: beirao em 25 de Fevereiro de 2011, 20:44
Boas pessoal,

Preciso de gerar um sinal PWM com uma frequência de 50Hz (se fosse mais baixa até era melhor) num PIC. neste momento tou a usar um PIC18F2520 (é o mais pequeno que tenho cá) mas depois devo mudar para um 18f2221. A questão é: a frequencia de PWM mais baixa que consigo é de 244 Hz (+/-). Como posso resolver isto?

Só fazendo o sinal "à unha", através de interrupções? Ou existe outra solução?

Thanks!

P.S. - Neste momento tou com um oscilador de 4MHz. E mesmo que use o uC a 1 MHz, só consigo ter sinal de 61Hz
Título: Re: Frequências "baixas" de PWM num PIC
Enviado por: Sérgio_Sena em 25 de Fevereiro de 2011, 21:02
Interrupções. É um sinal tão lento, que quaisquer duzia de linhas de código resolvem a situação.

Por exemplo ::



void interrupcao (void)
{
   IFS0bits.T2IF = 0;      //limpa a flag de interrupcao de TMR2 = 0;

   contador--;
   if   (!contador)   //se contador de temporizador chegou ao fim, indica-o
   {
         contador = valor_contador;      //recarrega contador
         LATBbits.LATB6 ^= 1;   //DEBUG, faz oscilacao no pino RB6
   }




E falta a configuração do TMR e das Interrupções, mas isso já tu sabes fazer.
Não se é em C que procuras, tb tenho em ASM, mas a filosofia é a mesma, basta converter.
Título: Re: Frequências "baixas" de PWM num PIC
Enviado por: beirao em 25 de Fevereiro de 2011, 21:31
Hum.. Pois, tal como tinha referido.

Obrigado.
Título: Re: Frequências "baixas" de PWM num PIC
Enviado por: senso em 25 de Fevereiro de 2011, 23:28
um avr a correr a 16Mhz ate gera pwm a menos de 5hz. nao te estas a esquecer de nenhum prescaller, ou entao usa um timer de 16bits.
Título: Re: Frequências "baixas" de PWM num PIC
Enviado por: beirao em 25 de Fevereiro de 2011, 23:40
um avr a correr a 16Mhz ate gera pwm a menos de 5hz. nao te estas a esquecer de nenhum prescaller, ou entao usa um timer de 16bits.

O PIC que tou a usar faz o PWM por intermédio do TMR2 (8bits). Tem um prescaler e um registo PR2.. não dá mesmo para frequencias mais baixas que 200 e pouco. O TMR2 tmbm tem um postscaler mas o PWM não o usa
Título: Re: Frequências "baixas" de PWM num PIC
Enviado por: Sérgio_Sena em 26 de Fevereiro de 2011, 00:14
Tens alguma limitação de projecto que te impeça de usar interrupções, ou é mesmo só escolha pessoal?

Com Fosc que tu tens, a latência de entrada nas interrupções e a execução dessas linhas tão rápido, que nem se nota no PWM final.

Experimenta. Eu uso bastante este tipo de temporizadores "concorrentes". Com flags indicadoras para a máquina de estados.
Título: Re: Frequências "baixas" de PWM num PIC
Enviado por: beirao em 26 de Fevereiro de 2011, 00:32
É mesmo por uma questão de escolha pessoal... mas sim, para a frequência que é, não há qualquer problema.

Mas por exemplo, num robot onde o PIC está mais sobrecarregado com outros módulos em utilização, leitura de vários sensores, mais sinais, etc, achas que é melhor utilizar módulos PWM externos com comunicação, por exemplo, I2C ?
Título: Re: Frequências "baixas" de PWM num PIC
Enviado por: Sérgio_Sena em 26 de Fevereiro de 2011, 22:26
Depende. O tempo que demoras no tratamento do I2C, é provavelmente maior do que o de tratar o PWM com interrupções.
Mesmo com o chip externo a trabalhar sem apoio.

Tem em conta vários aspectos ::

# Fosc

# tempo a ler sensores digitais

# tempo a ler sensores analógicos


Podes fazer com que todos os periféricos externos ao PIC, e que usem um periférico interno para comunicar, trabalhem por interrupções ::

# sensores digitais e ADC/DAC por SPI/I2C

# USART

# ...

Todos podem trabalhar por interrupções na transmissão/recepção. Basta que faças bem o teu código.

Por exemplo, tendo uma string para enviar USART, é má politica ter o CPU pendurado a enviar a informação char-a-char... muito tempo. Mesmo a 115k, demoras ~1ms a enviar 20 bytes.
Ora... se tiveres uma Fosc 2Mhz, tens um Fcy de 500ns... 2000 ciclos de relógio perdidos :)

Ora diz lá se nesse tempo todo, não te sobra para ir tratar do PWM, que também é por interrupções ?

E podes correr as máquinas de estados do programa e fazer funções de rotina/manutenção, enqt esperas :)
Título: Re: Frequências "baixas" de PWM num PIC
Enviado por: senso em 04 de Março de 2011, 16:22
Reposta á tua PM, pois diz que me bloqueaste as pm's beirão:
Tens condensadores de decoupling?
Parece que o PIC está a levar com o ruido dos motores nas linhas de alimentação e a fazer reset ou a trocar a stack toda e ficar num estado desconhecido para o programa que ele está a correr.

Vê se não tens a tua caixa de pm's cheia, e vai ás opções e procura por alguma coisa que bloqueie receber pm's.