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@2:5d6b80aeb455, 2020-10-26 (annotated)
- Committer:
- cnckiwi31
- Date:
- Mon Oct 26 08:28:45 2020 +0000
- Revision:
- 2:5d6b80aeb455
- Parent:
- 1:35bf896ac56e
Prepared for documentation with copyright boilerplate added
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
cnckiwi31 | 2:5d6b80aeb455 | 1 | /* Copyright 2020 Allan Joshua Veale |
cnckiwi31 | 2:5d6b80aeb455 | 2 | |
cnckiwi31 | 2:5d6b80aeb455 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); |
cnckiwi31 | 2:5d6b80aeb455 | 4 | you may not use this file except in compliance with the License. |
cnckiwi31 | 2:5d6b80aeb455 | 5 | You may obtain a copy of the License at |
cnckiwi31 | 2:5d6b80aeb455 | 6 | |
cnckiwi31 | 2:5d6b80aeb455 | 7 | http://www.apache.org/licenses/LICENSE-2.0 |
cnckiwi31 | 2:5d6b80aeb455 | 8 | |
cnckiwi31 | 2:5d6b80aeb455 | 9 | Unless required by applicable law or agreed to in writing, software |
cnckiwi31 | 2:5d6b80aeb455 | 10 | distributed under the License is distributed on an "AS IS" BASIS, |
cnckiwi31 | 2:5d6b80aeb455 | 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
cnckiwi31 | 2:5d6b80aeb455 | 12 | See the License for the specific language governing permissions and |
cnckiwi31 | 2:5d6b80aeb455 | 13 | limitations under the License. |
cnckiwi31 | 2:5d6b80aeb455 | 14 | */ |
cnckiwi31 | 2:5d6b80aeb455 | 15 | |
cnckiwi31 | 0:5cc1284be040 | 16 | #ifndef _LINACT_H_ |
cnckiwi31 | 0:5cc1284be040 | 17 | #define _LINACT_H_ |
cnckiwi31 | 0:5cc1284be040 | 18 | |
cnckiwi31 | 0:5cc1284be040 | 19 | #include "mbed.h" |
cnckiwi31 | 0:5cc1284be040 | 20 | /** |
cnckiwi31 | 2:5d6b80aeb455 | 21 | * Controls a linear actuator for moving the test rig joint up and down |
cnckiwi31 | 0:5cc1284be040 | 22 | */ |
cnckiwi31 | 0:5cc1284be040 | 23 | |
cnckiwi31 | 0:5cc1284be040 | 24 | class LinearActuator |
cnckiwi31 | 0:5cc1284be040 | 25 | { |
cnckiwi31 | 0:5cc1284be040 | 26 | public: |
cnckiwi31 | 0:5cc1284be040 | 27 | |
cnckiwi31 | 0:5cc1284be040 | 28 | /** |
cnckiwi31 | 2:5d6b80aeb455 | 29 | * @param dir_pin: PinName of digital output controlling actuator direction (1 is retract, 0 is extend) |
cnckiwi31 | 2:5d6b80aeb455 | 30 | * @param pwm_pin: PinName of digital pwm output controlling actuator speed |
cnckiwi31 | 0:5cc1284be040 | 31 | */ |
cnckiwi31 | 0:5cc1284be040 | 32 | LinearActuator (PinName dir_pin, PinName pwm_pin) : |
cnckiwi31 | 0:5cc1284be040 | 33 | DirPin(dir_pin),PwmPin(pwm_pin) |
cnckiwi31 | 0:5cc1284be040 | 34 | { |
cnckiwi31 | 1:35bf896ac56e | 35 | PwmPin.period(1/(double)timing::PWMHertz); // 10kHz PWM |
cnckiwi31 | 0:5cc1284be040 | 36 | |
cnckiwi31 | 0:5cc1284be040 | 37 | //default to off |
cnckiwi31 | 0:5cc1284be040 | 38 | setDirection(false); |
cnckiwi31 | 0:5cc1284be040 | 39 | setPWM(0); |
cnckiwi31 | 0:5cc1284be040 | 40 | } |
cnckiwi31 | 0:5cc1284be040 | 41 | |
cnckiwi31 | 0:5cc1284be040 | 42 | /** |
cnckiwi31 | 0:5cc1284be040 | 43 | * @return current direction |
cnckiwi31 | 0:5cc1284be040 | 44 | */ |
cnckiwi31 | 0:5cc1284be040 | 45 | bool getDirection() |
cnckiwi31 | 0:5cc1284be040 | 46 | { |
cnckiwi31 | 0:5cc1284be040 | 47 | return DirPin.read(); |
cnckiwi31 | 0:5cc1284be040 | 48 | } |
cnckiwi31 | 0:5cc1284be040 | 49 | |
cnckiwi31 | 0:5cc1284be040 | 50 | /** |
cnckiwi31 | 0:5cc1284be040 | 51 | * @param dir set current direction (true is retract, false is extend) |
cnckiwi31 | 0:5cc1284be040 | 52 | */ |
cnckiwi31 | 0:5cc1284be040 | 53 | void setDirection(bool dir) |
cnckiwi31 | 0:5cc1284be040 | 54 | { |
cnckiwi31 | 0:5cc1284be040 | 55 | DirPin.write((int)dir); |
cnckiwi31 | 0:5cc1284be040 | 56 | return; |
cnckiwi31 | 0:5cc1284be040 | 57 | } |
cnckiwi31 | 0:5cc1284be040 | 58 | |
cnckiwi31 | 0:5cc1284be040 | 59 | /** |
cnckiwi31 | 0:5cc1284be040 | 60 | * @param DutyCycle is percent of pwm |
cnckiwi31 | 0:5cc1284be040 | 61 | */ |
cnckiwi31 | 0:5cc1284be040 | 62 | void setPWM(int DutyCycle) |
cnckiwi31 | 0:5cc1284be040 | 63 | { |
cnckiwi31 | 0:5cc1284be040 | 64 | //limit the duty cycle to 0-100% |
cnckiwi31 | 0:5cc1284be040 | 65 | if(DutyCycle > 100) { |
cnckiwi31 | 0:5cc1284be040 | 66 | DutyCycle = 100; |
cnckiwi31 | 0:5cc1284be040 | 67 | } else if (DutyCycle < 0) { |
cnckiwi31 | 0:5cc1284be040 | 68 | DutyCycle = 0; |
cnckiwi31 | 0:5cc1284be040 | 69 | } |
cnckiwi31 | 0:5cc1284be040 | 70 | //convert to a pulse width in seconds |
cnckiwi31 | 0:5cc1284be040 | 71 | double onTime = (1/(double)timing::PWMHertz)*((double)DutyCycle/100); |
cnckiwi31 | 0:5cc1284be040 | 72 | PwmPin.pulsewidth(onTime); |
cnckiwi31 | 0:5cc1284be040 | 73 | return; |
cnckiwi31 | 0:5cc1284be040 | 74 | } |
cnckiwi31 | 0:5cc1284be040 | 75 | |
cnckiwi31 | 0:5cc1284be040 | 76 | |
cnckiwi31 | 0:5cc1284be040 | 77 | private: |
cnckiwi31 | 0:5cc1284be040 | 78 | DigitalOut DirPin; |
cnckiwi31 | 0:5cc1284be040 | 79 | PwmOut PwmPin; |
cnckiwi31 | 0:5cc1284be040 | 80 | }; |
cnckiwi31 | 0:5cc1284be040 | 81 | |
cnckiwi31 | 0:5cc1284be040 | 82 | #endif |