Thijs de Kleijn
/
Motorserialcontrol
Biorobotics, basic motor control with button and potmeter
Diff: main.cpp
- Revision:
- 0:762bb19ac7d2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Oct 06 10:19:50 2017 +0000 @@ -0,0 +1,84 @@ +#include "mbed.h" +#include "math.h" + +DigitalIn button1(D8); +AnalogIn potMeterIn(A0); +DigitalOut direction(D7); +PwmOut mmp(D6); + +float valpow; +int toggle = 0; + + +int main() +{ + while(true) { + + if (button1 == false) { + toggle = !toggle; + wait(0.3f); + } + if (toggle == 0) { + direction = 0; + } else if (toggle == 1) { + direction = 1; + } + valpow = potMeterIn.read()/1023; + mmp.write(valpow); + } + //return; +} + +/* +float GetReferenceVelocity() +{ + // Returns reference velocity in rad/s. + // Positive value means clockwise rotation. + const float maxVelocity=8.4; // in rad/s of course! + float referenceVelocity; // in rad/s + if (button1) { + // Clockwise rotation + referenceVelocity = potMeterIn * maxVelocity; + } else { + // Counterclockwise rotation + referenceVelocity = -1*potMeterIn * maxVelocity; + } + return referenceVelocity; +} + +void SetMotor1(float motorValue) +{ + // Given -1<=motorValue<=1, this sets the PWM and direction + // bits for motor 1. Positive value makes motor rotating + // clockwise. motorValues outside range are truncated to + // within range + if (motorValue >=0) { + motor1DirectionPin = 1; + } else { + motor1DirectionPin = 0; + } + if (fabs(motorValue)>1) { + motor1MagnitudePin = 1; + } else { + motor1MagnitudePin = fabs(motorValue); + } +} + +float FeedForwardControl(float referenceVelocity) +{ + // very simple linear feed-forward control + const float MotorGain=8.4; // unit: (rad/s) / PWM + float motorValue = referenceVelocity / MotorGain; + return motorValue; +} + +void MeasureAndControl(void) +{ + // This function measures the potmeter position, extracts a + // reference velocity from it, and controls the motor with + // a simple FeedForward controller. Call this from a Ticker. + float referenceVelocity = GetReferenceVelocity(); + float motorValue = FeedForwardControl(referenceVelocity); + SetMotor1(motorValue); +} +*/ \ No newline at end of file