Sie sind auf Seite 1von 10

Lab. No.

3 – Discretización y adquisición de datos 1


UNIVERSIDAD FRANCISCO DE PAULA SANTANDER
FACULTAD DE INGENIERIA
CONTROL DIGITAL

LABORATORIO No. 2 – Discretización y adquisición de datos


INSTRUCCIONES
1- Las técnicas y herramientas didácticas que se empleen en los laboratorios tiene como finalidad el refuerzo,
la conformación y ejecución de los diferentes aspectos que hacen parte de la asignatura. De forma que el
alumno desarrolle un pensamiento flexible, dinámico, audaz, independiente, persistente, divergente y
original en su formación como profesional.

OBJETIVOS
 Entrenar al estudiante en el uso de sistemas de comunicación entre Matlab y Arduino para
aplicaciones de adquisición de datos
 Aprender comandos para la transformación de sistemas continua a sistemas discretos

REFERENCIAS

 Andrew Knight Basics of MATLAB and Beyond. Chapman and Hall/CRC; 1 edition, 1999.
 Fernandez del Busto y Ezeta, Ricardo., "Análisis y diseño de sistemas de control digital", Mc
Graw Hill, 2013, ISBN: 978-607-15-0773-0
 http://www.mathworks.com

SESIÓN SIMULACIÓN

INTRODUCCIÓN

TRANSIENT RESPONSE
For discrete systems, we can analyze the system behaviors from different pole locations in the z-plane. The
characteristics in the z-plane can be related to those in the s-plane by the following expression.

 T = sampling time (sec/sample)


 s = location in the s-plane
 z = location in the z-plane

Suppose we have the following discrete transfer function

Create a new m-file and enter the following commands

numDz = 1;
denDz = [1 -0.3 0.5];
sys = tf(numDz,denDz,-1); % the -1 indicates that the sample time is undetermined
pzmap(sys)
axis([-1 1 -1 1])
zgrid

Control Digital
Lab. No.3 – Discretización y adquisición de datos 2

sys = tf(numDz,denDz,1/20);
step(sys,2.5);

Suppose we have the following discrete transfer function

% Este programa aplica una Respuesta a una entrada escalon


entrada escalón unitario a un 1.8
sistema discreto:
% Siendo num(z)=0,0952z y 1.6

den(z)=z^2-1,8096z+0,9048
1.4
num=[0.0952 0];
den=[1 -1.8096 0.9048]; 1.2
T=0.1;
n=100; 1
y(kT)

tempo=(0:1:n-1)*T;
yk=dstep(num,den,n); 0.8
figure(1)
plot(tempo,yk,'*r') 0.6

