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

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?

UserRevisionLine numberNew 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