Consultar ensayos de calidad


Explicación del programa desarrollado en MikroC



Explicación del programa desarrollado en MikroC


Microcontrolador: PIC18F4520.
Frecuencia de trabajo (Fosc) = 10.00 MHz. Un ciclo de trabajo del microcontrolador = 4/Fosc = 400ns.
Circuito Procesador LM629N-6. Máx. FCLK = 6.00 MHz. Es la frecuencia a la que estamos ocupándolo. Todos los tiempos en los diagramas de tiempo son proporcionados por las hojas de datos con un oscilador a 6.00 MHz.

Este es el inicio del programa, en donde se definen variables, puerto para el bus de datos y para el bus de control, señales de control y el set de instrucciones del circuito procesador LM629 y funciones esenciales para su manejo.



A continuación explicaré, de acuerdo al orden indicado aquí arriba, las funciones secundarias esenciales para poder manipular correctamente al LM629.

LM629_Rd_Byte

Esta función lo que hace es, primero, configurar los 8 bits del bus de datos (PORTD) como entradas digitales. Mediante el registro correspondiente para configurarlo de esta manera (en este caso, TRISD). Después espera 2 ciclos de reloj. Y por último regresa el dato que está en el DATABUS, es decir, hace la lectura.

LM629_Wr_Byte

Esta función, contraria a la lectura de un byte, configura los 8 bits del bus de datos (PORTD) como salidas digitales. Mediante el registro TRIS correspondiente (TRISD). Esta función requiere el dato “output”, que es el valor que se sacará por el bus de datos, una vezconfigurado como salida.

LM629_StatusByte


Esta función se dedica a la lectura del byte de estado del LM629. Se desarrolló de acuerdo al diagrama de tiempo proporcionado por la hoja de datos. Si se dan cuenta se tiene que flanquear las terminales /CS, /PS y /RD, y también, hace uso de la función para leer un byte. Después de leer el byte, lo guarda en la variable status y lo regresa en ella. Con este diagrama, creo yo, es más fácil entender el código mostrado. T7 = 0ns, T8 = 30ns, T9 = 30ns, T10 = 180ns, T11 = 0 ns, T12 = 180ns (revisen la hoja de datos porque varios de estos tiempos son mínimos y otros máximos).

LM629_BusyCheck


Esta función verifica el estado del “Busy bit” del LM629. Este bit es usado para determinar si el procesador LM629 está ocupado=1 / libre=0 al escribir o leer algún dato. Corresponde al bit 0 del Status Byte, por tanto, para acceder a él, se tiene que leer el propio Status Byte, y después verificar el estado de dicho bit.

LM629_Cmd


Esta función se dedica a la escritura de un comando en el LM629. Requiere de un dato “cmd” que es aquel que contiene el comando respectivo del set de instrucciones del LM629, definido al inicio del programa. Como puede observarse en el diagrama de tiempo, antes de llamar a esta función, se tiene que verificar el estado del “Busy bit”. Si está libre, entonces se hace su llamado, que primero escribe el comando en el bus de datos yflanquea las terminales /CS, /PS y /WR, para que tenga efecto la escritura del comando en el LM629. T7 = 0ns, T8 = 30ns, T9 = 30ns, T14 = 100ns, T15 = 50ns, T16 = 120 (revisen la hoja de datos porque varios de estos tiempos son mínimos y otros máximos).

LM629_Wr_Word

Esta función escribe una “word” (16 bits = 2 bytes, un byte alto y un byte bajo, en este orden). Requiere de parámetros el byte alto y el byte bajo. Primero se configura el DATABUS como salida. Y de acuerdo al diagrama de tiempos, primero, se verifica el estado del “Busybit” antes de ser llamada esta función, si se encuentra libre, entonces, se hará la escritura del byte alto, y posteriormente, el byte bajo. Para esto, es necesario flanquear las terminales /CS, /PS, /WR, en el orden cronológico y con los tiempos (mínimos o máximos) mostrados en el diagrama de tiempo (revisen la hoja de datos porque varios de estos tiempos son mínimos y otros máximos), para que la escritura de la “word” tenga efecto en el LM629.

LM629_Init


En la nota de aplicación AN-693, se muestra una guía para la programación de la inicialización del hardware LM628/LM629. Aquí les muestro la tabla que indica el algoritmo para la inicialización del módulo, de RESET con hardware. Recuerden que estamos ocupando el LM629, así que la inicialización también aplica para este procesador. La principal diferencia, si es que ya leyeron las hojas deespecificaciones, es que el LM628 tiene salidas para un DAC (no tiene PWM) y el LM629 tiene PWM (pero no tiene salidas para DAC). Por tanto, el comando PORT12 no aplica para el LM629, y la inicialización de este integrado termina cuando se pregunta por el Status Byte, si es 0x80 ó 0xC4 y con un “Busy Bit Check”, recomendado. Abajo se indica los registros de Status Byte y además, el registro para las Interrupciones Enmascarables, que se tienen que resetear en la inicialización.



