Sei sulla pagina 1di 4

Practica 1 Modulo CCP

Pedro Peralta
Universidad del Azuay
UDA
Cuenca, Ecuador

Resumen En esta prctica se proceder a realizar el diseo


de un controlador, basado en microcontrolador para un
motor DC usando la tarjeta entrenadora EasyPic7.
I.

V2
5V

INTRODUCCION

Utilizando la tarjeta EasyPic7, un puente H y un encoder se


proceder a disear un controlador para un motor DC que
funcionara de la siguiente manera:
El sistema inicia con el motor detenido, realizando la
programacin necesaria en el microcontrolador con un
pulsante S1 se pondr en marcha el motor en modo forward
con un duty cycle del 50%, cada vez que se presione el
botn S1 con el motor en marcha, se realizara un cambio de
sentido de giro con el mismo duty cycle; con los pulsantes
S2 y S3 la velocidad del motor incrementara o disminuir
respectivamente, manteniendo un valor mnimo en el cual el
motor seguir girando; cuando se presione el pulsante S4 el
motor se detendr
II.

U1:A

HARDWARE

Para realizar el puente H para la inversin de giro del


motor DC se utiliz transistores MOSFET irf640 debido a la
facilidad de manejo por voltaje que este ofrece, el circuito
del puente H se muestra en la Fig.1

Seal de salida

7
K
PC827AB

R1

R2

330

10k

Fig. 2 Circuito de encoder


III PROGRAMACION EN C
Se procede a configurar el CCP4 en modo captura
para lo cual se utiliza el code configurator de MPLABX,
selecciona el Timer1 y adems que capture el valor del Timer
cada flanco de descenso, el periodo del Timer es de 5ms; lo
siguiente es configurar el ECCP para utilizarlo como puente
completo, con un inicio de duty cycle del 50%.
Una vez terminada la configuracin se accede a archivos
generados por el code configurator especficamente al
archivo del Timer1, se utiliza el servicio de interrupcin para
realizar un conteo de veces en las que se desbordo el timer y
se lo almacena en una variable llamada pulsos, el cdigo es
el siguiente:
void TMR1_ISR(void)
{
PIR1bits.TMR1IF = 0;
pulso = pulso + 1;
TMR1 += timer1ReloadVal;
}.

Fig. 1 Puente H con transistores MOSFET


Para el circuito del encoder se utiliz el opto transistor
TCST2103, el cual nos permite obtener una seal de salida en
alto siempre que no se corte el Haz de luz infrarrojo, el circuito
para el encoder se muestra en la Fig.2

Luego se accede al archivo generado del CCP4, en este


archivo se va a realizar la transformacin de las seales del
encoder a rpm, para lo cual se utiliza la siguiente frmula
para determinar el tiempo que se demor en realizar un
pulso
en
bajo,
Tiempo
=
(pulso*0.005)
+
((capturedValue*4)/4000000); en donde pulso es el nmero
de veces que se desbordo el timer, 0,005 es el valor del timer,
capturedValue el valor del timer cuando se produjo el pulso
en bajo, una vez obtenido el tiempo lo que falta es
determinar el nmero de revoluciones por minuto para lo
cual se emplea una regla de tres, si una vuelta se demora

Tiempo,

en

60

segundos

cuantas

vueltas

601
RPM=
Tiempo ; el cdigo es el siguiente:

realiza

CCP1CON = 0x7C;
flag = 1;
}

void CCP4_CallBack(uint16_t capturedValue)

}.

Se testea el pulsante S2 para aumentar la velocidad.

Float Tiempo = (pulso*0.005) +


((capturedValue*4)/4000000);

if (PORTDbits.RD3 == 0) {
while (PORTDbits.RD3 == 0);

Pulso =0;

if (PWM < 1012) {

Revmin =60/Tiempo;

PWM = PWM + 25;

if (revmin > aux)

EPWM1_LoadDutyValue(PWM);

mostrar=1;

} else PWM = 1012;

aux=revmin;

}.

TMR1_Reload();

Se testea el pulsante S3 para disminuir la velocidad.

}.
Finalmente para el control de inicio del motor y de
aumento o disminucin de la velocidad se trabaja en el main;
el cdigo para lo mencionado anteriormente es el siguiente:

if (PORTDbits.RD4 == 0) {
while (PORTDbits.RD4 == 0);
if (PWM > 212) {

Para actualizar los datos en el LCD se ocupa una bandera


la cual es activada en el CCP4 si es que existe una variacin
en el nmero de revoluciones por minuto

PWM = PWM - 25;


EPWM1_LoadDutyValue(PWM);

if (mostrar==1)

} else PWM = 212;

}.
Lcd_Out(2,5,"

");

Lcd_Out(2,9,"

");

Se testea el pulsante S4 para detener el motor.


if (PORTDbits.RD0 == 0) {

char revomin[4];
itoa(revomin, revmin, 10);

CCP1CON = 0x00;

Lcd_Out(2, 5, revomin);

if (PORTDbits.RD7==0)

mostrar=0;

{ revmin=0;

}.

Lcd_Cmd(LCD_CLEAR);

Para realizar el inicio del motor se testea el pulsante S1

Lcd_Cmd(LCD_CURSOR_OFF);

if (PORTDbits.RD2 == 0)

DelayMs(100);

inicio();

Lcd_Out(1, 1, "PRACTICA 1: CCP");

La funcin inicio es llamada si se cumple la condicin


del pulsante, en esta se da el inicio del motor y la inversin
de giro

Lcd_Out(2, 1, "RPM: 0");


PWM=0;
PWM = 512;

void inicio(void) {
while (PORTDbits.RD2 == 0);

revmin=0;

EPWM1_LoadDutyValue(PWM);

EPWM1_LoadDutyValue(PWM);

if (flag == 1) {

flag = 0;
}

CCP1CON = 0xFC;
flag = 0;
} else {

}
}
IV CONCLUSIONES
En esta prctica se pudo entender mejor cmo funciona el
Modulo CCP en modo captura y para generacin de PWM,
adems se pudo controlar exitosamente el control de
velocidad, e inversin de giro del mismo visualizando de
manera ptima el valor del nmero de revoluciones por
minuto en el LCD.

Potrebbero piacerti anche