TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: aitorsp en 19 de Diciembre de 2009, 19:58:39
-
Hola:
Os paso un ejemplo de un sencillo controlador de velocidad para un motor dc implementado en CCS y fabricado con fresa LPKF. Las fotos tambien las podeis ver a continuación.
(http://img686.imageshack.us/img686/5990/foto2r.th.jpg) (http://img686.imageshack.us/i/foto2r.jpg/)
(http://img694.imageshack.us/img694/572/foto5e.th.jpg) (http://img694.imageshack.us/i/foto5e.jpg/)
y el código CCS muy sencillo
// ****************** CONFIGURACION DEL MODO PWM ******************************
//
// T_PWM=1/Freq_PWM
// T_PWM=(PR2+1)*4*TOSC*TMR2_PREESCALER
//
// T_PWM
// PR2= (---------------------------)-1
// 4*TOSC*TMR2_PREESCALER
//
// CTPWM=(CCPR1L:CCP1CON<5:4>)*TOSC*TMR2PREEESCALER
//
// CTPWM es el ciclo de trabajo y no puede superar el valor del periodo
// de la señal PWM por lo que es posible que no se utilicen los
// 10 bits de resolución que tiene
//
//
// CTPWM
// CCPR1L:CCP1CON<5:4>= ----------------------
// TOSC*TMR2PREEESCALER
//
// El valor del duty maximo es CCPR1L:CCP1CON<5:4>=1000
//
// Frecuencia de la señal PWM=250 Hz
// OSCILADOR= 4MHZ
// TMR2_PREESCALER=16
// T_PWM= 4 ms
// PR2=250
//
// *****************************************************************************
#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,NOPUT,NOCPD
#use delay(clock=4000000)
#use fast_io(c)
#use fast_io(d)
#use fast_io(b)
int8 display7seg(int8 valor){
switch (valor){
case 0:
return 0b11111100;
break;
case 1:
return 0b01100000;
break;
case 2:
return 0b11011010;
break;
case 3:
return 0b11110010;
break;
case 4:
return 0b01100110;
break;
case 5:
return 0b10110110;
break;
case 6:
return 0b00111110;
break;
case 7:
return 0b11100000;
break;
case 8:
return 0b11111110;
break;
case 9:
return 0b11100110;
break;}
}
int8 dig_1,dig_2;
int16 num;
int16 i;
void main(void){
set_tris_c(0x00);
set_tris_d(0x00);
set_tris_b(0x00);
output_c(0x00);
output_d(0x00);
output_b(0x00);
setup_timer_2(T2_DIV_BY_16,249,1);
setup_ccp1(CCP_PWM);
//set_pwm1_duty(CCP_OFF);
while(1){
output_high(PIN_C4);
output_low(PIN_C5);
for(i=10;i<990;i++){
num=i/10;
dig_1=(num/10);
dig_2=(num-(dig_1*10));
output_b(display7seg(dig_1));
output_d(display7seg(dig_2));
set_pwm1_duty(i);
delay_ms(30);
}
output_b(0xFF);
output_d(0xFF);
delay_ms(500);
output_b(0x00);
output_d(0x00);
delay_ms(500);
output_b(0xFF);
output_d(0xFF);
delay_ms(500);
output_b(0x00);
output_d(0x00);
delay_ms(500);
for(i=990;i>10;i--){
num=(i*10)/125;
dig_1=(num/10);
dig_2=(num-(dig_1*10));
output_b(display7seg(dig_1));
output_d(display7seg(dig_2));
set_pwm1_duty(i);
delay_ms(30);
}
output_b(0xFF);
output_d(0xFF);
delay_ms(500);
output_b(0x00);
output_d(0x00);
delay_ms(500);
output_b(0xFF);
output_d(0xFF);
delay_ms(500);
output_b(0x00);
output_d(0x00);
delay_ms(500);
}
}
Un saludo
aitor
-
Hola.
Muy bueno el trabajo, tienes el esquemático para que lo subas y quede asi completito el proyecto ;-)
Saludos
-
Muy bueno aitorsp!! Te felicito por el trabajo!!
Te cuento q yo hace unos dias estuve trabajando en el control de un motor, y hago una lectura de la velocidad a traves de un encoder. Pero parece q como lo controlo por PWM a determinadas velocidades hay algunas vibraciones q hacen q la lectura sea erronea. Lo comprobe porq variando la velocidad del motor con un potenciometro no pasa esto.
Esto me lleva a hacerme la pregunta de cual es la frecuencia ideal para manejar el motor. Yo estoy trabajando a 30KHz para evitar ruido audible, pero voy a probar con otras frecuencias a ver q resultados obtengo.
saludos!!
-
Hola.
Muy bueno el trabajo, tienes el esquemático para que lo subas y quede asi completito el proyecto ;-)
Saludos
Hola:
si, adjunto una foto con el esquema y un archivo con el max y el dsn (orcad version 16)
(http://img6.imageshack.us/img6/2740/motordc.png) (http://img6.imageshack.us/i/motordc.png/)(http://img6.imageshack.us/img6/motordc.png/1/w1217.png) (http://g.imageshack.us/img6/motordc.png/1/)
un saludo
aitor
-
Hola.
Muy bueno el trabajo, tienes el esquemático para que lo subas y quede asi completito el proyecto ;-)
Saludos
Hola:
si, adjunto una foto con el esquema y un archivo con el max y el dsn (orcad version 16)
(http://img6.imageshack.us/img6/2740/motordc.png) (http://img6.imageshack.us/i/motordc.png/)(http://img6.imageshack.us/img6/motordc.png/1/w1217.png) (http://g.imageshack.us/img6/motordc.png/1/)
un saludo
aitor
Hola:
no me deja modificar este mensaje asi que cito el ultimo comentario para incluir un video en youtube en el que se el diseño funcionando
un saludo
aitor
-
Hola.
De nuevo: Felicitaciones aitorsp, te quedo muy chulo y muy completa la info, a muchos foreros les va a servir.
Saludos