Control de Motores de Corriente Continua


Explicamos cómo es el programa a “cargar” en el PIC de la controladora, desarrollada en la edición anterior de Saber Electrónica, para que permita el control de motores de corriente continua. El programa, ya sea en assembler o en hexadecimal, puede bajarse de nuestra web con la clave brain


Desarrollo


El proyecto fue realizado en lenguaje ensamblador (assembler) y compilado con la herramienta de Microchip MPLAB, la misma podrá encontrarla en la página de Microchip o en nuestra web.
Los archivos fuente (.asm) y los mismos compilados (.hex) se los puede hallar en los archivos que se encuentran con la clave brain (haga click en el ícono password de nuestra web e introduzca dicha clave).
El archivo fuente de nuestro proyecto se llama “mi-md.asm”. En este ejemplo se demuestra cómo manejar dos motores DC conectados a CN7 y CN8. Para realizar este ejemplo, se deben conectar dos motores DC en las salidas CN7 y CN8 según se explica en la nota respectiva de esta misma edición (conectores CN7 y CN8).
Las llaves 1 a 7 del DipSwitch deben estar en OFF .
El programa es muy sencillo y hace que los motores giren en un sentido durante 500 milisegundos, se paren, giren en sentido contrario y vuelva a reiniciarse el ciclo.
Una vez encendida la TR-Brain y cargado el programa en el PIC, los motores girarán hacia un lado y hacia otro con un retraso de 500 ms entre cada cambio de dirección, los motores deben conectarse según lo mostrado en la figura 1. Cabe aclarar que el programa es meramente demostrativo, y que Ud. podrá emplear diferentes rutinas como para que los motores giren en un sentido u otro, en función de determinados estados de entradas que Ud. puede definir a voluntad.
El programa es el siguiente:

list p=16F84A ; directiva para definir el procesador
#include <p16F84a.inc> ; include file del procesador usado

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

w_temp EQU 0x0C ;variable usada para salvar registro W
status_temp EQU 0x0D ;variable usada para salvar registro STATUS
vargral_2 EQU 0x0E ;variable de uso general en rutinas varias
vargral_1 EQU 0x0F ;variable de uso general en rutinas varias
delay_ms EQU 0x10 ;contiene la cant.de ms del delayms
opt_status EQU 0x11 ;contiene el estado de opticos en bit 0 y 1
;bit 0 contiene estado opt.izquierdo (1=refleja)
;bit 1 contiene estado opt.derecho (1=refleja)

#define F_MI PORTA,2
#define R_MI PORTA,3
#define F_MD PORTA,0
#define R_MD PORTA,1
#define RB_0 PORTB,0
#define RB_1 PORTB,1
#define RB_2 PORTB,2
#define RB_3 PORTB,3
#define RB_4 PORTB,4
#define RB_5 PORTB,5
#define RA_4 PORTA,4

ORG 0x000 ;Vector de RESET del procesador
goto start ;salta al comienzo del programa

start:
bsf STATUS,RP0 ;Selecciono banco 1
bcf OPTION_REG,NOT_RBPU ;habilito Pull Up en Port B

movlw 0x10 ;Seteo Port RA4 como entrada
andlw 0x10
movwf TRISA
movlw 0xFF ;RB0 a RB5 como entradas
iorlw 0xC0
movwf TRISB
bcf STATUS,RP0 ;Selecciono banco 0
movlw D'250'
movwf delay_ms ;defino delay en 250 ms

main:
call adelante_todo ;motores hacia adelante
call delayms
call delayms
call frena_todo ;freno motores
call delayms
call delayms
call atras_todo ;motores hacia atras
call delayms
call delayms
call frena_todo ;freno motores
call delayms
call delayms
goto main ;inicio el ciclo nuevamente
frena_todo: ;rutina que frena los motores
bsf F_MI
bsf R_MI
bsf F_MD
bsf R_MD
return

adelante_todo: ; rutina que hace el giro en sentido horario
bsf F_MI
bcf R_MI
bsf F_MD
bcf R_MD
return

atras_todo: ;rutina que hace el giro antihorario
bcf F_MI
bsf R_MI
bcf F_MD
bsf R_MD
return

delayms: ;rutina que genera una demora de 500 ms
movf delay_ms,W
movwf vargral_2
clrf vargral_1
delayms1:
nop
nop
nop
decfsz vargral_1,F
goto delayms1
decfsz vargral_2,F
goto delayms1
return ;fin del delay

END ;directiva: 'FIN DEL PROGRAMA'


Como puede observar, hemos dado un programa “genérico” que Ud. puede emplear como ejemplo. Cabe aclarar que, por razones de espacio, no podemos explicar “paso a paso” cómo se construye el programa. Si Ud. desea saber qué es lo que se consigue con cada instrucción, en nuestra web, con la clave dada, podrá bajar el archivo “md-mi.asm” y si lo abre con un programa editor de texto (el Word, por ejemplo), tendrá un tutorial completo sobre la forma de emplear cada rutina. Aclaramos que, en este caso, los motores giran hacia un lado y hacia el otro en forma automática; pero podría emplear los terminales del conector CN5 como entradas y hacer que el giro de cada motor se produzca cuando hay una de esas entradas activadas o hacer que el giro responda a una zona oscura o clara detectada por los sensores ópticos conectados en CN9. Insistimos... con la explicación dada en el tutorial que puede bajar de Internet, no tendrá problemas en realizar Ud. mismo, el programa que requiere para una aplicación específica.

De la Redacción de la Revista Saber Electrónica
 
 
FIGURA 1
 
 
 
 
 
 
 
 
 


Posicionado por < ProSEO >