xlabel('kT [segundos]')
0.4
ylabel('y(kT)')
title('Respuesta a una entrada 0.2
escalon')
grid 0
0 1 2 3 4 5 6 7 8 9 10
kT [segundos]

CONTINUOUS-DISCRETE CONVERSION METHODS

Discretize a Transfer Function

Discretize the following continuous-time transfer function:

Control Digital
Lab. No.3 – Discretización y adquisición de datos 3

This system has an input delay of 0.3 s.


Discretize the system using the triangle
(first-order-hold) approximation with
sample time Ts = 0.1 s.

H = tf([1 -1],[1 4 5],'InputDelay', 0.3);


Hd = c2d(H,0.1,'foh');

Compare the step responses of the


continuous-time and discretized systems.

step(H,'-',Hd,'--')

Discretize Model with Fractional Delay Absorbed into Coefficients

Discretize the following delayed transfer function using zero-order hold on the input, and a 10-Hz sampling
rate.

h = tf(10,[1 3 10],'IODelay',0.25);
hd = c2d(h,0.1)

hd =

0.01187 z^2 + 0.06408 z + 0.009721


z^(-3) * ----------------------------------
z^2 - 1.655 z + 0.7408

Sample time: 0.1 seconds


Discrete-time transfer function.

In this example, the discretized


model hd has a delay of three
sampling periods. The discretization
algorithm absorbs the residual half-period delay into the coefficients of hd.
Compare the step responses of the continuous-time and discretized models.
step(h,'--',hd,'-')

Discretize Identified Model

Estimate a continuous-time transfer function, and discretize it.

Control Digital
Lab. No.3 – Discretización y adquisición de datos 4

load iddata1
sys1c = tfest(z1,2);
sys1d = c2d(sys1c,0.1,'zoh');

Estimate a second order discrete-


time transfer function.

sys2d = tfest(z1,2,'Ts',0.1);

Compare the response of the


discretized continuous-time transfer
function model, sys1d, and the
directly estimated discrete-time
model, sys2d.

compare(z1,sys1d,sys2d)

D2C

Convert Discrete-Time Transfer Function to Continuous Time

Create the following discrete-time transfer function:

H = tf([1 -1],[1 1 0.3],0.1);

The sample time of the model is  .

Derive a continuous-time, zero-order-hold equivalent model.

Hc = d2c(H)
Hc =
121.7 s + 1.405e-12
---------------------
s^2 + 12.04 s + 776.7

Continuous-time transfer function.

Discretize the resulting model, Hc, with the default zero-order hold method and sample time 0.1s to return
the original discrete model, H.

c2d(Hc,0.1)
ans =
z-1
-------------
z^2 + z + 0.3
Sample time: 0.1 seconds Discrete-time transfer function.

Use the Tustin approximation method to convert H to a continuous time model.

Hc2 = d2c(H,'tustin');

Control Digital
Lab. No.3 – Discretización y adquisición de datos 5

Discretize the resulting model, Hc2, to get back the original discrete-time model, H.

c2d(Hc2,0.1,'tustin');

SESIÓN EXPERIMENTAL

INTRODUCCIÓN
Como se puede ver en la descripción que se presenta desde MathWorks, MATLAB® es un entorno de
programación con infinidad de posibilidades, que ayuda a resolver los problemas de cálculo técnico incluso
más rápidamente que otros lenguajes de programación. MATLAB es extremadamente potente, por lo que
suele ser complicado a veces, desarrollar aplicaciones estructuradas, en esta guía se presenta un Script para la
comunicación con Arduino en tiempo real, cabe anotar que no es la única solución, ya que la diversidad de
pensamiento y las potentes herramientas del programa lo hacen versátil en su uso y aplicación.

Para comenzar, lo que se quiere hacer es, leer con Arduino los datos de un potenciómetro que se tiene
conectado al pin analógico número 0. Se obtendrán valores entre 0 y 1023, los cuales se enviarán a través del
Puerto Serial hacia MATLAB, que los recogerá y los procesará a voltios. Se puede decir, que se va a realizar
un muestreo de valores, los cuales se van a representar en una gráfica.

En la anterior gráfica muestra los valores que Arduino ha obtenido del potenciómetro, el cual se ha ido
moviendo para ver la variación en cada muestra. Arduino envía a Matlab valores entre 0 y 1023 pero, como
ya se mencionó antes, desde Matlab se ha hecho la conversión a Voltios, aunque también se podría haber
hecho desde Arduino.

Desarrollo de la práctica

El procedimiento a seguir es el siguiente:

1. Descargar desde matworks o desde el PLAD la aplicación que permite a Matlab comunicarse con
Arduino (ArduinoIO.zip).

Control Digital
Lab. No.3 – Discretización y adquisición de datos 6
2. Descomprima el archivo, ArduinoIO, en su interior hay una serie de carpetas y archivos, por ahora nos
interesa la carpeta pde.
3. Abra el programa Arduino haciendo click sobre el ícono que se muestra en la figura.

Una vez el programa despliegue la ventana de inicio de Arduino, dar click en la barra de menú Archivo
=> Abrir, en la ventana de búsqueda que se despliega, ubicar la carpeta pde contenida en la carpeta
descargada ArduinoIO, dentro de esta carpeta se encuentra el archivo adioes.pde, cargar el archivo en la
tarjeta Arduino, luego cerrar el programa, ya el arduino ha quedado configurado para comunicarse con
Matlab. Recuerde que se debe configurar el puerto de comunicación del arduino para poder programarlo.
En la barra de menú, ir a Herramientas => Tarjeta para seleccionar la tarjeta que se va a usar y en
Herramientas => Puerto serial para ver el puerto al que se conectó el Arduino.
4. El siguiente paso es abrir Matlab y desde la ventana de comandos, ejecutar el archivo install_arduino
que se encuentra en la carpeta ArduinoIO, vale aclarar que dicha carpeta debe estar instalada en el
directorio de trabajo de Matlab, para que pueda ser reconocida.
5. De esta manera queda listo y configurado el sistema para poder realizar la comunicación entre los
dispositivos y Matlab.
6. Para probar la conexión de Matlab con Arduino, desde la ventana de comandos de Matlab, ejecute la
siguiente instrucción: ax = arduinno(‘COMX’). X es el número del puerto al que se conectó el arduino.
Si la conexión es correcta, aparecerá un listado de cómo están configurad los puertos de arduino.
7. El paso a seguir es realizar una aplicación script que permita la toma de datos de un proceso, bien sea
para una base de datos o para la identificación de sistemas.

¡Con esta pequeña explicación se procede a programar el script en MATLAB para establecer la
comunicación Puerto Serie! (Este script es propuesto por el profesor, pero no es la única solución)

Para comenzar, se creará el siguiente srcipt en Matlab, el cual podrá ser ejecutado desde la Ventana de
Comandos (Command Window),

Lo primero que se va a escribir en el script serán los comandos para borrar todo rastro de figuras y datos que
hayan podido haber quedado por ahí, así como el borrado del command Windows. Existe una instrucción que
permite borrar/limpiar el puerto, esto con el fin de encontrar errores de puerto en uso y cosas así, esta
instrucción es la siguiente:

delete(instrfind({'Port'},{'COM1'}));

El paso siguiente será crear toda la lógica de intercomunicación entre Matlab y Arduino, para lo cual se
ejecuta:

Control Digital
Lab. No.3 – Discretización y adquisición de datos 7
1. La conexión “Attempting connection”, ax = arduino(‘COM1’) p.e.
2. Frecuencia de muestreo Fs.
3. Número de muestras N
4. Crear vectores de almacenamiento y tiempo [y t].
5. Configurar ejes para la gráfica. [ylim xlim].
6. Para una mejor presentación, se ha creado un botón de control ‘Parar’, con uicontrol.
7. Por último se crea un ciclo while, el cual, dependiendo del compás tic-toc, tomará los datos.
8. Dentro del lazo while se tomarán los datos y se graficarán.
9. El comando y(1:end-1) = y(2:end), permitirá mover los ejes de atrás hacia adelante.

Código del script para Matlab

clc
close all
clear all
delete(instrfind({'Port'},{'COM1'}));
an = arduino('COM1'); %Puerto donde esta conectado el arduino
Fs = 50; %Frecuencia de muestreo
N = 1000; %Tamaño del vector
y = zeros(N, 1);
t = linspace(0, (N-1)/Fs, N); %Crea el vector tiempo
l1 = line(nan, nan, 'Color', 'r', 'LineWidth', 2);% Genera una línea a partir de los datos leidos
ylim = ([-0.1 5.1]); %Límites del eje Y
xlim = ([0 (N-1)/Fs]); %Límites del eje X
grid %Abre la grilla
%Crear un botón de parada para la toma de datos
stop = 1;
%Diseño del botón
uicontrol('Style', 'Pushbutton', 'String', 'Parar', 'Callback', 'stop=0;');
tic %Inicio del compas
while stop
if toc > 1/Fs
tic
y(1:end-1) = y(2:end); %Mueve el vector
y(end) = an.analogRead(0)*5/1023;%Lee los datos a través de arduino
set(l1, 'XData', t, 'YData', y);%Pone los datos para graficar
drawnow %Grafica
end
end

A continuación, se muestra como se debe conectar la placa de


arduino con el potenciómetro para la toma de datos.

Montaje

Control Digital
Lab. No.3 – Discretización y adquisición de datos 8
Fundamentación

Los sistemas de control se refieren al uso de herramientas que permitan controlar de forma autónoma plantas
industriales, se basan en la construcción de lazos cerrados para comparar un set point con la medida directa
de la variable controlada, para que, dependiendo del error, el sistema responda en una u otra forma con una
señal de mando m(t).

Es necesario saber que los sistemas de control manejan variables análogas continuas en el tiempo y que el
controlador moderno (control digital) las manipula en forma digital, esto conlleva a tener que convertir las
entradas de análogo a digital y las salidas de digital a análogo. Para ello se utilizan los sistemas de
conversión ADC y DAC. Matlab es un potente programa que permite, a través de sus toolbox para control
system, realizar todo tipo de análisis y manipulación de los sistemas de control, para ello se deben conocer
las funciones de transferencia de la planta y de su sistema de medida. Existen en Matlab toolboxes para la
identificación paramétrica y no paramétrica de dichas plantas así como los tipos de conversión de análogo a
digital (Continuos to Digital) c2d y (Digital to Continuos) d2c.

En este aparte de la guía se va a modificar de


cierta forma el script anterior para analizar el
sistema de control dado por la siguiente
función de transferencia:

Cuya respuesta al escalón es la siguiente:

Se puede apreciar la respuesta con alguna


oscilación, sobre impulso y tiempo de
asentamiento.

A partir de esta función de transferencia se procederá a la conversión al dominio (z), o sea sistema de control
digital.

En Matlab se procede a la conversión de la siguiente forma:

Donde el tiempo de muestreo Ts será igual al inverso de Fs, la cual en el ejemplo anterior se había definido
como 50, de esta manera la nueva función de transferencia quedará así:

La transformada inversa (z) dará la ecuación en diferencias del sistema, esta será entonces:

Esta será la función de transferencia objeto de estudio en esta parte de la práctica. La respuesta al escalón de
esta nueva función, debe guardar relación con la respuesta al sistema continuo, entonces:

Control Digital
Lab. No.3 – Discretización y adquisición de datos 9
Esta respuesta es muy similar a la obtenida
para el sistema continuo, aquí se logran ver
los pequeños escalones de la conversión.

A partir de la función de transferencia Hd,


se procede a obtener la ecuación en
diferencias del sistema, con el fin de poder
simular su funcionamiento a una entrada de
voltaje por el puerto analógico cero
(potenciómetro).

Al scrip anterior se le agregan algunos


parámetros como la función de transferencia
y el vector de salida, se renombra el vector
de entrada como u y se crea el vector de
salida y, se introduce la función de
transferencia continua y se hace la
conversión desde el mismo script, entonces
el nuevo script quedará de la siguiente
forma:

clc
close all
clear all
delete(instrfind({'Port'},{'COM1'}));%En mi caso el Puerto es el COM1
an = arduino('COM1'); %Puerto donde está conectado el arduino
Fs = 50; %Frecuencia de muestreo
N = 1000; %Tamaño del vector
u = zeros(N,1); %Vector de entradas u
y = zeros(N,1); %Vector de salidas y
t = linspace(0, (N-1)/Fs, N); %Crea el vector tiempo

% Genera la línea1 a partir de los datos leidos


l1 = line(nan, nan, 'Color', 'r', 'LineWidth', 2);

% Genera la línea2 a partir de la respuesta del sistema


l2 = line(nan, nan, 'Color', 'b', 'LineWidth', 2);
ylim = ([-0.1 5.1]); %Límites del eje Y
xlim = ([0 (N-1)/Fs]); %Límites del eje X
grid %Abre la grilla
%%%
H = tf(8,[1 2 8]);%Crea la función de transferencia continua
Hd = c2d(H, 1/Fs);%Convierte el sistema de continuo a digital
a = Hd.den{1};%Extrae el vector denominador de Hd
a1 = a(2);
a2 = a(end);
b = Hd.num{1};%Extrae el vector numerador de Hd
b1 = b(2);
b2 = b(end);
%%%
%Crear un botón de parada para la toma de datos
stop = 1;
%Diseño del botón
uicontrol('Style', 'Pushbutton', 'String', 'Parar', 'Callback', 'stop=0;');
tic %Inicio del compas
while stop
if toc > 1/Fs

Control Digital
Lab. No.3 – Discretización y adquisición de datos 10
tic
u(1:end-1) = u(2:end);%Mueve el vector u
y(1:end-1) = y(2:end);%Mueve el vector y
u(end) = an.analogRead(0)*5/1023;%Lee los datos a través de arduino

%Ecuación en diferencias
y(end) = -a1*y(end-1)-a2*y(end-2)+b1*u(end-1)+b2*u(end-2);

%Pone los datos de entrada para graficar


set(l1, 'XData', t, 'YData', u);

%Pone los datos de salida para graficar


set(l2, 'XData', t, 'YData', y);
title('Respuesta al escalón para el sistema de control dado');
drawnow %Grafica
end
end

Guardar el scrip como Lab_03.m,


luego ejecutar desde la ventana de
comandos, Lab_03, allí se aprecia la
respuesta del sistema al escalón dado
por voltaje adquirido por el puerto
a(0) del arduino, varíe el
potenciómetro y obtenga respuestas
para varios valores de u.

En la siguiente gráfica se puede


observar la respuesta obtenida en el
desarrollo del ejercicio, se logra ver
como el sistema responde al voltaje
de entrada para varios valores del
mismo y como dicho sistema
mantiene la forma de la respuesta.

Gráfica de la respuesta a un escalón


del sistema digital.

Control Digital

Das könnte Ihnen auch gefallen