Working, but boundaries not yet tested
Dependencies: HIDScope MODSERIAL QEI biquadFilter mbed
Fork of prog_inversekin_feedback by
Diff: main.cpp
- Revision:
- 2:94b5e00288a5
- Parent:
- 1:ace33633653b
- Child:
- 3:8caef4872b0c
diff -r ace33633653b -r 94b5e00288a5 main.cpp --- a/main.cpp Fri Oct 14 14:35:09 2016 +0000 +++ b/main.cpp Fri Oct 14 14:37:25 2016 +0000 @@ -18,7 +18,7 @@ //set settings Serial pc(USBTX,USBRX); -Ticker MeasurePTicker; //, BiQuadTicker, FeedbackTickere;// sampleT, TimeTracker; +Ticker MeasurePTicker; HIDScope scope(2); //set datatypes @@ -45,93 +45,9 @@ BiQuad bq2(1.0000, -1.5704, 1.2756, -0.4844, 0.0762); //set go-Ticker settings -volatile bool MeasurePTicker_go=false; //PTicker_go=false, MotorControllerTicker_go=false;// TimeTracker_go=false, sampleT_go=false; +volatile bool MeasurePTicker_go=false; void MeasureP_act(){MeasurePTicker_go=true;}; // Activates go-flags -//void P_act(){PTicker_go=true;}; -//void MotorController_act(){MotorControllerTicker_go=true;}; -//void TimeTracker_act(){TimeTracker_go=true;}; -//void sampleT_act(){sampleT_go=true;}; - -/* -float GetReferenceVelocity() -{ - // Returns reference velocity in rad/s. - // Positive value means clockwise rotation. - const float maxVelocity = 8.4; // in rad/s of course! - if (button1 == 0){ - led1=1; - led2=0; - // Counterclockwise rotation - referenceVelocity = potMeterIn * maxVelocity; - } - else { - led1=0; - led2=1; - // Clockwise rotation - referenceVelocity = -1*potMeterIn * maxVelocity; - } - return referenceVelocity; -} - -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 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); -} - -void MeasureAndControl() -{ - // 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); -} - -void TimeTrackerF(){ - wait(1); - float Potmeter = potMeterIn.read(); - pc.printf("Reference velocity: %f rad/s \r\n", referenceVelocity); - pc.printf("Potmeter: %f rad/s \r\n", Potmeter); - //pc.printf("Counts: %i rad/s \r\n", counts); - //pc.printf("Derivative Counts: %i rad/s \r\n", DerivativeCounts); -} - -void sample() -{ - int countsPrev = 0; - QEI Encoder(D12, D13, NC, 32); - counts = Encoder.getPulses(); // gives position - //scope.set(0,counts); - DerivativeCounts = (counts-countsPrev)/0.001; - //scope.set(1,DerivativeCounts); - countsPrev = counts; - //scope.send(); - pc.printf("Counts: %i rad/s \r\n", counts); - pc.printf("Derivative Counts: %d rad/s \r\n", DerivativeCounts); -} - -void BiQuadFilter(){ //this function creates a BiQuad filter for the DerivativeCounts - //double in=DerivativeCounts(); - bqcDerivativeCounts=bqc.step(DerivativeCounts); - //return(bqcDerivativeCounts); - } - */ void MeasureP(){ double ref_position = Potmeter1; //reference position from potmeter int counts = Encoder.getPulses(); // gives position @@ -161,15 +77,11 @@ //Initialize led1=0; led2=0; - //float Potmeter = potMeterIn.read(); + //float Potmeter1 = potMeter1.read(); + //float Potmeter2 = potMeter2.read(); MeasurePTicker.attach(&MeasureP_act, 0.01f); - //P.attach(&P_act, 0.01f); - //MotorController.attach(&MotorController_act, 0.01f); pc.baud(115200); QEI Encoder(D12, D13, NC, 32); // turns on encoder - //sampleT.attach(&sampleT_act, 0.1f); - //pc.printf("Reference velocity: %f rad/s \r\n", referenceVelocity); - //pc.printf("Potmeter: %f rad/s \r\n", Potmeter); while(1) { @@ -177,36 +89,5 @@ MeasurePTicker_go=false; MeasureP(); } - // Encoder part - /* - counts = Encoder.getPulses(); // gives position - DerivativeCounts = ((double) counts-countsPrev)/0.01; - - scope.set(0,counts); - scope.set(1,DerivativeCounts); - //scope.set(1,bqcDerivativeCounts); - scope.send(); - countsPrev = counts; - //pc.printf("Counts: %i rad/s \r\n", counts); - //pc.printf("Derivative Counts: %f rad/s \r\n", DerivativeCounts); - - } - - if (PTicker_go){ - PTicker_go=false; - P(); - } - - if (MotorControllerTicker_go){ - MotorControllerTicker_go=false; - MotorController(); - if (TimeTracker_go){ - TimeTracker_go=false; - TimeTrackerF(); - } - if (sampleT_go){ - sampleT_go=false; - sample(); - }*/ } } \ No newline at end of file