ロボステ6期 / PID_SC

Files at this revision

API Documentation at this revision

Comitter:
aoikoizumi
Date:
Fri Jun 28 05:54:13 2019 +0000
Parent:
37:c631d9b2206f
Commit message:
ghjhl

Changed in this revision

PID_SC.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/PID_SC.cpp	Wed Jun 26 03:42:35 2019 +0000
+++ b/PID_SC.cpp	Fri Jun 28 05:54:13 2019 +0000
@@ -5,49 +5,64 @@
 /***EC classの方を先に読んでおくこと***/
 
 
-SpeedControl::SpeedControl(PinName signalA , PinName signalB , PinName signalZ , int s , double t , PinName pwm_F , PinName pwm_B) : Ec(signalA,signalB,signalZ,s,t) , pwm_F_(pwm_F),pwm_B_(pwm_B) {
-    
-    Kv_p=0;Kv_d=0;diff=0;diff_old=0;now_time_=0;old_time_=0;
-    now_omega=0;now_RPM=0;
-    out_duty=0;out=0;duty=0;
+
+SpeedControl::SpeedControl(PinName signalA, PinName signalB, PinName signalZ, int s, double t, PinName pwm_F, PinName pwm_B) : Ec(signalA,signalB,signalZ,s,t), pwm_F_(pwm_F),pwm_B_(pwm_B)
+{
+
+    Kv_p=0;
+    Kv_d=0;
+    diff=0;
+    diff_old=0;
+    now_time_=0;
+    old_time_=0;
+    now_omega=0;
+    now_RPM=0;
+    out_duty=0;
+    out=0;
+    duty=0;
     pwm_F_.period_us(100);
     pwm_B_.period_us(100);
     C=45.0;
+
 }
 
-void SpeedControl::Sc(double target_omega){       //スカンジウムじゃないよ
-if(duty==0&&target_omega!=0){
-    duty=target_omega/C;
-    }else{
-    now_omega=omega;
-    now_time_=timer.read();
-     diff= (target_omega-now_omega)/20;
-    out_duty=Kv_p*diff-Kv_d*(diff-diff_old)/(now_time_-old_time_);
-    diff_old=diff;
-    if(out_duty>0.1)out_duty=0.1;
-    if(out_duty<-0.1)out_duty=-0.1;
-    if((duty>=-0.95)&&(duty<=0.95)) duty=duty+out_duty;
-    //duty=target_omega/C;
-    if(duty<-0.95)duty=-0.95;
-    else if(duty>0.95)duty=0.95;
-    old_time_=now_time_;
+void SpeedControl::Sc(double target_omega)        //スカンジウムじゃないよ
+{
+    if(duty==0&&target_omega!=0) {
+        duty=target_omega/C;
+    } else {
+        now_omega=omega;
+        now_time_=timer.read();
+        diff= (target_omega-now_omega)/20;
+        //out_duty=Kv_p*diff-Kv_d*(diff-diff_old)/(now_time_-old_time_);
+        out_duty=Kv_p*diff;
+        diff_old=diff;
+        if(out_duty>0.1)out_duty=0.1;
+        if(out_duty<-0.1)out_duty=-0.1;
+        duty=duty+out_duty;
+        //duty=target_omega/C;
+        if(duty<-0.95)duty=-0.95;
+        else if(duty>0.95)duty=0.95;
+        old_time_=now_time_;
     }
-    if(duty*target_omega<0){
-    duty=0;
-    out_duty=0;
-    wait(0.05);
-    }    
-    if(duty>=0){
+    if(duty*target_omega<0) {
+        duty=0;
+        out_duty=0;
+        wait(0.05);
+    }
+    printf("out_duty:%f,%f\r\n",out_duty,duty);
+    if(duty>=0) {
         pwm_F_=duty;
         pwm_B_=0;
-    }
-    else {
+    } else {
         pwm_F_=0;
         pwm_B_=-duty;
     }
+
 }
 
-void SpeedControl::turnF(double duty){
+void SpeedControl::turnF(double duty)
+{
     if(duty>0.95) {
         pwm_F_=0.95;
         pwm_B_=0;
@@ -61,7 +76,8 @@
 }
 
 
-void SpeedControl::turnB(double duty){
+void SpeedControl::turnB(double duty)
+{
     if(duty>0.95) {
         pwm_F_=0;
         pwm_B_=0.95;
@@ -83,7 +99,7 @@
     int now_point=int((double)pwm_F_/0.05);
     if(now_point<3) start_point=3;
     else start_point=now_point;
-    
+
     if(max_point>19) max_point=19;
     else if(max_point<0) max_point=0;
     if(max_point>now_point){
@@ -140,7 +156,8 @@
     turnF(duty);
 }*/
 
-void SpeedControl::ScZ2(double target_RPM){
+void SpeedControl::ScZ2(double target_RPM)
+{
     now_time_=timer.read();
     now_RPM=getRPM();
     diff=target_RPM-now_RPM;
@@ -153,26 +170,42 @@
     duty=0.001*out;
     turnF(duty);
 }
-    
+
 
-void SpeedControl::setPDparam(double p,double d){
+void SpeedControl::setPDparam(double p,double d)
+{
     Kv_p=p;
     Kv_d=d;
 }
 
 
-void SpeedControl::setDOconstant(double c){
+void SpeedControl::setDOconstant(double c)
+{
     C=c;
 }
 
-void SpeedControl::reset(){
-    S=0;stateA=0;stateB=0;count=0;pre_count=0.0,omega=0;
-    rev=0;now_time=0;old_time=0;RPM=0;RPM_old=0;
-    diff=0;diff_old=0;now_time_=0;old_time_=0;
-    out=0;out_duty=0;
+void SpeedControl::reset()
+{
+    S=0;
+    stateA=0;
+    stateB=0;
+    count=0;
+    pre_count=0.0,omega=0;
+    rev=0;
+    now_time=0;
+    old_time=0;
+    RPM=0;
+    RPM_old=0;
+    diff=0;
+    diff_old=0;
+    now_time_=0;
+    old_time_=0;
+    out=0;
+    out_duty=0;
 }
 
-void SpeedControl::stop(){
+void SpeedControl::stop()
+{
     pwm_F_=0;
     pwm_B_=0;
     duty=0;