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:
Wed Aug 12 10:02:19 2020 +0000
Revision:
1:35bf896ac56e
Parent:
0:5cc1284be040
Child:
2:5d6b80aeb455
completely operational now

Who changed what in which revision?

UserRevisionLine numberNew 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 1:35bf896ac56e 20 PwmPin.period(1/(double)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