2022_Ateam_MOTORprogramをscrp_slaveでメインマイコンからコントローラー状況を読み取れるように改良。 また、モータに0以外のpwmが送られている場合に基盤付属のledが点灯するようにした。

Dependencies:   SBDBT arrc_mbed BNO055

Revision:
7:a0375e6dc8ca
Parent:
6:e089fda81b74
Child:
9:569c0f55dd9b
--- a/PIDco.cpp	Mon Jan 24 09:21:43 2022 +0000
+++ b/PIDco.cpp	Thu Jan 27 09:21:50 2022 +0000
@@ -1,4 +1,7 @@
 #include "PIDco.hpp"
+#include "mbed.h"
+
+Serial pc(USBTX,USBRX);
 
 PIDco::PIDco(){
     spd =  0.0;
@@ -44,7 +47,7 @@
     cal_Dval();
     cal_pwm();
     
-    if(Pwm > 0){
+        if(Pwm > 0){
             v1p = Pwm > 0.5 ? 0.5 : Pwm;
             v1m = 0;
         }else if(Pwm < 0){
@@ -57,6 +60,20 @@
     renew_Error();
 }
     
+void PIDco::angle_ctl(double PULSE,double TARGET,double p_gain,double i_gain,double d_gain){
+    pulse_a = PULSE;
+    Target = TARGET;
+    Kp = p_gain;
+    Ki = i_gain;
+    Kd = d_gain;
+    cal_spd();
+    cal_Error();
+    cal_Pval();
+    cal_Ival();
+    cal_Dval();
+    cal_pwm();
+    output = Pwm;
+}
 
 void PIDco::cal_Error(){ Error_a = Target - spd; }
 
@@ -64,14 +81,14 @@
 
 void PIDco::cal_Dval(){ Dval = Kd * (Error_a - Error_b) / dt; }
 
-void PIDco::cal_pwm(){ Pwm += (Pval + Ival + Dval); }
+void PIDco::cal_pwm(){ 
+    Pwm += (Pval + Ival + Dval); 
+    if(Pwm <= 0.0001 && Pwm > -0.0001){
+        Pwm = 0.0;
+    }
+    //printf("%lf\n",Pwm);
+}
 
 void PIDco::renew_Error(){ Error_b = Error_a; }
 
 double PIDco::obt_spd(){ return spd; }
-
-
-
-
-    
-    
\ No newline at end of file