collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

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

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

Offline beirao

  • Mini Robot
  • *
  • Mensagens: 1.531
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.649
    • 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.531
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.733
  • 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.531
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.649
    • 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.531
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.649
    • 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.733
  • 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