Motor current controller

Fork of CURRENT_CONTROL by LDSC_Robotics_TAs

Revision:
0:955aa05c968a
Child:
1:c5973a56d474
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CURRENT_CONTROL.cpp	Fri Apr 22 09:39:01 2016 +0000
@@ -0,0 +1,32 @@
+#include "mbed.h"
+#include "CURRENT_CONTROL.h"
+
+
+void CURRENT_CONTROL::CURRENT_CONTROL(PinName curChannel,
+                                      PinName PwmChannel1,
+                                      PinName PwmChannel2,
+                                      PWMIndex pwmIndex,
+                                      float Kp, float Ki, float Kd,
+                                      float samplingTime):
+    currentAnalogIn(curChannel),
+    MotorPlus(PwmChannel1),
+    MotorMinus(PwmChannel2),
+    pid(Kp,Ki,Kd,samplingTime)
+{
+    PWMIndex = pwmIndex;
+    Ts = samplingTime;
+    //setup motor PWM parameters
+    MotorPlus.period_us(50);//period equals to 50 microseconds
+    MotorPlus.write(0.5);   //duty ratio = 0.5 in complementary output -> static
+    TIM1->CCER |= 4; //enable ch1 complimentary output
+
+}
+
+void CURRENT_CONTROL::ControlCompute(float curRef)
+{
+    curFeedBack = (currentAnalogIn.read() - currentOffset)*3.3*8/0.6;
+    pid.Compute(curRef, curFeedBack);
+    MotorPlus = 0.5 - pid.output;
+    if(PWMIndex == PWM1)TIM1->CCER |= 4;
+    else if(PWMIndex == PWM2)TIM1->CCER |= 64;
+}
\ No newline at end of file