Autor Tema: Periodo del PWM = 1sec?  (Leído 2115 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado D1to

  • PIC10
  • *
  • Mensajes: 39
Periodo del PWM = 1sec?
« en: 30 de Abril de 2017, 20:24:32 »
Buenas con todos, estoy trabajando con pwm en un pic 16F877A y MikroC pro, necesito obtener un periodo de un segundo en mi PWM, he intentando configurarlo, pero no he podido obtener el periodo deseaba, he consultado y me ha  dicho q si se puede, pero empiezo a dudar, por cierto uso un crystal de 4MHz.
T_pwm = [(PR2 +1 )*4] * T_osc * PRE_Tmr2
he obtenido aproximadamente 4 ms, gracias de antemano.
Por cierto si no fuese posible existe la posibildad de tener una salida en 1 por un determinado tiempo y y el resto del tiempo en 0????
« Última modificación: 30 de Abril de 2017, 20:28:41 por D1to »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Periodo del PWM = 1sec?
« Respuesta #1 en: 30 de Abril de 2017, 20:38:41 »
es simple ...

Con un cristal de 4Mhz tenes un reloj de entrada de 1us, si pasa por el preescaler de 1:16 (preescaler maximo), cada entrada del reloj es de 16us, como PR2 es de 8bits maximo, el maximo es de 255 que puede contar y compararse con el TMR2 + 1 ciclo mas que es el 0, entonces tenes que el maximo PWM que podes obtener con un cristal de 4Mhz es de 4,096ms.

Para obtener un Periodo de 1 segundo necesitas maximo una frecuencia de 16.3KHz, Y ya para esos valores de periodo si o si tenes que hacerlo por software, si pensas que haces una interrupcion cada 1ms tendrias un PWM con casi 10bits de resolucion.

Desconectado D1to

  • PIC10
  • *
  • Mensajes: 39
Re:Periodo del PWM = 1sec?
« Respuesta #2 en: 30 de Abril de 2017, 23:13:48 »
Gracias por tu pronta respuesta, me puedes hablar un poquito mas a cerca del metodo q tengo q seguir para obtener el periodo de 1s?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Periodo del PWM = 1sec?
« Respuesta #3 en: 30 de Abril de 2017, 23:54:08 »
Voy a suponer un PWM de 500 posiciones, aproximadamente 9bits ( no llega ). Para 1s necesitaria: 1s/500 = 2ms

Es decir cada 2ms debo revisar si corresponde o no activar o no la salida.

Supongo que poseo 2 salidas llamadas PWMOutA y PWMOutB, cada una va a tener su propia varaible que mantiene un valor entre 0 a 499 que vamos a llamar PWMVarA y PWMVarB

Creo una interrupcion de un timer cualquiera ( 0,1 o 2) cada 2ms. Dentro de la interrupcion del timer simplemente pregunto...

Código: C
  1. funcionInterrupcion timer(void)
  2. {
  3.     si(contador >= 499)
  4.     {
  5.            contador = 0;
  6.            PWMOutA = 1;
  7.            PWMOutB = 1;
  8.     }
  9.     si(PWMVarA == contador) { PWMOutA = 0;}
  10.     si(PWMVarB == contador) { PWMOutB = 0;}
  11.  
  12.     contador++;
  13. }

Entonces... Suponete que inicia el programa, pones las salidas a 1. Y PWMVarA en 100, cada 2ms va a entrar, y hasta que contador no sea 100, va a seguir en 1 la salida, cuando sea 100 la va a poner en 0. Y no va a volver a 1 hasta que contador no llegue a los 499. Volviendo a comenzar todo de nuevo.

En resumen al poner un 99 en PWMVarA, simplemente creaste un PWM con un duty (el 0 cuenta tambien) de 100/500 = 0.2 o 20% ( o si lo queres en tiempo 100*2ms = 200ms en 1) y con un periodo de 1s.

PD:
El codigo ademas de usar mala sintaxis y posiblemente los valores tambien, tiene un pequeño problema que hace que la salida varie si esta en 0 el duty momentaneamente. Esto queda en vos arreglarlo.

Desconectado D1to

  • PIC10
  • *
  • Mensajes: 39
Re:Periodo del PWM = 1sec?
« Respuesta #4 en: 01 de Mayo de 2017, 16:26:42 »
gracias por tu ayuda, voy a estudiar tu codigo   :o  :o


 

anything