Академический Документы
Профессиональный Документы
Культура Документы
R=2.2K a 1/4W
C=47uF
SIM1
AREF
13
ARDUINO
RESET 12
~11
5V ~10
~9
SIMULINO
POWER
GND 8
ATMEGA328P
DIGITAL (PWM~)
7
~6
ATMEL
ANALOG IN
A0 ~5
A1 4 R1
A2 ~3
A3 2
2.2k
A4 TX > 1
A5 RX < 0
www.arduino.cc
blogembarcado.blogspot.com
SIMULINO UNO
C1
47u
La primera parte trata de adquirir los datos utilizando entradas analogicas desde
el ADC y como salida el PWM.
La segunda parte DAC de 12 bits como salida analoga
CODIGO EN MATLAB
delete(instrfind({'Port'},{'COM2'}));
a=arduino('COM2');
ref=zeros(1,1);
val=zeros(1,1);
LED=5;
T=1/50;
tfin=5;
N=tfin/T; display('NSamples'), disp(N)
amp=1;
for i=0:N
if (i>=0 && i<=50)
u=0;
elseif (i>50 && i<=150)
u=amp;
else
u=0;
end
analogWrite(a,LED,u);
sensorValue=analogRead(a,0);
if i==N
break;
end
ref(i+1)=u;
val(i+1)=sensorValue;
hold on
plot(i,sensorValue)
plot(i,u,'r')
end
dlmwrite('data_rcinp.dat',ref,'delimiter','\n','precision','%.2f')
dlmwrite('data_rcout.dat',val,'delimiter','\n','precision','%.2f')
av=analogRead(a,5);
av=(av/1023)*254;
analogWrite(a,5,round(av))
2. LECTURA DE DATOS
Codigo en matlab
load data_rcout.dat
load data_rcinp.dat
y=data_rcout(:,1);
u=data_rcinp(:,1);
subplot(211), plot(y),axis([0 200 0 10])
subplot(212), plot(u
3. MODELAMIENTO DE LA SALIDA
Codigo en matlab
clear;close all;clc;
load data_rcinp.dat
load data_rcout.dat
u=data_rcinp(:,1);
y=data_rcout(:,1);
fs=20; T=1/fs;
data=iddata(y,u,T);
plot(data)
th=arx(data,[1,1,1]); % identificacion
Gd=tf(th.b,th.a,T);
Gc=d2c(Gd); % modelo estimado
% modleo exacto
tau=0.1034; % dato real : tau =R*C
Gp=tf(1,[tau 1 ]); % modelo exacto
step(Gc,'r')
hold
t=0:0.01:1;
A=6;
sp=A*ones(size(t));
y=lsim(Gp,sp,t);
plot(t,y,'k')
4. DETERMINACIÓN DE LOS VALORES DE TAU, TD, K DE
NUESTRO CONTROLADOR
% calculo de k tau Td para la generacion de la tabla
syms s t
Gp=321/ (s^2 +37.85*s+323.4);
u=1/s;
y=u*Gp;
y=simplify(ilaplace(y));
dy=diff(y,t); % 1 derivada
ddy=diff(dy,t); % 2 derivada
t1=solve(ddy);
t1=vpa(t1,4);
t1=vpa(t1,4);
t1=t1(2);
m=subs(dy,t1);
m=m(1);
% calculo del Td tiempo de retardo
y1=subs(y,t1); % para t=t1
y1=y1(1);
Ta=(m*t1-y1)/m;
% calculo de la bmax
Bmax=limit(y,inf);
% calculo de k
r=1; % escalon unitario
K=Bmax/r;
% calculo de la constate del timpo tau
tau=Bmax/r;
% calculo de la constante del tiempo tau
tau=Bmax/m;
disp('tau='), disp(eval(tau))
disp('Td='), disp(eval(Ta))
disp('K='), disp(eval(K))
5. SISTEMA DE RESPUESTA DEL PID
tau= 0.1564;
Td= 0.0153;
K=0.9926;
R=K/tau;
Kc=1.2/(R*Td);
Ti=2*Td;
Td=0.5*Td;
Gpid=tf([Kc*Ti*Td Kc*Ti Kc],[Ti 0]);
S=series(Gc,Gpid);
F=S/(S+1);
step(F)
6. Diseño de un Controlador difuso
REGLAS DE CONTROL
ERROR VOLTAJE
ENG VNG
ENP VNP
EC VC
EPP VPP
EPG VPG
V:voltaje G:grande
C: cero E: error
P:pequeño N: negativo
CURVA DE CONTROL ERROR VS VOLTAJE