Autor Tema: como variar la velocidad de un motor DC de proteus a través de labview  (Leído 22372 veces)

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

Desconectado robotic

  • PIC12
  • **
  • Mensajes: 55
Hola amigos del foro hoy intentare hacer un pwm a traves de labview, espero que todos aportemos a esta idea ya que yo no lo puedo hacer solo, pero esi si me dare el tiempo de ir probando sus ideas he ir desarrolando este proyecto que quedara de material de estudio para futuros novatos como yo que intenta saber como se hacen las cosas.

bueno sin mas preambulo aca va el codigo en c con el que vamos a trabajar  usando el compilador ccs

****************************************************
#include <motorpwm.h>
#int_RDA
void  RDA_isr(void)
{

}


void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   //TODO: User Code

}
******************************************************
y el .h
***************************************************
#include <16F877A.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected

#use delay(clock=4000000)
*************************************************************************
aca va la imagen de proteus con labview en su funcionamiento como verán le estoy enviando un 1 con el dial de labview y el virtual terminal me esta leyendo el 1, pero no varia la velocidad aun.

Desconectado robotic

  • PIC12
  • **
  • Mensajes: 55
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #1 en: 25 de Septiembre de 2010, 21:52:14 »
bueno y la pregunta es que código en el compiler ccs se debe colocar para hacer que los números que recibe el puerto serial los utilice el pic y los transforme a pulsos PWM para hacer mover el motor....
me han dicho que hay que configurar la salida CCP1 y darle el ciclo de trabajo. pero como se hace eso? :-/
« Última modificación: 25 de Septiembre de 2010, 22:08:40 por robotic »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #2 en: 25 de Septiembre de 2010, 22:32:26 »
Para configurar el módulo CCP:

setup_ccp1(CCP_PWM);

Para setear la frecuencia:

