collapse

* Links de Robótica

* Posts Recentes

Power_OK Enermax por almamater
[Hoje às 12:10]


Feira de electricidade e eletrónica por edeweld
[Hoje às 02:02]


Recomendação de um opamp para um DAC r2r por jm_araujo
[Ontem às 10:48]


RN42 e TP-Link MR3020 por doiga
[22 de Novembro de 2017, 19:22]


Ajuda Projecto IR / RF por senso
[22 de Novembro de 2017, 13:15]


Ideias para construir um quadrúpede simples por dropes
[21 de Novembro de 2017, 22:43]


Ajuda com TRIAC por senso
[17 de Novembro de 2017, 18:00]


TV LG White Screen por almamater
[15 de Novembro de 2017, 08:37]


Pergunta sobre prototipagem ( Pesquisa ) por luisjustin
[14 de Novembro de 2017, 23:22]


Medir Agua que está no Poço por Njay
[14 de Novembro de 2017, 13:28]

Autor Tópico: Frequências "baixas" de PWM num PIC  (Lida 3493 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline beirao

  • Mini Robot
  • *
  • Mensagens: 1.494
Frequências "baixas" de PWM num PIC
« 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
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.642
    • Electronic Gear for Musicians
Re: Frequências "baixas" de PWM num PIC
« Responder #1 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.

Offline beirao

  • Mini Robot
  • *
  • Mensagens: 1.494
Re: Frequências "baixas" de PWM num PIC
« Responder #2 em: 25 de Fevereiro de 2011, 21:31 »
Hum.. Pois, tal como tinha referido.

Obrigado.
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.402
  • Helpdesk do sitio
Re: Frequências "baixas" de PWM num PIC
« Responder #3 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.
Avr fanboy

Offline beirao

  • Mini Robot
  • *
  • Mensagens: 1.494
Re: Frequências "baixas" de PWM num PIC
« Responder #4 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
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.642
    • Electronic Gear for Musicians
Re: Frequências "baixas" de PWM num PIC
« Responder #5 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.

Offline beirao

  • Mini Robot
  • *
  • Mensagens: 1.494
Re: Frequências "baixas" de PWM num PIC
« Responder #6 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 ?
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.642
    • Electronic Gear for Musicians
Re: Frequências "baixas" de PWM num PIC
« Responder #7 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 :)

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.402
  • Helpdesk do sitio
Re: Frequências "baixas" de PWM num PIC
« Responder #8 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.
Avr fanboy