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: DebouncedIn QEI TextLCD_encoder mbed
Revision 3:9347b362d33c, committed 2013-12-15
- Comitter:
- lcorralesc1
- Date:
- Sun Dec 15 15:57:03 2013 +0000
- Parent:
- 2:fa1d90037a6c
- Commit message:
- This program makes a PID control and the values for control action are entered by quadrature encoder.
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Nov 13 01:54:13 2013 +0000
+++ b/main.cpp Sun Dec 15 15:57:03 2013 +0000
@@ -8,7 +8,7 @@
TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
QEI wheel (PTD5, PTD0, NC, 100);
-AnalogIn y(PTB0);
+AnalogIn y(PTB1);
AnalogOut u(PTE30);
DigitalOut led1(LED1);
@@ -31,8 +31,10 @@
int i; // indice de la variable
int j; //variable controla cambio 4 posiciones
-int kp, ki, kd, sp, err, med, yr, ap, ai, ad, err_v, cycle, pid;
+int kp, ki, kd, sp, yr, ap, ai, ad, err, med, err_v, cycle, pid;
+int b=0;
float pidn;
+Timer t;
int main() {
lcd.cls();
@@ -176,20 +178,21 @@
lcd.printf("Sp%d",sp);
lcd.locate(8,1);
lcd.printf("Co%d",pid);
- wait(5);
+ wait(1);
// CICLO PRINCIPAL CONTROLADOR PID
-
+ b=0;
while(1) {
med=999*y.read(); //leer puerto analogo y asignar a med
err = (sp-med);
ap = kp*err;
// se verifica que la accion integral no sea muy grande
- //if(ai<500){
+ if(ai<100)
+ {
ai =(ki*err)+ai; //calculo de la integral del error
- // }
+ }
//else{
//Dejo de sumar la accion integral
// }
@@ -197,24 +200,32 @@
ad = kd*(err-err_v); //calculo de la accion derivativa
pid = (ap+ai+ad);
- // se actualizan las variables *******************************************
- // err_v = err;
+
// se verifica que pid sea positivo **************************************
- if(pid<=0){
+ if(pid<=0)
+ {
pid=0;
- }
+ }
// se verifica que pid sea menor o igual la valor maximo *****************
- if (pid > 999){
- pid=999;
- }
+ if (pid > 5000)
+ {
+ pid=5000;
+ }
// se actualizan las variables *******************************************
- //err_v = err;
+ err_v = err;
//se muestran las variables******************************************
- wait(0.3);
+ if (b==0)
+ {
+ t.start();
+ b=1;
+ }
+ if(t>=0.3)
+ {
+ wait(0.2);
lcd.locate(2,0);
lcd.printf(" ");
lcd.locate(2,0);
@@ -231,16 +242,18 @@
lcd.printf(" ");
lcd.locate(10,1);
lcd.printf("%d",pid);
-
+ }
//Normalizacion de la salida
pidn=pid/999;
// se envia el valor pid a puerto analogico de salida (D/A) **************
u.write(pidn);
- err_v = err;
+
// se repite el ciclo
+ wait(1.5);
}
- }
\ No newline at end of file
+ }
+
\ No newline at end of file