setup_timer_2(T2_DIV_BY_1, .......

Para setear el ciclo de trabajo:

set_pwm1_duty(Valor); 

El rango de Valor depende de la frecuencia elegida.

Buscar en ayuda de CCS para más ejemplos, y dentro del foro, hay hilos con ejemplos y dudas sobre la configuración.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado robotic

  • PIC12
  • **
  • Mensajes: 55
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #3 en: 25 de Septiembre de 2010, 22:48:42 »

Buscar en ayuda de CCS para más ejemplos, y dentro del foro, hay hilos con ejemplos y dudas sobre la configuración.

vale gracias por contestar, buscare en la ayuda del ccs donde salen los ejemplos como este que sale en el set_pwm1_duty( )


// For a 20 mhz clock, 1.2 khz frequency,

// t2DIV set to 16, PR2 set to 200

// the following sets the duty to 50% (or 416 us).

 

long duty;

 

duty = 408; // [408/(4*(200+1))]=0.5=50%

set_pwm1_duty(duty);

y buscare que es esto del duty porque por lo que veo contiene la formula para el ciclo del pwm.

Desconectado robotic

  • PIC12
  • **
  • Mensajes: 55
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #4 en: 25 de Septiembre de 2010, 23:11:52 »
hice esto
#include <proyecto_pwm.h>
#int_RDA
int8 valor;
void  RDA_isr(void)
{
setup_ccp1(CCP_PWM);
setup_timer_2 ( T2_DIV_BY_4, 0xc0, 2);
set_pwm1_duty(valor);
valor = 408; // [408/(4*(200+1))]=0.5=50%
set_pwm1_duty(valor);
}

pero aun no varia la velocidad del motor...
« Última modificación: 25 de Septiembre de 2010, 23:21:13 por robotic »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #5 en: 25 de Septiembre de 2010, 23:32:22 »
Primero que nada las configuraciones como:

setup_ccp1(CCP_PWM);
setup_timer_2 ( T2_DIV_BY_4, 0xc0, 2);

Deberían ir en la inicialización del microcontrolador.

Ahora, que frecuencia de PWM fijaste en ese ejemplo?
No contesto mensajes privados, las consultas en el foro

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
No contesto mensajes privados, las consultas en el foro

Desconectado robotic

  • PIC12
  • **
  • Mensajes: 55
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #7 en: 26 de Septiembre de 2010, 14:13:50 »
en el ccs tengo entendido que se puede configurar la frecuencia en other, alguien me lo podria explicar porfavor ya que esto me esta complicando la existencia y aun lo logro hacer correr ese simpático motor DC.


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #8 en: 26 de Septiembre de 2010, 14:23:12 »
Pero, leíste el datasheet o los hilos que hay en el foro? Como se establece la frecuencia? Hay un timer que funciona como base para establecer la frecuencia?

Hay alguna ecuación para determinar su valor?
No contesto mensajes privados, las consultas en el foro

Desconectado robotic

  • PIC12
  • **
  • Mensajes: 55
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #9 en: 26 de Septiembre de 2010, 14:46:13 »
Pero, leíste el datasheet o los hilos que hay en el foro? Como se establece la frecuencia? Hay un timer que funciona como base para establecer la frecuencia?

Hay alguna ecuación para determinar su valor?
por mas que leo aun no logro entender todo esto de los timer y el pwm (no habrá algún tutorial por ahí) aparte que se me complica porque tiene que leer el 1 el 2, 3, 4, 5, 6, 7, 8, 9 que viene de labview y eso transformarlo por ejemplo, no se si estaré en lo correcto pero me imagino que debe ser asi:

1 = 100 mhz
2 = 200 mhz
3 = 300 mhz
4 = 400 mhz
5 = 500 mhz
6 = 600 mhz
7 = 700 mhz
8 = 800 mhz
9 = 900 mhz

« Última modificación: 26 de Septiembre de 2010, 14:48:51 por robotic »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #10 en: 26 de Septiembre de 2010, 16:03:17 »
Pero entonces vamos por lo más básico. Como funciona un timer? Que cuenta? Cual es el valor máximo que podemos contar?
No contesto mensajes privados, las consultas en el foro

Desconectado robotic

  • PIC12
  • **
  • Mensajes: 55
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #11 en: 26 de Septiembre de 2010, 16:48:38 »
Pero entonces vamos por lo más básico. Como funciona un timer? Que cuenta? Cual es el valor máximo que podemos contar?
esto lo saque del video de un amigo de españa y lo transcribo aca...

el pic16f877a  tiene

timer 0 de 8 bits
timer 1 de 16 bits
timer 2 de 8 bits

los timer se pueden usar como contadores y como timer
por ejemplo podemos contar pulsos que entran a una pata del oscilador.

El timer es básicamente un registro que dependerá del numero de bits que tardara en llenarse por ejemplo si es de 16 bits podemos contar 2 elevado a 16 pulsos que contando con el cero podríamos llegar a 65535   y si es de 8 bits podríamos llegar desde 0 hasta los 255

osea que si lo usamos como contador podríamos contar con el timer 1, contar hasta 65535 pulsos sin desbordarse.
al timer le podemos implementar muchas funciones como por ejemplo contar revoluciones, o contar el numero de pulsaciones con un botón.

el timer 1 contiene un pre escalador osea que si le colocamos en el pre escalador un 2, en ves de contar cada ves que le llegue un pulso de reloj contara cada 2 pulsos de reloj, si ponemos un pre escalador de 4 contara cada 4 pulsos de reloj, osea aumenta el tiempo en que tarda en llenarse el timer, si ponemos un pre escalador de 4 tardara 4 veces mas que si no lo ponemos, nos sirve para contar tiempos mas largos y el problema de este es que disminuimos la resolución.

el pic en ves de funcionar directamente a la frecuencia de reloj que le estamos inyectando, va a funcionar a 1/4 la frecuencia de reloj que le estamos inyectando, osea que si tenemos 4 mhz de reloj de entrada la frecuencia de funcionamiento del reloj del pic va a ser de 1 mhz, osea que el tiempo  entre pulso y pulso es de 1 us (1mhz = 1us) porque la inversa de 1mhz es 1us.
 




Desconectado robotic

  • PIC12
  • **
  • Mensajes: 55
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #12 en: 26 de Septiembre de 2010, 16:50:16 »
que mas necesito saber?
« Última modificación: 26 de Septiembre de 2010, 17:08:11 por robotic »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #13 en: 26 de Septiembre de 2010, 17:31:27 »
Bien! Ahora, para fijar la frecuencia de la señal PWM se utiliza el timer2 contando el ciclo interno del microcontrolador. Junto a PR2 y su pre-escaler se determina el periodo de la señal PWM. Y como la frecuencia es 1/Periodo podemos determinar este valor.

Ahora, a que frecuencia deseas tu PWM? Y como sería la configuración del Timer2 para ese caso?

Por aquí más info de PWM.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado robotic

  • PIC12
  • **
  • Mensajes: 55
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #14 en: 26 de Septiembre de 2010, 17:41:32 »
Bien! Ahora, para fijar la frecuencia de la señal PWM se utiliza el timer2 contando el ciclo interno del microcontrolador. Junto a PR2 y su pre-escaler se determina el periodo de la señal PWM. Y como la frecuencia es 1/Periodo podemos determinar este valor.

Ahora, a que frecuencia deseas tu PWM? Y como sería la configuración del Timer2 para ese caso?

Por aquí más info de PWM.


Saludos!
gracias, voy a leer la pagina que me enviaste...
en realidad la frecuencia que quiero para el motor no la se, porque solo habia hecho funcionar el motor variando su voltaje con un potenciometro, no se cuanta es la frecuencia que necesita un motor de 12 volt de 60 rpm? espero me puedas orientar en esto...


 

anything