Controls a 12V linear actuator up and down as used in the https://os.mbed.com/users/cnckiwi31/code/heros_leg_readout_torque_addition/ test rig
Dependents: heros_leg_readout_torque_addition_V3 DROPSAWTestRigCode_V4
LinearActuator.h@0:5cc1284be040, 2020-08-07 (annotated)
- Committer:
- cnckiwi31
- Date:
- Fri Aug 07 09:09:42 2020 +0000
- Revision:
- 0:5cc1284be040
- Child:
- 1:35bf896ac56e
First version of linear actuator library for SLAK test leg
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
cnckiwi31 | 0:5cc1284be040 | 1 | #ifndef _LINACT_H_ |
cnckiwi31 | 0:5cc1284be040 | 2 | #define _LINACT_H_ |
cnckiwi31 | 0:5cc1284be040 | 3 | |
cnckiwi31 | 0:5cc1284be040 | 4 | #include "mbed.h" |
cnckiwi31 | 0:5cc1284be040 | 5 | /** |
cnckiwi31 | 0:5cc1284be040 | 6 | * Controlling aa linear actuator for moving the test rig joint up and down |
cnckiwi31 | 0:5cc1284be040 | 7 | */ |
cnckiwi31 | 0:5cc1284be040 | 8 | |
cnckiwi31 | 0:5cc1284be040 | 9 | class LinearActuator |
cnckiwi31 | 0:5cc1284be040 | 10 | { |
cnckiwi31 | 0:5cc1284be040 | 11 | public: |
cnckiwi31 | 0:5cc1284be040 | 12 | |
cnckiwi31 | 0:5cc1284be040 | 13 | /** |
cnckiwi31 | 0:5cc1284be040 | 14 | * @param dir_pin PinName of digital output controlling actuator direction (1 is retract, 0 is extend) |
cnckiwi31 | 0:5cc1284be040 | 15 | * @param pwm_pin PinName of digital pwm output controlling actuator speed |
cnckiwi31 | 0:5cc1284be040 | 16 | */ |
cnckiwi31 | 0:5cc1284be040 | 17 | LinearActuator (PinName dir_pin, PinName pwm_pin) : |
cnckiwi31 | 0:5cc1284be040 | 18 | DirPin(dir_pin),PwmPin(pwm_pin) |
cnckiwi31 | 0:5cc1284be040 | 19 | { |
cnckiwi31 | 0:5cc1284be040 | 20 | PwmPin.period(1/timing::PWMHertz); // 10kHz PWM |
cnckiwi31 | 0:5cc1284be040 | 21 | |
cnckiwi31 | 0:5cc1284be040 | 22 | //default to off |
cnckiwi31 | 0:5cc1284be040 | 23 | setDirection(false); |
cnckiwi31 | 0:5cc1284be040 | 24 | setPWM(0); |
cnckiwi31 | 0:5cc1284be040 | 25 | } |
cnckiwi31 | 0:5cc1284be040 | 26 | |
cnckiwi31 | 0:5cc1284be040 | 27 | /** |
cnckiwi31 | 0:5cc1284be040 | 28 | * @return current direction |
cnckiwi31 | 0:5cc1284be040 | 29 | */ |
cnckiwi31 | 0:5cc1284be040 | 30 | bool getDirection() |
cnckiwi31 | 0:5cc1284be040 | 31 | { |
cnckiwi31 | 0:5cc1284be040 | 32 | return DirPin.read(); |
cnckiwi31 | 0:5cc1284be040 | 33 | } |
cnckiwi31 | 0:5cc1284be040 | 34 | |
cnckiwi31 | 0:5cc1284be040 | 35 | /** |
cnckiwi31 | 0:5cc1284be040 | 36 | * @param dir set current direction (true is retract, false is extend) |
cnckiwi31 | 0:5cc1284be040 | 37 | */ |
cnckiwi31 | 0:5cc1284be040 | 38 | void setDirection(bool dir) |
cnckiwi31 | 0:5cc1284be040 | 39 | { |
cnckiwi31 | 0:5cc1284be040 | 40 | DirPin.write((int)dir); |
cnckiwi31 | 0:5cc1284be040 | 41 | return; |
cnckiwi31 | 0:5cc1284be040 | 42 | } |
cnckiwi31 | 0:5cc1284be040 | 43 | |
cnckiwi31 | 0:5cc1284be040 | 44 | /** |
cnckiwi31 | 0:5cc1284be040 | 45 | * @param DutyCycle is percent of pwm |
cnckiwi31 | 0:5cc1284be040 | 46 | */ |
cnckiwi31 | 0:5cc1284be040 | 47 | void setPWM(int DutyCycle) |
cnckiwi31 | 0:5cc1284be040 | 48 | { |
cnckiwi31 | 0:5cc1284be040 | 49 | //limit the duty cycle to 0-100% |
cnckiwi31 | 0:5cc1284be040 | 50 | if(DutyCycle > 100) { |
cnckiwi31 | 0:5cc1284be040 | 51 | DutyCycle = 100; |
cnckiwi31 | 0:5cc1284be040 | 52 | } else if (DutyCycle < 0) { |
cnckiwi31 | 0:5cc1284be040 | 53 | DutyCycle = 0; |
cnckiwi31 | 0:5cc1284be040 | 54 | } |
cnckiwi31 | 0:5cc1284be040 | 55 | //convert to a pulse width in seconds |
cnckiwi31 | 0:5cc1284be040 | 56 | double onTime = (1/(double)timing::PWMHertz)*((double)DutyCycle/100); |
cnckiwi31 | 0:5cc1284be040 | 57 | PwmPin.pulsewidth(onTime); |
cnckiwi31 | 0:5cc1284be040 | 58 | return; |
cnckiwi31 | 0:5cc1284be040 | 59 | } |
cnckiwi31 | 0:5cc1284be040 | 60 | |
cnckiwi31 | 0:5cc1284be040 | 61 | |
cnckiwi31 | 0:5cc1284be040 | 62 | private: |
cnckiwi31 | 0:5cc1284be040 | 63 | DigitalOut DirPin; |
cnckiwi31 | 0:5cc1284be040 | 64 | PwmOut PwmPin; |
cnckiwi31 | 0:5cc1284be040 | 65 | }; |
cnckiwi31 | 0:5cc1284be040 | 66 | |
cnckiwi31 | 0:5cc1284be040 | 67 | #endif |