Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Debounced TextLCD mbed
Fork of PID by
Revision 1:e7782774b135, committed 2015-10-14
- Comitter:
- squinteroz
- Date:
- Wed Oct 14 20:44:27 2015 +0000
- Parent:
- 0:f0eb5248ae8f
- Commit message:
- PID
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Apr 08 23:46:50 2015 +0000
+++ b/main.cpp Wed Oct 14 20:44:27 2015 +0000
@@ -1,39 +1,44 @@
#include "mbed.h"
-#include "TextLCD.h"
-#include "DebouncedIn.h"
-
+#include "TextLCD.h" // nos permite usar el lcd en nuestro comando
+#include "DebouncedIn.h" // esta libreria es útil para podeer declarar todas las teclas o botones que se posean
TextLCD lcd(PTE0, PTE1, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7 Teclado
-DebouncedIn button1(PTC12); //Botón Aumento
-DebouncedIn button2(PTC13); //Botón Decremento
-DebouncedIn button3(PTC16); //Botón de pasar
-DebouncedIn button4(PTC17); //Botón para iniciar el PID
-
+//asignamos el puerto a cada interruptor
+
+DebouncedIn button1(PTC12); //Aumentar
+DebouncedIn button2(PTC13); //Decrementar
+DebouncedIn button3(PTC16); //Pasar
+DebouncedIn button4(PTC17); //inicio
+
+// asignamos los pines a la salida y a la entrada (analógicas)
+
AnalogIn y(PTB1); // Salida de la planta
AnalogOut u(PTE30); // Señal de control
-DigitalOut led1(LED1); // Salidas para comprobar el funcionamiento del programa
+//Salidas digitales utilziadas para la comprobación del funcionamiento
+
+DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
-Timer t; //Para cuantizar el tiempoque se deja undido un botón de aumento o decremento
+Timer t;// nos permite saber cuanto tiempo permanecen presionados los botones asociados al aumento y al decremento
-int C1=0x0F; // Codigo para escribir y matener el el LCD
-int sp=0,kp=0,kd=0,ki=0,p=1; // Inicializacion de las variables para el controlador
+int C1=0x0F; // inicializamos el lcd y el tipo de formato que este ultizará
+int sp=0,kp=0,kd=0,ki=0,p=1; // condiciones iniciales de los parametros de controlador. NOTA: la variable p indica en que se parametro se desea intervenir (kp,ki,kd,sp, pasar e iniciar)
float ap, ai, ad, err, med, err_v, pid=0; //
int main() {
lcd.writeCommand(C1);
- lcd.printf(" CONTROL PID\n");
+ lcd.printf(" Controlador PID\n");
wait(2);
lcd.cls();
- lcd.printf(" EQUIPO1:\nJuan Jose Munoz");
+ lcd.printf(" Equipo_5:\nEliana Mejia E.");
wait(2);
lcd.cls();
- lcd.printf("Carlos Arbelaez Rafael Barriento");
+ lcd.printf("Sebastian Quintero Z. Sebastian Vergara P");
wait(2);
lcd.cls();
- lcd.printf(" INGRESO DE\n PARAMETROS ");
+ lcd.printf(" Ingresar Parametros ");
wait(2);
retorno: //Cuando se presiona por segunda vez el botón 4 se retorna a la interfaz de parametros para modificarlos
@@ -50,10 +55,12 @@
lcd.printf("Sp=%d", sp);
while(1) {
- if (button1.falling())
+ if (button1.falling()) // se presiona el botón de aumento
{
- led1 =!led1;
+ led1 =!led1; // se utiliza para prender el led
+
+ // sub menú para la constante sp
if (p==1)
{
@@ -63,7 +70,7 @@
lcd.locate(3,0);
lcd.printf("%d", sp);
if(sp>=5){
- sp=5; //saturamos el setpoint hasta 5 segun la escala medida ya que trabajaremos entre 0V y 5V
+ sp=5; //El límite de la señal de saida se va a encontrar entre [0V;5V]
lcd.locate(3,0);
lcd.printf(" ");
lcd.locate(3,0);
@@ -87,21 +94,23 @@
}
+
+ // sub menú para la constante kp
else if (p==2)
{
- ++kp; //Aumento unitario de la constante
+ ++kp; // representa un aumento unitario de la variable
lcd.locate(11,0);
lcd.printf(" ");
lcd.locate(11,0);
lcd.printf("%d", kp);
- while(button1==0){ //Verifica si el botón 1 se deja presionado
- if(t==0){t.start();} //Inicia a contar el tiempo que se deja presionado
+ while(button1==0){ //se ejecuta esta instrucción, mientras el botón se encuentra presionado
+ if(t==0){t.start();} //se contabiliza el tiempo que se deja presionado
if((t<7) && (t>=1)){ //Primera velocidad de incremento en el intervalo
- wait(0.3); //Espera 0.3 segundos para volver a imprimir
+ wait(0.3); //Espera 0.3 segundos para volver a imprimir en el lcd
++kp;
lcd.locate(11,0);
lcd.printf(" ");
@@ -110,25 +119,25 @@
}
if((t>=7)&&(t<13)){ //Segunda velocidad de incremento
-
+ //Aumento en un factor de 10
wait(0.3);
- kp=10+kp; //ahora aumenta de 10 en 10
+ kp=10+kp;
lcd.locate(11,0);
lcd.printf(" ");
lcd.locate(11,0);
lcd.printf("%d", kp);
}
if((t>=13) && (t<19)){ //Tercera velocidad de incremento 100
-
+ //Aumento en un factor de 100
wait(0.3);
- kp=100+kp; //Aumenta de 100 en 100
+ kp=100+kp;
lcd.locate(11,0);
lcd.printf(" ");
lcd.locate(11,0);
lcd.printf("%d", kp);
}
- if(kp>999){ //Saturación máxima de los parametos
+ if(kp>999){ //condición limite que poseen los parámetros
kp=999;
lcd.locate(11,0);
lcd.printf(" ");
@@ -138,6 +147,8 @@
}
t.reset(); //Se reinicia el tiempo y vuelve a incrementar unitariamente
}
+
+ // sub menú para la constante ki
else if (p==3)
{
++ki;
@@ -189,7 +200,8 @@
}
-
+
+ // sub menú para la constante kd
else if (p==4)
{
++kd;
@@ -241,7 +253,7 @@
}
}
-
+ // accionamiento del botón asociado al decrecimeinto de las constantes
if (button2.falling())
{
led2 =!led2;
@@ -357,7 +369,7 @@
}
if (p==4)
{
- if (kd==0) // no mostrar nada
+ if (kd==0) // no se visualiza nada en el display
{
}
else
@@ -402,6 +414,7 @@
}
}
}
+ // accionamiento del botón pasar
if (button3.falling())
{
led3 =!led3;
@@ -438,37 +451,44 @@
}
}
-
+ // accionamiento del botón asociado al inicio del programa realizado
+
if(button4.falling()){
p=1;
- lcd.cls();
+ lcd.cls();// limpia la pantalla y la localiza en (0,0)
lcd.printf("Iniciando PID\n");
wait(1);
- while(p==1){ //La segunda vez que se presiona es para volver a la interfaz para modificar parametros
+ while(p==1){ //si se presiona por segunda vez es para modificar los parámetros
if(button4.falling()){
p=0;
- goto retorno;
+ goto retorno; // se hace un llamado a la función retorno
}
- med=5*y.read();
- err=sp-med;
+ med=5*y.read(); // las constantes por la cuál se amplifica la señal dependen del sistema que se desee controlar y en donde lo deseamos limitar
+ err=sp-med; // error del sistema
ap = kp*err;
+
// se verifica que la accion integral no sea muy grande
+
if(ai<5)
{
- ai =(ki*err)+ai; //calculo de la integral del error
+ ai =(ki*err)+ai; //calculo de la integral del error
}
- ad = kd*(err-err_v); //calculo de la accion derivativa
+ ad = kd*(err-err_v); //calculo de la acción derivativa
pid = (ap+ai+ad);
+
// se verifica que pid sea positivo **************************************
if(pid<=0){pid=0;}
- // se verifica que pid sea menor o igual la valor maximo *****************
+
+ // se verifica que pid sea menor o igual l valor maximo *****************
+
if(pid>=5){pid=5;}
- u.write(pid);
+ u.write(pid); // enviamos el valor de PID al puerto analógico de salida
t.start();
+
if(t>=1){
lcd.cls();
- lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD
+ lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD en este caso modulo 1
lcd.locate(8,0);
lcd.printf("Err=%0.1f", err);
lcd.locate(0,1);