LM629_SetPID

Con esta función se configuran los parámetros para el filtro PID, la hoja de datos llama “parámetros”, a los coeficientes kp, ki, kd e iL (límite de integración).

Registro del Filtro del Control PID.

Selección del intervalo de muestreo del término derivativo.

Aquí está la función para configurar los parámetros del filtro PID. Se basó también en la tabla que viene en la nota de aplicación.

Sólo que en nuestra función, definimos los parámetros ki, kd, e iL. Y el intervalo de muestreo del término derivativo se puso a 0. La razón es por la fórmula que se encuentra arriba en esta página. El muestreo será Td = ds*Ts = 1*Ts. Donde Ts = 341µs, y por lo tanto, Td = Ts = 341µs. Los coeficientes y el límite de integración (son datos de 16 bits, por eso se definen como arreglos de 2 bytes) se propusieron.

LM629_Trajectory

Con esta función se define la trayectoria: posición, velocidad y aceleración. Acontinuación, muestro el registro de la TRAYECTORIA, que se necesitará configurar.

Se ocupó la tabla que viene en la nota de aplicación, para programar trayectoria en el LM629. De igual manera, se programaran aceleración, velocidad y posición.

He aquí el código en MikroC. Como pueden observar la aceleración, la velocidad y la posición, deben ser datos de hasta 32 bits, por eso, son manejados como arreglos.

LM629_StartMotion y LM629_TrajectoryComplete

La primera función inicia la trayectoria, previamente, programada en el LM629.
Con el comando STT proporcionado en el set de instrucciones de las hojas de datos. La segunda función verifica si la trayectoria fue completada.

PIC_Init

Esta función inicializa al microcontrolador PIC18F4520.


Función MAIN

