Sei sulla pagina 1di 4

////////////////////////////////////////////////////////////////////////////////

//
//

//
CONTROL VELOCIDAD MOTOR DC CON PIC

//

//

//

//

(c) RobotyPic 2012

//

//

//

////////////////////////////////////////////////////////////////////////////////

#include <16f887.h>

#device adc=8

//Archivo para control del pic 16f876a

//Configuracin conversor AD a 8 bits

#fuses XT,NOWDT

#use delay(clock=4000000)

//frecuencia de reloj 4 MHz

#byte trisb=0x86
#byte portb=0x06
#byte trisc=0x87
#byte portc=0x07

//Configuracin puerto b control lcd


#include <lcd.c>

//archivo para control del lcd

/***************** Definicin de las variables globales ***********************/

int1 cambio=0;
int16 lectura_AD;

//Control del cambio


//Referencia de velocidad

/********************** Prototipos de las funciones ***************************/

void main (void);


void ccp2_int (void);

//funcin principal
//funcin por interrupcin

/******************************************************************************/
/******************* FUNCIN GENERACIN MODULACIONES PWM
**********************/

#int_ccp2

void ccp2_int(){
if(++cambio==1){

//Conmutacin estado salida CCP2

setup_ccp2(CCP_COMPARE_CLR_ON_MATCH); //Modo comparacin, conmutacin salida a 0


ccp_2=lectura_AD;

//carga del ccp2 con valor semiperiodo alto

else{
setup_ccp2(CCP_COMPARE_SET_ON_MATCH); //Modo comparacin, conmutacin salida a 1
ccp_2=255-lectura_AD;

//Carga del ccp2 con valor semiperiodo bajo

}
set_timer1(0);

//Reinicio del temporizador para comparacin

/******************************************************************************/
/******************** FUNCIN PRINCIPAL ***************************************/

void main(){

float velocidad;

//Porcentaje velocidad

trisc=0x00;

//Puerto C como salida de datos

port_b_pullups(TRUE);

//Habilitacin resistencias pullups puerto b

lcd_init();

//Inicializacin del lcd

setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); //Configuracin Timer para comparacin


setup_ccp2(CCP_COMPARE_SET_ON_MATCH);

setup_adc_ports(ALL_ANALOG);

//Modo comparacin, conmutacin salida a 1

//Canal de entrada analgico AN0

setup_adc(ADC_CLOCK_INTERNAL);

//Fuente de reloj RC para conversor AD

enable_interrupts(int_ccp2);

//habilitacin interrupcin por comparacin

enable_interrupts(GLOBAL);

//Habilitacin de toda las interrupciones

while (true){
set_adc_channel(0);
delay_us(20);
lectura_AD=read_adc();
velocidad=(lectura_AD);

//Habiliatacin lectura AD
//Estabilizacin
//Lectura canal analgico
//Clculo % de velocidad

lcd_init();
printf(lcd_putc, "\fVelocidad = %3.0f%%", velocidad);

}
}

Potrebbero piacerti anche