Thijs de Kleijn
/
Motorserialcontrol
Biorobotics, basic motor control with button and potmeter
main.cpp
- Committer:
- Frimzenner
- Date:
- 2017-10-06
- Revision:
- 0:762bb19ac7d2
File content as of revision 0:762bb19ac7d2:
#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); } */