MATERIAL OCUPADO EN ESTA PRÁCTICA (Referencias

Motor con reducción de 100:1 y encoder incremental en cuadratura de efecto hall de 16 cuentas por revolución (16*4).
Revisen la descripción y las especificaciones del motor en el siguiente link
https://www.pololu.com/catalog/product/1446

Elementos electrónicos.

PIC18F4520

Cristal de 10.00 MHz

LM629N-6

Oscilador de 6.00 MHz.


Para driver de puente en H.
* Compuerta NAND (4 compuertas, 2 entradas) – SN74LS00N
(Hoja de datos: https://www.ti.com/lit/ds/symlink/sn74ls00.pdf)
* Transistores BJT PNP 2N4403
(Hoja de datos:https://www.datasheetcatalog.org/datasheet/fairchild/2N4403.pdf)

El mismo puente en H:
* con optoacoplador dual salida a transistor
(MCT62: https://www.fairchildsemi.com/ds/MC/MCT6.pdf) y
* E-MOSFET de enriquecimiento (IRF9630 e IRF511):
https://www.bristolwatch.com/pdf/irf9630.pdf
https://www.qsl.net/n4xy/PDFs/Semiconductor_Data_Sheets/irf-510.pdf

Intefaz USB-Serial 5V (https://www.robodacta.mx/index.php?dispatch=products.view&product_id=29934)

Explicación y cálculos

Resolución total, de acuerdo a las especificaciones del fabricante R = 16*102.083*4 = 6533 cuentas/revolución. En la práctica, y experimentando con valores mayores a este, se decide que R = 6560.

El tiempo de muestreo
Ts=20486.00 MHz=341μs

Intervalo de muestreo Tiempo-Derivativo:

Se propone seleccionar un ds = 1, entonces:
Td=dsaˆ™Ts=1aˆ™341μs=341μs

Con respecto al programa, ds = 1, equivale a poner en el byte más significativo, del registro del Filtro de Control, 0x00.

-Respecto a la trayectoria-
Si checan la hoja de datos del LM628/LM629, en la pág. 15, se describe el registro de control de trayectoria. Si observaron en el programa, después de ingresar el comando LTRJ, escribí la word 0x002A, esto quiere decir que operará el LM629 en modo posición, se cargarán la aceleración, velocidad y posición (y ninguno de estos son relativos, de acuerdo al registro de control de trayectoria). Los bits 8 a 10 se ocupan para detener el motor“manualmente”. Dado que no los ocupo, al estar convergiendo a la trayectoria, el motor se detendrá automáticamente, esto, debido al perfil trapezoidal estándar de velocidad (la aceleración será igual a la desaceleración).

EJERCICIOS

Revisen los ejemplos que vienen en la nota de aplicación AN-693 y la hoja de especificaciones del LM628/LM629. Y por favor, traten de resolver estos 2 ejercicios, ocupen las ecuaciones que vienen en las hojas de especificaciones.
De esta manera, comprenderán cómo se determinaron los parámetros de la trayectoria: posición, velocidad y aceleración.

1. Se desea controlar electrónicamente la posición del eje rotor de un motor de CD, mediante la utilización de un controlador de precisión LM629 operando a 6 MHz de frecuencia (FCLK). En el eje motriz se ha adaptado un encoder incremental en cuadratura de 16 pulsos por vuelta. Se desea programar un perfil trapezoidal de movimiento, con una aceleración de 0.1 rev/s2, una velocidad de 0.4 rev/s y que recorra 305°. Determine los valores en hexadecimal que se tienen que programar en el registro de control de trayectoria (los registros de aceleración, velocidad y posición) del LM629 para la correcta activación de los amplificadores no lineales de potencia (puente en H, mediante la modulación por ancho de pulso que emitirá el LM629) diseñados para este motor que, dadas las especificaciones del fabricante, tiene una reducción de100:1. Precaución en la ecuación de posición, ya que están pidiendo desplazamiento en grados (1 rev = 360°).
Solución: A = 0x00000004, V = 0x0000DF7A, P = 0x0000152E

2. Se tiene un motor con caja reductora 100:1, el cual se desea que dé 5 revoluciones, a una velocidad de 40 r.p.m. y con una aceleración de 2 rev/s2. En el eje rotor se tiene incluido un encoder en cuadratura incremental con sensor de efecto hall, cuya resolución es de 16 cuentas/rev. Determine los valores en hexadecimal, que se han de cargar a un controlador de posición de precisión LM629 cuya frecuencia de operación es FCLK = 6.00 MHz. Considere, en este problema, un factor C = 1/60s, para convertir la velocidad de r.p.m. en rev/s.
Solución: P = 0x00007D00, V = 0x000174D4, A = 0x00000062

PROGRAMA EN MATLAB PARA LA INTERFAZ (comunicación serial)

clear all;
close all;
clc;
Ts=341e-6; %Periodo de muestreo = 2048/Fclk = 2048/(6.0MHz) = 341us
R=6560; %Resolucion de encoder = 16*4*100 = 6400, y por compensar +160.
puerto=serial('COM10');
set(puerto,'Baudrate',9615); %velocidad de comunicación a 9615 Baudios.
set(puerto,'StopBits',1); %bit de parada a uno.
set(puerto,'DataBits',8); %dato de 8 bits, debe estar entre 5 y 8 bits.
set(puerto,'Parity','none'); %sin paridad
set(puerto,'Terminator','CR/LF'); %“c” caracter con que finaliza el envíoset(puerto,'OutputBufferSize',12); %12 bytes a enviar
set(puerto,'InputBufferSize' ,1); %1 byte a recibir
set(puerto,'Timeout',10); %10 segundos de tiempo de espera
fopen(puerto);
while(1)
opcion=menu('ELIJA UNA OPCION:', 'Definir parámetros de trayectoria', 'Salir');
if(opcion==2)
break;
else
clc
posicion = input(' Posición en Grados [°]: ');
velocidad = input(' Velocidad [r.p.m.]: ');
aceleracion = input(' Aceleración [rev/s^2]: ');

p = round(R*posicion/360);
v = round(65536*R*Ts*velocidad/60);
a = round(65536*R*Ts*Ts*aceleracion);

A = zeros(1,4);
V = zeros(1,4);
P = zeros(1,4);

for i=1:4
P(i) = bitshift(bitand(p,bitshift(hex2dec('FF000000'),-8*(i-1))),-(24-8*(i-1)));
V(i) = bitshift(bitand(v,bitshift(hex2dec('FF000000'),-8*(i-1))),-(24-8*(i-1)));
A(i) = bitshift(bitand(a,bitshift(hex2dec('FF000000'),-8*(i-1))),-(24-8*(i-1)));
end

packdatos = zeros(1,12);
packdatos(1:4) = A;
packdatos(5:8) = V;
packdatos(9:12) = P;
envio = uint8(packdatos);
fwrite(puerto,envio,'uint8');
end
pause(1)
recibido=fread(puerto,1,'uint8');
disp(recibido);
end
fclose(puerto);
delete(puerto);
clear puerto


Política de privacidad