Version 3 is with update to the test rig with a linear actuator
Dependencies: SPTE_10Bar_5V mbed AS5048 SDFileSystem MODSERIAL PinDetect LCM101 LinearActuator
bench.h@11:fc82dd22a527, 2020-08-12 (annotated)
- Committer:
- surajgiri
- Date:
- Wed Aug 12 12:05:58 2020 +0000
- Revision:
- 11:fc82dd22a527
- Parent:
- 10:77fcbad99a31
with benchmark v1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
megrootens | 0:3855d4588f76 | 1 | #ifndef _BENCH02_H_ |
megrootens | 0:3855d4588f76 | 2 | #define _BENCH02_H_ |
cnckiwi31 | 5:63063a9fa51c | 3 | #include "MODSERIAL.h" |
megrootens | 0:3855d4588f76 | 4 | |
megrootens | 0:3855d4588f76 | 5 | #include "mbed.h" |
cnckiwi31 | 5:63063a9fa51c | 6 | #include <string> |
cnckiwi31 | 5:63063a9fa51c | 7 | |
cnckiwi31 | 5:63063a9fa51c | 8 | #include "SDFileSystem.h" |
cnckiwi31 | 5:63063a9fa51c | 9 | #include "constants.h" |
cnckiwi31 | 5:63063a9fa51c | 10 | |
megrootens | 0:3855d4588f76 | 11 | #include "as5048.h" |
megrootens | 0:3855d4588f76 | 12 | #include "lcm101.h" |
cnckiwi31 | 4:1cdce6c6c94e | 13 | #include "SPTEPressureSensor.h" |
cnckiwi31 | 5:63063a9fa51c | 14 | #include "Valve.h" |
surajgiri | 11:fc82dd22a527 | 15 | #include "LinearActuator.h" |
megrootens | 0:3855d4588f76 | 16 | |
megrootens | 0:3855d4588f76 | 17 | /** |
cnckiwi31 | 6:02507d7a6f51 | 18 | * Class to read out sensory information from the second test bench: |
cnckiwi31 | 6:02507d7a6f51 | 19 | * the knee joint angle as measured by an AMS AS5048 absolute rotary sensor |
cnckiwi31 | 6:02507d7a6f51 | 20 | * the vertical force applied externally at the hip joint |
cnckiwi31 | 6:02507d7a6f51 | 21 | * the pressure (for example of an actuator used in the device under test). |
cnckiwi31 | 6:02507d7a6f51 | 22 | * Additionally, an on /off valve can pressurise the actuator on the leg |
megrootens | 0:3855d4588f76 | 23 | */ |
megrootens | 0:3855d4588f76 | 24 | class Bench { |
megrootens | 0:3855d4588f76 | 25 | public: |
megrootens | 0:3855d4588f76 | 26 | |
megrootens | 0:3855d4588f76 | 27 | static const float kCutOffDegrees = 180.0f; |
megrootens | 0:3855d4588f76 | 28 | static const float kCutOffRadians = 3.14159265359f; |
megrootens | 0:3855d4588f76 | 29 | |
megrootens | 0:3855d4588f76 | 30 | enum Joint { |
megrootens | 0:3855d4588f76 | 31 | TOES, |
megrootens | 0:3855d4588f76 | 32 | ANKLE, |
megrootens | 0:3855d4588f76 | 33 | KNEE, |
megrootens | 0:3855d4588f76 | 34 | HIP |
megrootens | 0:3855d4588f76 | 35 | }; |
cnckiwi31 | 5:63063a9fa51c | 36 | |
cnckiwi31 | 10:77fcbad99a31 | 37 | enum DACChannel { |
cnckiwi31 | 10:77fcbad99a31 | 38 | A, |
cnckiwi31 | 10:77fcbad99a31 | 39 | B |
cnckiwi31 | 10:77fcbad99a31 | 40 | }; |
cnckiwi31 | 10:77fcbad99a31 | 41 | |
cnckiwi31 | 5:63063a9fa51c | 42 | // constructor |
cnckiwi31 | 5:63063a9fa51c | 43 | Bench(PinName mosi = AS5048_MOSI, PinName miso = AS5048_MISO, PinName sck = AS5048_SCLK, PinName cs = AS5048_CS, |
cnckiwi31 | 5:63063a9fa51c | 44 | bool use5kN = sensors::use5kN,PinName p_lcm101 = LCM101, |
surajgiri | 11:fc82dd22a527 | 45 | PinName p_spte0 = SPTE_0, PinName p_spte1 = SPTE_1,PinName p_valve = VALVE_PIN,PinName p_laDir = LINACT_DIR_PIN, PinName p_laPwm = LINACT_PWM_PIN, |
cnckiwi31 | 5:63063a9fa51c | 46 | PinName sd_mosi = SD_MOSI, PinName sd_miso = SD_MISO, PinName sd_sck = SD_SCK, PinName sd_cs = SD_CS, |
surajgiri | 11:fc82dd22a527 | 47 | PinName tx = USBTX, PinName rx = USBRX); |
megrootens | 0:3855d4588f76 | 48 | |
cnckiwi31 | 5:63063a9fa51c | 49 | |
cnckiwi31 | 5:63063a9fa51c | 50 | //setup |
cnckiwi31 | 5:63063a9fa51c | 51 | void initialise(); |
megrootens | 0:3855d4588f76 | 52 | |
cnckiwi31 | 5:63063a9fa51c | 53 | void setLoggingFrequency(float logHertz); |
cnckiwi31 | 5:63063a9fa51c | 54 | void setExtraColumns(string extraColumnNames[], int numCols); |
cnckiwi31 | 5:63063a9fa51c | 55 | void setExtraData(float data[]); |
cnckiwi31 | 5:63063a9fa51c | 56 | void update(); |
megrootens | 0:3855d4588f76 | 57 | |
cnckiwi31 | 5:63063a9fa51c | 58 | bool isLogging();//indicates if we are now datalogging |
cnckiwi31 | 5:63063a9fa51c | 59 | void stopLogging();//halts the data logging if we are now datalogging |
surajgiri | 11:fc82dd22a527 | 60 | void StopLogging(); //halts the data logging if we are now datalogging |
surajgiri | 11:fc82dd22a527 | 61 | void StartLogging(const char * fname_append = "data"); //starts datalogging |
surajgiri | 11:fc82dd22a527 | 62 | void RestartLogging(const char * fname_append = "data");//restart datalogging |
surajgiri | 11:fc82dd22a527 | 63 | void LogData(); |
cnckiwi31 | 5:63063a9fa51c | 64 | |
cnckiwi31 | 5:63063a9fa51c | 65 | //reading angle sensors |
cnckiwi31 | 5:63063a9fa51c | 66 | As5048* get_as5048(); |
cnckiwi31 | 5:63063a9fa51c | 67 | |
megrootens | 0:3855d4588f76 | 68 | float getDegrees(int i_joint); |
megrootens | 0:3855d4588f76 | 69 | float getDegrees(Joint joint); |
megrootens | 0:3855d4588f76 | 70 | |
megrootens | 0:3855d4588f76 | 71 | float getRadians(int i_joint); |
megrootens | 0:3855d4588f76 | 72 | float getRadians(Joint joint); |
megrootens | 0:3855d4588f76 | 73 | |
megrootens | 0:3855d4588f76 | 74 | const char* getJointName(int i_joint); |
megrootens | 0:3855d4588f76 | 75 | const char* getJointName(Joint joint); |
megrootens | 0:3855d4588f76 | 76 | |
cnckiwi31 | 5:63063a9fa51c | 77 | //reading and calibrating force and pressure sensors |
megrootens | 0:3855d4588f76 | 78 | float getForce(); |
cnckiwi31 | 4:1cdce6c6c94e | 79 | void nullForce(); |
cnckiwi31 | 4:1cdce6c6c94e | 80 | |
cnckiwi31 | 4:1cdce6c6c94e | 81 | float getPressure0(); |
cnckiwi31 | 4:1cdce6c6c94e | 82 | void nullPressure0(); |
cnckiwi31 | 4:1cdce6c6c94e | 83 | float getPressure1(); |
cnckiwi31 | 4:1cdce6c6c94e | 84 | void nullPressure1(); |
megrootens | 0:3855d4588f76 | 85 | |
cnckiwi31 | 10:77fcbad99a31 | 86 | //MAX5322 DACs (two channels per DAC) |
cnckiwi31 | 10:77fcbad99a31 | 87 | void setDACA(DACChannel ch, unsigned int bitValue); |
cnckiwi31 | 10:77fcbad99a31 | 88 | void setDACB(DACChannel ch, unsigned int bitValue); |
cnckiwi31 | 10:77fcbad99a31 | 89 | |
cnckiwi31 | 5:63063a9fa51c | 90 | //controlling valve |
cnckiwi31 | 5:63063a9fa51c | 91 | bool getValve(); |
cnckiwi31 | 5:63063a9fa51c | 92 | void setValve(bool pressurise); |
cnckiwi31 | 5:63063a9fa51c | 93 | |
surajgiri | 11:fc82dd22a527 | 94 | // controlling linear actuator |
surajgiri | 11:fc82dd22a527 | 95 | void setDir(bool dir); |
surajgiri | 11:fc82dd22a527 | 96 | bool getDir(); |
surajgiri | 11:fc82dd22a527 | 97 | void setPWM(int pwm); |
surajgiri | 11:fc82dd22a527 | 98 | |
cnckiwi31 | 8:bc467f5fe7c3 | 99 | /** Object for printing/receiving data to the PC the test rig is connected |
cnckiwi31 | 8:bc467f5fe7c3 | 100 | * to. Note that it uses the MODSERIAL.h class. |
cnckiwi31 | 8:bc467f5fe7c3 | 101 | */ |
cnckiwi31 | 5:63063a9fa51c | 102 | MODSERIAL pc; |
cnckiwi31 | 5:63063a9fa51c | 103 | |
cnckiwi31 | 5:63063a9fa51c | 104 | void pausePrint(); |
cnckiwi31 | 5:63063a9fa51c | 105 | void resumePrint(); |
cnckiwi31 | 5:63063a9fa51c | 106 | |
cnckiwi31 | 5:63063a9fa51c | 107 | private: |
cnckiwi31 | 5:63063a9fa51c | 108 | //timing |
cnckiwi31 | 5:63063a9fa51c | 109 | int loggingUS; //microseconds between recording data logging |
cnckiwi31 | 5:63063a9fa51c | 110 | float loggingHz;// Hz of data logging |
cnckiwi31 | 5:63063a9fa51c | 111 | |
cnckiwi31 | 5:63063a9fa51c | 112 | Ticker tick_update, tick_serial, tick_logging; //for the updating of sensor values, printing of serial data and logging of data |
cnckiwi31 | 5:63063a9fa51c | 113 | Timer timer; |
surajgiri | 11:fc82dd22a527 | 114 | Timer keyIntT;//timer to debounce keypresses |
surajgiri | 11:fc82dd22a527 | 115 | int keyIntOffset;//for setting initial value of keyIntT |
cnckiwi31 | 5:63063a9fa51c | 116 | int firstReadMS; //first timer value read |
cnckiwi31 | 5:63063a9fa51c | 117 | bool startedLogging; //in the middle of a logging cycle |
cnckiwi31 | 5:63063a9fa51c | 118 | |
cnckiwi31 | 5:63063a9fa51c | 119 | bool is_logging; |
cnckiwi31 | 5:63063a9fa51c | 120 | bool is_printing; |
cnckiwi31 | 5:63063a9fa51c | 121 | bool was_printing; //if printing is paused true if is_printing was true |
surajgiri | 11:fc82dd22a527 | 122 | char k; //value from keyboard |
surajgiri | 11:fc82dd22a527 | 123 | |
cnckiwi31 | 5:63063a9fa51c | 124 | //joint angle |
cnckiwi31 | 5:63063a9fa51c | 125 | As5048 as5048_; |
cnckiwi31 | 5:63063a9fa51c | 126 | |
cnckiwi31 | 5:63063a9fa51c | 127 | //load cells |
cnckiwi31 | 5:63063a9fa51c | 128 | Lcm101 loadCell5kN; |
cnckiwi31 | 5:63063a9fa51c | 129 | Lcm101 loadCell1kN; |
cnckiwi31 | 5:63063a9fa51c | 130 | bool use5kN;//determine which load cell is used |
cnckiwi31 | 5:63063a9fa51c | 131 | |
cnckiwi31 | 5:63063a9fa51c | 132 | //pressure sensors |
cnckiwi31 | 5:63063a9fa51c | 133 | SPTEPressureSensor spte0; |
cnckiwi31 | 5:63063a9fa51c | 134 | SPTEPressureSensor spte1; |
cnckiwi31 | 5:63063a9fa51c | 135 | |
cnckiwi31 | 5:63063a9fa51c | 136 | //valve |
cnckiwi31 | 5:63063a9fa51c | 137 | ValveDigital valveFesto; |
cnckiwi31 | 5:63063a9fa51c | 138 | |
surajgiri | 11:fc82dd22a527 | 139 | //linear actuator |
surajgiri | 11:fc82dd22a527 | 140 | LinearActuator LinAct; |
surajgiri | 11:fc82dd22a527 | 141 | |
cnckiwi31 | 5:63063a9fa51c | 142 | //SD card |
cnckiwi31 | 5:63063a9fa51c | 143 | SDFileSystem sd; |
cnckiwi31 | 5:63063a9fa51c | 144 | FILE * fp_data; |
cnckiwi31 | 5:63063a9fa51c | 145 | int fname_prepend;//file number |
cnckiwi31 | 5:63063a9fa51c | 146 | bool sd_card_present;//card detected |
cnckiwi31 | 5:63063a9fa51c | 147 | |
cnckiwi31 | 5:63063a9fa51c | 148 | static const int maxCols = 5; |
cnckiwi31 | 5:63063a9fa51c | 149 | int usedExtraCols; //number of extra columns useds |
cnckiwi31 | 5:63063a9fa51c | 150 | string extraColNames[maxCols];//names of extra columns (up to maxCols allowed with 15 characters) |
cnckiwi31 | 5:63063a9fa51c | 151 | float extraColValues[maxCols];//value held in extra columns for current time step |
cnckiwi31 | 5:63063a9fa51c | 152 | |
cnckiwi31 | 5:63063a9fa51c | 153 | void InitSdCard(); |
surajgiri | 11:fc82dd22a527 | 154 | |
surajgiri | 11:fc82dd22a527 | 155 | //for toggling logging or printing |
surajgiri | 11:fc82dd22a527 | 156 | void ToggleState(MODSERIAL_IRQ_INFO *q); |
surajgiri | 11:fc82dd22a527 | 157 | |
cnckiwi31 | 5:63063a9fa51c | 158 | void ToggleLogging(); |
cnckiwi31 | 5:63063a9fa51c | 159 | |
cnckiwi31 | 5:63063a9fa51c | 160 | // serial printing |
cnckiwi31 | 5:63063a9fa51c | 161 | void TogglePrinting(); |
cnckiwi31 | 5:63063a9fa51c | 162 | void PrintStatus(); |
cnckiwi31 | 5:63063a9fa51c | 163 | void PrintMenu(); |
cnckiwi31 | 5:63063a9fa51c | 164 | }; |
megrootens | 0:3855d4588f76 | 165 | #endif |