Motor current controller
Fork of CURRENT_CONTROL by
Diff: CURRENT_CONTROL.cpp
- Revision:
- 0:955aa05c968a
- Child:
- 1:c5973a56d474
diff -r 000000000000 -r 955aa05c968a CURRENT_CONTROL.cpp --- /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