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

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

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #30 en: 27 de Septiembre de 2010, 12:10:33 »
así debería ser?
setup_timer_2(T2_DIV_BY_4,255,1);
No, falta algo, pero por eso digo:
Con eso ya puedes realizar simulaciones en proteus para determinar si la frecuencia es la correcta, que pasa si cambio valor, ect.... Pruebe, analice, estudie....

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 #31 en: 27 de Septiembre de 2010, 16:30:25 »
así debería ser?
setup_timer_2(T2_DIV_BY_4,255,1);
No, falta algo, pero por eso digo:
Con eso ya puedes realizar simulaciones en proteus para determinar si la frecuencia es la correcta, que pasa si cambio valor, ect.... Pruebe, analice, estudie....



ok lo intentare aunque vengo recién llegando de donar sangre y ando un poco mareado así que no te asegura nada jejejeje

Desconectado robotic

  • PIC12
  • **
  • Mensajes: 55
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #32 en: 27 de Septiembre de 2010, 17:00:52 »
coloque este codigo en el ccs

#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)
#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_DIV_BY_4,255,1);
   setup_ccp1(CCP_PWM);
   set_pwm1_duty(0);
   setup_comparator(NC_NC_NC_NC);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   //TODO: User Code

}

y la imagen de la prueba del proteus es esta coloque un led para ve si había pulso y el led prendía a veces pero el osciloscopio no marca los pulsos

« Última modificación: 27 de Septiembre de 2010, 17:07:24 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 #33 en: 27 de Septiembre de 2010, 17:23:18 »
Falta el

Código: [Seleccionar]
while(1){

}

Sino el microcontrolador se restea. Revisa los ejemplos que hay en el foro.

http://www.todopic.com.ar/foros/index.php?topic=4530.0
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 #34 en: 27 de Septiembre de 2010, 17:47:39 »
cambie el codigo de esta forma y me lee los pulsos pero no los cambia, aunque creo debo estar cerca
(estoy leyendo los ejemplos)

#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)
#int_RDA
int valor;
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_DIV_BY_4,255,1);
   setup_ccp1(CCP_PWM);
   set_pwm1_duty(0);
   setup_comparator(NC_NC_NC_NC);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   //TODO: User Code
   while (1){
set_pwm1_duty(valor);
valor = 255;
set_pwm1_duty(valor);
}
}
« Última modificación: 27 de Septiembre de 2010, 21:20:56 por robotic »

Desconectado robotic

  • PIC12
  • **
  • Mensajes: 55
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #35 en: 27 de Septiembre de 2010, 21:32:04 »
vi los ejemplos del pwm en los otros hilos están bastante bien explicado "muchas gracias", pero aun no logro entender como leer los caracteres que vienen por el puerto rs232 y con eso pueda cambiar la frecuencia porque en los ejemplos de los foros ocupan botones para cambiar la frecuencia.
coloque este código en el ccs, me muestra una frecuencia en el proteus pero no logro cambiarla, que sera?


#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)
#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_DIV_BY_4,127,1);
   setup_ccp1(CCP_PWM);

   setup_comparator(NC_NC_NC_NC);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   //TODO: User Code
   while (1){
set_pwm1_duty(256);
}
}



« Última modificación: 27 de Septiembre de 2010, 22:06:09 por robotic »

Desconectado robotic

  • PIC12
  • **
  • Mensajes: 55
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #36 en: 28 de Septiembre de 2010, 09:40:30 »
hola nuevamente, le he colocado algo al código para que pueda leer el puerto serial pueda variar el duty cycle pero el motor anda muy lento, el codigo quedo asi

#include <proyecto_pwm.h>
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,stream=HOSTPC)
int valor;
#int_RDA
#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)
void  RDA_isr(void)
{
valor=getc(HOSTPC);
set_pwm1_duty(valor);
}

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_DIV_BY_4,127,1);
   setup_ccp1(CCP_PWM);
   setup_comparator(NC_NC_NC_NC);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   //TODO: User Code
   while (1){

}
}


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #37 en: 28 de Septiembre de 2010, 10:43:08 »
Y que resolución tiene tu PWM?
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 #38 en: 28 de Septiembre de 2010, 11:00:38 »
Y que resolución tiene tu PWM?
tengo una resolucion de 10 bits




