Está en la página 1de 6

CONTROL DE GIRO DE UN MOTOR DC

PROGRAMACIÓN

#include <18f4550.h> //Librería para usar el PIC18F4550,

#fuses XT,WDT,NOPROTECT,NOPUT, NOPBADEN,NOMCLR //Configuración de fusibles.

#use delay (clock=12000000) //FOSC = 12 MHz.

#include <stdlib.h> //Librería stdlib.h.

#BYTE port_b= 0xF81 //Identificador para el puerto b en la localidad 0xF81.

//Definición de los pulsadores en los puertos b.0, b.1 y b.2.

#define s1 bit_test(port_b,0)

#define s2 bit_test(port_b,1)

#define s3 bit_test(port_b,2)

int giro=0;

void main(void) //Función principal main.

long int value; //Variable para el DC.

int seleccion = 0; //Variable para seleccionar el PWM.

set_tris_b(0xFF); //Configura el puerto B como entrada.

setup_ccp1(CCP_PWM); //Configura CCP1 como PWM.

while( TRUE ){ //Bucle infinito.

if (s1==0&&giro==0){ //Si s1=0, selecciona PWM1.

giro=1;

output_high(PIN_D0);

output_high(PIN_D2);

output_low(PIN_D1);

if (s2==0&&giro==0){ //Si s2=0, selecciona PWM2.

giro=1;

output_high(PIN_D1);

output_high(PIN_D2);
output_low(PIN_D0);

if (s3==0){ //Si s3=0, selecciona PWM3.

giro=0;

output_low(PIN_D1);

output_low(PIN_D2);

output_low(PIN_D0);

set_pwm1_duty(value);

} //Fin del while.

} //Fin del main.

SIMULACION EN PROTEUS
DESCRIPICION DE FUNCIONAMIENTO

El motor puede girar en cualquier sentido con al estar apagado cuando el pulsados conectado al
puerto B0 el motor gira a la derecha, mientras esto ocurre al presionar el pulsador B1 este no se
acciona, para que el sentido cambie debemos presionar el pulsador B2 en donde hace que el
motor se apague, de manera que al presionar el pulsador B1 cambie el sentido del motor hacia
la izquierda.

CONTROL DE VELOCIDAD DE UN MOTOR DC

#include <18f4550.h>

#fuses XT,WDT,NOPROTECT,NOPUT, NOPBADEN, NOMCLR //Configuración de fusibles.

#use delay (clock=12000000) //FOSC = 12 MHz.

#include <stdlib.h> //Librería stdlib.h.

#BYTE port_b= 0xF81 //Identificador para el puerto b en la localidad 0xF81.

#BYTE port_c= 0xF82 //Identificador para el puerto c en la localidad 0xF82.

#BYTE port_d= 0xF83 //Identificador para el puerto d en la localidad 0xF83.

#define prender bit_test(port_d,0) //Define al puerto RD0 como prender.

#define apagar bit_test(port_d,1) //Define al puerto RD0 como apagar.

#define INC bit_test(port_d,2) //Define al puerto RD0 como INC.

#define dec bit_test(port_d,3) //Define al puerto RD0 como dec.

short x=0; //Bandera para detectar el cambio de estado del pulsador de inicio.

long int valor=0; //Variable para almacenar el Duty de la señal PWM

void main(void) { //Función principal main.


set_tris_d(0xff); //Puerto d como entrada.

set_tris_b(0x00); //Puerto b como salida.

port_b=0; //Borra todo el puerto b.

while(true){ //Bucle infinito.

if (prender==0 ) //Inicia la generación del PWM si se acciona pulsador prender.

// x se fija en 1 para mantener activo al circuito.

// (bandera de memoria, recuerda la orden de inicio).

x =1;

valor=255; //La señal PWM empieza a generar con un duty próximo al 50%.

setup_ccp1(CCP_PWM); //Configura CCP1 como PWM.

setup_timer_2(T2_DIV_BY_16, 255, 1); //Fija la frecuencia a:1365.33 us ó 0.73 KHz.

bit_set(port_b,0); //Indica inicio del circuito.

while(prender==0){} //No hace nada mientras el pulsador está activado

while(x==1) //Repite mientras x es 1, orden de inicio del pulsador prender.

set_pwm1_duty(valor); //PWM con ancho de pulso equivalente a la variable valor.

if (INC==0) //Si hay pulso para incrementar…

if (valor <= 973) //… valor es menor o igual a 1020

valor = valor +76; //Incrementa valor en 10.

while (INC==0){ } //Pulsador activo, no realiza nada (anti rebote).

}}

if (dec==0) //Si hay pulso para decrementar…

if (valor >= 255) //… valor es mayor o igual a 20

valor = valor -76; //Decrementa valor en 10.

while (dec==0){ } //Pulsador activo, no realiza nada (anti rebote).


}}

if (apagar == 0 ) //Pulsador apagar accionado…

bit_clear(port_b,0); //Apaga LED que indica el funcionamiento del circuito.

valor =0; //valor = 0

set_pwm1_duty(valor); //Reinicia el módulo PWM salida 0.

x=0;

break;

}}

} //Fin del bucle infinito.

}
SIMULACIÓN