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.
Fork of PID_Sample by
Revision 4:c21f68307740, committed 2015-12-15
- Comitter:
- DeguNaoto
- Date:
- Tue Dec 15 08:57:37 2015 +0000
- Parent:
- 3:639c3c990c9b
- Commit message:
- ?????????
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Dec 15 08:15:58 2015 +0000
+++ b/main.cpp Tue Dec 15 08:57:37 2015 +0000
@@ -11,22 +11,23 @@
#define Adjust 0.2
//"s" is sita ,"d" is dist
#define RATE 0.01
-#define Kpd 0.5
-#define Kid 0.05
+#define Kpd 0.01
+#define Kid 0.015
#define Kdd 0.01
#define Kps 1.0
-#define Kis 0.0
-#define Kds 0.0
-float L,sita,targ_sita,sita_diff,dist,targ_dist,dist_diff,Ps,Is,Ds,Us,Pd,Id,Dd,Ud;
+#define Kis 0.001
+#define Kds 0.1
+float L,sita,targ_sita,sita_diff,sita_prefdiff,dist,targ_dist,dist_diff,dist_prefdiff,Ps,Is,Ds,Us,Pd,Id,Dd,Ud;
void compute_d(){
dist_diff = targ_dist - dist;
Pd = Kpd * dist_diff; //proportionaly
Id += Kid * dist_diff * RATE; //integral
- Dd = Kdd * (dist_diff / RATE); //differential
+ Dd = Kdd * ((dist_diff - dist_prefdiff) / RATE); //differential
Ud = Pd + Id + Dd;
if( Ud > 1.0) Ud = 1.0;
else if( Ud < -1.0) Ud = -1.0;
+ dist_prefdiff = dist_diff;
}
void compute_s(){
@@ -36,10 +37,11 @@
sita_diff = targ_sita - sita;
Ps = Kps * sita_diff; //proportionaly
Is += Kis * sita_diff * RATE; //integral
- Ds = Kds * (sita_diff / RATE); //differential
+ Ds = Kds * ((sita_diff - sita_prefdiff) / RATE); //differential
Us = Ps + Is + Ds;
if( Us > 1.0) Us = 1.0;
else if( Us < -1.0) Us = -1.0;
+ sita_prefdiff = sita_diff;
serve.speed(Us);
}
@@ -48,11 +50,8 @@
Com_s.attach(&compute_s,RATE);
Com_d.attach(&compute_d,RATE);
while(1) {
- /*if(arg / 0.4 - 0.5 > 1.0) sita = 1.0;
- else if(arg / 0.4 - 0.5 < -1.0) sita = -1.0;
- else sita = arg / 0.4 - 0.5;*/
- targ_sita = Ud;
-// targ_sita = pot;
+// targ_sita = Ud;
+ targ_sita = pot;
dist = Adjust * (1.0 / distant) < 1.0 ? Adjust * (1.0 / distant) : 1.0;
pc.printf("dist:%f, sita:%f\r\n",dist,sita);
}