PR2 = 0b11111001 ;
T2CON = 0b00000101 ;
CCPR1L = 0b01111100 ;
CCP1CON = 0b00111100 ;
« Última modificación: 28 de Septiembre de 2010, 11:20:50 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 #39 en: 28 de Septiembre de 2010, 11:25:19 »
Entonces si tu le mandas en labview como máximo 255, que ciclo de trabajo tendrá? Hay que hacer algo para que con 255 me de 100% de ciclo de trabajo?
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 #40 en: 28 de Septiembre de 2010, 11:34:48 »
Entonces si tu le mandas en labview como máximo 255, que ciclo de trabajo tendrá? Hay que hacer algo para que con 255 me de 100% de ciclo de trabajo?

me podrías explicar un poco mas por favor, que con todo lo que he leído tengo un solo enredo en mi cabeza y necesito recapitular toda la información que he adquirido.
« Última modificación: 28 de Septiembre de 2010, 11:37:31 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 #41 en: 28 de Septiembre de 2010, 11:41:22 »
Si para la frecuencia que has configurado la señal PWM tienes 10-bits de resolución, quiere decir que:

0      -> 0% de Ciclo de trabajo, o sea la señal siempre está en 0V.
1023 -> 100% de Ciclo de trabajo, o sea la señal siempre está en 5V.

Por lo que veo desde labview solo mandas un byte para controlar la velocidad. Que mandas? Desde 0 a 255, pensando que 255 es máxima velocidad o 0 a 100?

Dependiendo de esos tienes que adecuarlo para que te de el máximo del ciclo de trabajo.


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 #42 en: 28 de Septiembre de 2010, 11:48:54 »
Si para la frecuencia que has configurado la señal PWM tienes 10-bits de resolución, quiere decir que:

0      -> 0% de Ciclo de trabajo, o sea la señal siempre está en 0V.
1023 -> 100% de Ciclo de trabajo, o sea la señal siempre está en 5V.

Por lo que veo desde labview solo mandas un byte para controlar la velocidad. Que mandas? Desde 0 a 255, pensando que 255 es máxima velocidad o 0 a 100?

Dependiendo de esos tienes que adecuarlo para que te de el máximo del ciclo de trabajo.


Saludos!

desde el labview solo envio un 0 1 2 3 4 5 6 7 8 9, si tengo el dial en 5 estoy enviando el carácter numero 5 que según la tabla ascII corresponderia a un 53

0 = 48
1 = 49
2 = 50
3 = 51
4 = 52
5 = 53
6 = 54
7 = 55
8 = 56
9 = 57

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: como variar la velocidad de un motor DC de proteus a través de labview
« Respuesta #43 en: 28 de Septiembre de 2010, 11:55:06 »
Aaa! ok... Entonces con la estructura switch puedes seleccionar las distintas velocidades:

Valor=gect();

switch(Valor){
    case '0':
         set_pwm1_duty(0);
    break;
    ......
    ......
    case '9':
         set_pwm1_duty(1023);
    break;
}


Buscar en el foro o web sobre swicth en C.

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 #44 en: 28 de Septiembre de 2010, 14:59:38 »
he colocado el codigo asi y aun no logro hacerlo funcionar

#include <proyecto_pwm.h>
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,stream=HOSTPC)
#int_RDA
int8 valor;
void  RDA_isr(void){
valor=getc(HOSTPC);
set_pwm1_duty(valor);
switch(Valor){
    case '0':
         set_pwm1_duty(0);
    break;
    case '1':
         set_pwm1_duty(113);
    break;
    case '2':
         set_pwm1_duty(226);
    break;
    case '3':
         set_pwm1_duty(339);
    break;
    case '4':
         set_pwm1_duty(452);
    break;
    case '5':
         set_pwm1_duty(565);
    break;
    case '6':
         set_pwm1_duty(678);
    break;
    case '7':
         set_pwm1_duty(791);
    break;
    case '8':
         set_pwm1_duty(904);
    break;
    case '9':
         set_pwm1_duty(1023);
    break;
}

}

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_DIV_BY_4,127,1);
   setup_ccp1(CCP_PWM);
   setup_comparator(NC_NC_NC_NC);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   //TODO: User Code
   while (1){

}
}


 

anything