Professional Documents
Culture Documents
Para hacer ese control con el PIC, en este proyecto emplearemos el modo PWM (Pulse Width
Modulation). Leeremos una tensión con el conversor AD del PIC proporcionada por un
potenciómetro como control manual de la velocidad. Este valor determinará el tiempo de los pulsos
en estado alto de la señal que controlará la velocidad.
En el modo PWM el PIC compara el valor del registro CCP (en este caso el CCP2) con el valor del
timer1. En el registro CCP habremos cargado previamente un valor responsable de la velocidad del
motor. Cuando ambos coinciden, se produce la interrupción con la que gestionaremos el cambio de
estado de la señal hasta una nueva comparación con la cuenta del timer 1.
http://robotypic.blogspot.com.ar/2012/11/control-de-velocidad-de-un-motor-dc-con.html 1/5
16/4/2018 RobotyPic: Control de velocidad de un motor DC con PIC
#int_ccp2
void ccp2_int(){
ccp_2=lectura_AD;
}
else{
//Modo comparación, conmutación salida a 1
setup_ccp2(CCP_COMPARE_SET_ON_MATCH);
//Carga del ccp2 con valor del semiperiodo bajo
ccp_2=255-lectura_AD;
}
//Reinicio del temporizador para nueva comparación
set_timer1(0);
}
#fuses XT,NOWDT
#byte trisb=0x86
#byte portb=0x06
#byte trisc=0x87
#byte portc=0x07
/******************************************************************************/
/******************* FUNCIÓN GENERACIÓN MODULACIONES PWM **********************/
#int_ccp2
http://robotypic.blogspot.com.ar/2012/11/control-de-velocidad-de-un-motor-dc-con.html 2/5
16/4/2018 RobotyPic: Control de velocidad de un motor DC con PIC
void ccp2_int(){
if(++cambio==1){ //Conmutación estado salida CCP2
setup_ccp2(CCP_COMPARE_CLR_ON_MATCH); //Modo comparación, conmutación salida a 0
ccp_2=lectura_AD; //carga del ccp2 con valor semiperiodo alto
}
else{
setup_ccp2(CCP_COMPARE_SET_ON_MATCH); //Modo comparación, conmutación salida a 1
ccp_2=255-lectura_AD; //Carga del ccp2 con valor semiperiodo bajo
}
set_timer1(0); //Reinicio del temporizador para comparación
}
/******************************************************************************/
/******************** FUNCIÓN PRINCIPAL ***************************************/
void main(){
while (true){
set_adc_channel(0); //Habiliatación lectura AD
delay_us(20); //Estabilización
lectura_AD=read_adc(); //Lectura canal analógico
velocidad=(lectura_AD/2.55); //Cálculo % de velocidad
El proyecto contenido en el artículo ha sido diseñado y probado con éxito utilizando las siguientes
versiones de software:
- Windows xp y windows 7
- Proteus V7.7 SP2
- CCS PIC C COMPILER v4.084
-->
Emisor - Receptor PIC controlador de Control de un Robot que evita Control de un brazo
de infrarojos con servos por I2C LCD03 por bus I2C obstáculos. Robot de 4 ejes
PIC con PIC
Linkwithin
7 comentarios:
Erick Colina Huaman dijo...
Buen aporte.
8 de mayo de 2013, 15:38
NiErickzon dijo...
Hola!
una pregunta, si solo quisiera utilizar la parte del código para obtener las revoluciones por minuto sin
la pantalla, qué es lo que debería incluir en mi programa?
Es que debo registrar las revoluciones por minuto de un motor de AC a través de un pic18f4550 y
manipular los datos con labview... en realidad no sé mucho de como usar ambos jaja pero la tarjeta
de adquisición de datos ya la hice :)
Robotypic dijo...
Si quieres medir las rpm deberás insertar un encoder. Contando los impulsos del encoder
correspondientes a una vuelta y midiendo el tiempo que tarda en leerlos sabrás el tiempo que le
cuesta un giro completo y por tanto las rpm. Para medir los pulsos puedes utilizar el modo de captura
del pic o la interrupción externa. También mediante dos posibles procesos; bien midiendo el tiempo
entre pulsos del encoder o bien midiendo el numero de pulsos en un tiempo dado.
3 de abril de 2014, 23:43
Unknown dijo...
Hola que tal el circuito me funciona muy bien la salida me da 2.5 khz podrias ayudarme que debo
modificar del codigo para obtener una salida de 20 Khz. Por favor
21 de diciembre de 2015, 16:55
http://robotypic.blogspot.com.ar/2012/11/control-de-velocidad-de-un-motor-dc-con.html 4/5
16/4/2018 RobotyPic: Control de velocidad de un motor DC con PIC
Robotypic dijo...
Aumenta el valor de carga del temporizador set_timer(0); Ponle otro valor superior a 0.
22 de diciembre de 2015, 19:54
Publicar un comentario
http://robotypic.blogspot.com.ar/2012/11/control-de-velocidad-de-un-motor-dc-con.html 5/5