0% encontró este documento útil (0 votos)
49 vistas4 páginas

PWM Chulo

Este documento describe cómo controlar la velocidad de un motor DC utilizando un PIC y modulación PWM. Explica la configuración del PIC, la generación de señales PWM, la lectura del sensor de velocidad y el cálculo del porcentaje de velocidad. El código controla la velocidad del motor variando el ciclo de trabajo de la señal PWM en función de la lectura del sensor analógico de velocidad.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
49 vistas4 páginas

PWM Chulo

Este documento describe cómo controlar la velocidad de un motor DC utilizando un PIC y modulación PWM. Explica la configuración del PIC, la generación de señales PWM, la lectura del sensor de velocidad y el cálculo del porcentaje de velocidad. El código controla la velocidad del motor variando el ciclo de trabajo de la señal PWM en función de la lectura del sensor analógico de velocidad.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

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

//
//

//
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);

}
}

También podría gustarte