Академический Документы
Профессиональный Документы
Культура Документы
Arduino + Matlab/Simulink:
controlador PID
Jorge Garca Tscar| July 21, 2011
https://wechoosethemoon.es/2011/07/21/arduino-matlab-simulink-controlador-pid/ 1/16
12/10/2017 Arduino + Matlab/Simulink: controlador PID
1. Introduccin
Como se observa, se trata de un brazo articulado con un motor en un
extremo, unido a una hlice que proporciona ms o menos
sustentacin en funcin del voltaje suministrado al motor. En la
articulacin del eje hay un potencimetro solidario a l, que devuelve
un voltaje V () entre 0V y 5V, en funcin del ngulo . El esquema del
sistema de control es el siguiente:
https://wechoosethemoon.es/2011/07/21/arduino-matlab-simulink-controlador-pid/ 2/16
12/10/2017 Arduino + Matlab/Simulink: controlador PID
2. Interfaz fsica
Tal y como se explica en una
entrada anterior, el Arduino es
incapaz por s mismo de aportar
el amperaje que necesita el
motor, por lo que emplearemos
un circuito de potencia
consistente en un transistor
MOSFET.
El microcontrolador enviar a la
puerta del transistor una seal
PWM, y por tanto esta misma seal PWM pero de potencia ser la que
reciba el motor. La representacin de este montaje ser la siguente:
https://wechoosethemoon.es/2011/07/21/arduino-matlab-simulink-controlador-pid/ 3/16
12/10/2017 Arduino + Matlab/Simulink: controlador PID
3. Programacin
3.1. Arduino: interfaz I/O
En primer lugar, el cdigo del Arduino debe ser capaz de (1) leer V ()
del potencimetro, (2) enviarlo como dato a travs del puerto serie, (3)
recibir el dato de potencia necesaria al motor y (4) escribir dicho dato
en la salida analgica como seal PWM. Hay que tener en cuenta que el
conversor devuelve un valor entre 0 y 1024, que mapeamos a 0 y 255
para poder enviarlo como un solo bit unsigned.
1 int out = 0;
2 byte in = 0;
3 byte pinOut = 10;
4
5 void setup() {
6 // inicializar puerto serie
7 Serial.begin(9600);
8 // preparar output
9 pinMode(pinOut, OUTPUT);
10 }
11
12 void loop() {
13 // leer del pin A0 como
14 out = analogRead(A0);
15 // escalar para obtener formato uint8
16 out = map(out, 0, 1023, 0, 255);
17 // enviar en base 10 en ASCII
18 Serial.write(out);
19 // leer del serie si hay datos
20 if(Serial.available()){
21 in = Serial.read();
22 // escribir en el pin 10
23 analogWrite(pinOut, in);
24 }
25 // esperar para estabilizar el conversor
26 delay(20);
27 }
Por otra parte, nuestro programa de Simulink debe recibir este dato de
V () a travs del puerto serie, compararlo con una referencia Vref que
controlaremos nosotros con un slider en la propia interfaz gr ca de
Simulink, y, mediante un controlador PID, determinar la seal de
control (potencia al motor) necesaria. Despus debe enviarla a travs
del puerto serie en formato uint8, unsigned integer de 8 bits, que toma
valores entre 0 y 255, ideales para la funcin analogWrite() de
Arduino:
https://wechoosethemoon.es/2011/07/21/arduino-matlab-simulink-controlador-pid/ 5/16
12/10/2017 Arduino + Matlab/Simulink: controlador PID
https://wechoosethemoon.es/2011/07/21/arduino-matlab-simulink-controlador-pid/ 6/16
12/10/2017 Arduino + Matlab/Simulink: controlador PID
1 %% Preparar la figura
2 f = figure('Name','Captura');
3 axis([0 length(ref_out) 0 5.1])
4 grid on
5 xlabel('Medida (-)')
6 ylabel('Voltaje (V)')
7 title('Captura de voltaje en tiempo real con Arduino')
8 hold all
9
10 %% Tratamiento
11 pos_out = pos_out(:);
12 pid_out = pid_out(:);
13 x = linspace(0,length(ref_out),length(ref_out));
14
15 %% Limpiar figura y dibujar
16 cla
17 plot(x,pid_out,'Color',[0.6,0.6,0.6],'LineWidth',2)
18 plot(x,ref_out,x,pos_out,'LineWidth',2)
19 legend('Control','Referencia','Posicin','Location','Best'
20
21 %% Salvar el grfico
22 savefigure('resultado','s',[4.5 3],'po','-dpdf')
Ejecutando este cdigo tras haber realizado otro ensayo del sistema,
hemos obtenido el siguiente resultado:
https://wechoosethemoon.es/2011/07/21/arduino-matlab-simulink-controlador-pid/ 7/16
12/10/2017 Arduino + Matlab/Simulink: controlador PID
Se observa en este caso que el motor requiere mucho menos voltaje (en
gris) debido a que se trata de uno ms potente que el inicial y que el
sistema presenta todava una sobreoscilacin (overshoot) en la seal de
salida (en rojo) cuando la seal de referencia (en verde) presenta una
subida escaln, cosa que esperamos corregir en futuras versiones.
4. Conclusiones
En esta entrada se describe cmo es posible, con un presupuesto muy
reducido, construir montajes que permiten poner en prctica la teora
del control PID. El siguiente desarrollo interesante sera realizar un
control con dos grados de libertad en lugar de uno not because it is
easy, but because it is hard!
ARDUINO + MATLAB: A
Comments
Comments Community
1 Login
Sort by Best
Recommend 6 Share
LOG IN WITH
OR SIGN UP WITH DISQUS ?
https://wechoosethemoon.es/2011/07/21/arduino-matlab-simulink-controlador-pid/ 8/16
12/10/2017 Arduino + Matlab/Simulink: controlador PID
Name
Gracias
Reply Share
Saludos!
Reply Share
Gracias!
Reply Share
Hi, can you show me the draw of your project and the bill of
materials used?
Reply Share
Excelente aporte!!!
Reply Share
https://wechoosethemoon.es/2011/07/21/arduino-matlab-simulink-controlador-pid/ 15/16
12/10/2017 Arduino + Matlab/Simulink: controlador PID
https://wechoosethemoon.es/2011/07/21/arduino-matlab-simulink-controlador-pid/ 16/16