Cuando tenemos un motor de corriente continua y queremos variar su velocidad de giro, no hay nada como el PWM. Como ya vimos en la anterior entrada (Control de velocidad PWM) el PWM consiste en variar el ciclo de trabajo de una onda cuadrada y al conmutar un motor con ella, variamos su velocidad.
En el anterior proyecto utilicé un circuito integrado NE555 para generar la onda cuadrada con ciclo de trabajo variable mediante un potenciometro. Pero ahora traigo un nuevo circuito basado en un microcontrolador PIC12F683. De esta manera podemos obtener un montón de nuevas posibilidades como en mi caso, la incorporación de un sistema de seguridad con el cual el motor sólo arrancara cuando este el mando de control a cero; de esta manera evitaremos que el motor arranque de golpe cuando conectemos la alimentación si estuviese el mando de control en la posición máxima.
Comenzaremos con la alimentación del circuito. Este circuito va a controlar la velocidad de un motorcillo con un portabrocas a 12V, muy útil para realizar los agujeros de una PCB de fabricación casera (Printed Circuit Board). Para obtener los 12V, usaremos una fuente ATX reciclada de un ordenador viejo, puesto que estas nos proporcionan bastantes amperios, suficiente para un motorcillo de estos. Pero resulta que el microcontrolador trabaja a 5V. Existen dos maneras de obtener estos 5V, una de ellas es utilizando la linea de 5V de la fuente ATX (cables rojos); la otra consiste en incorporar un regulador de voltaje en la propia placa. Yo me he decidido por la segunda puesto que quedará un circuito más "universal" y podremos usarlo con cualquier otra fuente que sólo nos proporcione los 12V. La parte encargada de obtener los 5V para el microcontrolador es la siguiente:
El circuito integrado LM78L05 (DataSheet) nos proporcionará en su salida 5V y unos 100mA máximos, suficiente para alimentar el microcontrolador. A través de J1 (DC) se aplicarán los 12V de la fuente de alimentación. El condensador C3 actúa como filtro de salida.
A continuación veremos la configuración básica del microcontrolador 12F683:
Para controlar la velocidad del motor, utilizaremos un potenciometro. Con la entrada analógica AN0 del microcontrolador, leeremos la posición del potenciometro RV1. También he añadido un LED rojo que nos indicara una parada de emergencia.
El potenciometro se conecta entre 0 y 5V, y la patilla central directamente a la entrada analógica del PIC. El LED está conectado de 5V a salida digital a través de una resistencia de 470Ω; por lo tanto, para encenderlo tendremos que poner la salida del microcontrolador a 0, no a 1.
Finalmente, tendremos un circuito que nos permita controlar la alta potencia del motor, manteniendo aislados los dos circuitos de 5 y 12V:
En el esquema no aparece el regulador de voltaje, pero el microcontrolador funciona a 5V y el motor a 12V. Mediante el opto-acoplador PC817A (DataSheet) separamos electricamente los circuitos de 5V y de 12V. El LED del opto-acoplador está conectado a través de una resistencia a la salida del CCP1 del microcontrolador (este es el que nos genera la señal de PWM). Por la salida, el opto-acoplador controla el estado de corte o conducción de dos transistores en push-pull (uno NPN y otro PNP) y la resistencia R3 mantiene en estado bajo las bases de los mismos mientras el opto-acoplador no conduce. La resistencia R2 limita la corriente que circula a través de las bases. El conjunto push-pull controla la puerta del MOSFET IRFZ44N (DataSheet), y éste controla el motor. Se puede añadir un pequeño radiador para disipar el posible calor. El diodo D3 evita que las corrientes autoinducidas que se generan en el interior del motor afecten al circuito.
Al juntar todas las partes vistas anteriormente queda el circuito completo:
Codigo en C para el microcontrolador:
//
//
// Control de velocidad para un motor
// a 12V con sistema de seguridad y
// control a través de un potenciometro.
// Un LED conectado a GP1 indicara que el
// sistema está bloqueado por seguridad
// y será necesario bajar el potenciometro
// al minimo para que el motor pueda girar.
//
//
// PIC12F683
// Uso del CCP1
//
// Copyright (c) 2016 Aaron G.
// All rights reserved.
#include <12f683.h> // Dispositivo
#device adc=10 // ADC a 10bits
#fuses hs,nowdt,put,mclr,noprotect,nocpd,nobrownout // Configuración
#use delay(xtal=8000000) // Cristal a 8MHz
#use pwm(CCP1,FREQUENCY=10000) // PWM a 10KHz
#define limite_adc 10 // Limite de seguridad
#define LEDs pin_a1
void main(void){ // Configuracion inicial
set_pwm1_duty(0);
set_tris_a(0b00001001);
setup_adc(adc_clock_internal);
setup_adc_ports(san0);
set_adc_channel(0);
delay_ms(10);
output_low(LEDs);
while(read_adc()>=limite_adc) delay_ms(10);
output_high(LEDs);
while(1){ // Bucle infinito
pwm_set_duty_percent(read_adc());
delay_ms(10);
}
}
//
// Control de velocidad para un motor
// a 12V con sistema de seguridad y
// control a través de un potenciometro.
// Un LED conectado a GP1 indicara que el
// sistema está bloqueado por seguridad
// y será necesario bajar el potenciometro
// al minimo para que el motor pueda girar.
//
//
// PIC12F683
// Uso del CCP1
//
// Copyright (c) 2016 Aaron G.
// All rights reserved.
#include <12f683.h> // Dispositivo
#device adc=10 // ADC a 10bits
#fuses hs,nowdt,put,mclr,noprotect,nocpd,nobrownout // Configuración
#use delay(xtal=8000000) // Cristal a 8MHz
#use pwm(CCP1,FREQUENCY=10000) // PWM a 10KHz
#define limite_adc 10 // Limite de seguridad
#define LEDs pin_a1
void main(void){ // Configuracion inicial
set_pwm1_duty(0);
set_tris_a(0b00001001);
setup_adc(adc_clock_internal);
setup_adc_ports(san0);
set_adc_channel(0);
delay_ms(10);
output_low(LEDs);
while(read_adc()>=limite_adc) delay_ms(10);
output_high(LEDs);
while(1){ // Bucle infinito
pwm_set_duty_percent(read_adc());
delay_ms(10);
}
}
Cada vez que comienza el programa (al hacer un RESET por ejemplo) lee el estado del potenciometro, y si este está en una posición alta, se quedará bloqueado y el motor no arrancara. El LED rojo indicara éste estado de bloqueo el cuál se sobrepasa al bajar el potenciometro al mínimo.
PCB disponible: Layout_Download
No hay comentarios:
Publicar un comentario