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@5:63063a9fa51c, 2019-12-09 (annotated)
- Committer:
- cnckiwi31
- Date:
- Mon Dec 09 10:51:46 2019 +0000
- Revision:
- 5:63063a9fa51c
- Parent:
- 4:1cdce6c6c94e
- Child:
- 6:02507d7a6f51
Ready to run on test rig
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" |
cnckiwi31 | 5:63063a9fa51c | 15 | |
cnckiwi31 | 5:63063a9fa51c | 16 | #include "PinDetect.h" |
megrootens | 0:3855d4588f76 | 17 | |
megrootens | 0:3855d4588f76 | 18 | /** |
megrootens | 0:3855d4588f76 | 19 | * Class to read out sensory information from the second test bench; |
cnckiwi31 | 5:63063a9fa51c | 20 | * the knee joint setup with 1-dof hinge, |
megrootens | 0:3855d4588f76 | 21 | * each of which is equipped with an AMS AS5048 absolute rotary sensor. |
megrootens | 0:3855d4588f76 | 22 | * The sensors are daisy chained and communicate via SPI |
cnckiwi31 | 4:1cdce6c6c94e | 23 | * also includes a load cell measuring the vertical force applied externally to |
cnckiwi31 | 4:1cdce6c6c94e | 24 | * the hip and pressure sensors connected to the setup |
cnckiwi31 | 5:63063a9fa51c | 25 | * An on /off valve can pressurise the actuator on the leg |
megrootens | 0:3855d4588f76 | 26 | */ |
megrootens | 0:3855d4588f76 | 27 | class Bench { |
megrootens | 0:3855d4588f76 | 28 | public: |
megrootens | 0:3855d4588f76 | 29 | |
megrootens | 0:3855d4588f76 | 30 | static const float kCutOffDegrees = 180.0f; |
megrootens | 0:3855d4588f76 | 31 | static const float kCutOffRadians = 3.14159265359f; |
megrootens | 0:3855d4588f76 | 32 | |
megrootens | 0:3855d4588f76 | 33 | enum Joint { |
megrootens | 0:3855d4588f76 | 34 | TOES, |
megrootens | 0:3855d4588f76 | 35 | ANKLE, |
megrootens | 0:3855d4588f76 | 36 | KNEE, |
megrootens | 0:3855d4588f76 | 37 | HIP |
megrootens | 0:3855d4588f76 | 38 | }; |
cnckiwi31 | 5:63063a9fa51c | 39 | |
cnckiwi31 | 5:63063a9fa51c | 40 | // constructor |
cnckiwi31 | 5:63063a9fa51c | 41 | Bench(PinName mosi = AS5048_MOSI, PinName miso = AS5048_MISO, PinName sck = AS5048_SCLK, PinName cs = AS5048_CS, |
cnckiwi31 | 5:63063a9fa51c | 42 | bool use5kN = sensors::use5kN,PinName p_lcm101 = LCM101, |
cnckiwi31 | 5:63063a9fa51c | 43 | PinName p_spte0 = SPTE_0, PinName p_spte1 = SPTE_1,PinName p_valve = VALVE_PIN, |
cnckiwi31 | 5:63063a9fa51c | 44 | PinName sd_mosi = SD_MOSI, PinName sd_miso = SD_MISO, PinName sd_sck = SD_SCK, PinName sd_cs = SD_CS, |
cnckiwi31 | 5:63063a9fa51c | 45 | PinName tx = USBTX, PinName rx = USBRX, PinName but0 = SW2, PinName but1 = SW3); |
megrootens | 0:3855d4588f76 | 46 | |
cnckiwi31 | 5:63063a9fa51c | 47 | |
cnckiwi31 | 5:63063a9fa51c | 48 | //setup |
cnckiwi31 | 5:63063a9fa51c | 49 | void initialise(); |
megrootens | 0:3855d4588f76 | 50 | |
cnckiwi31 | 5:63063a9fa51c | 51 | void setLoggingFrequency(float logHertz); |
cnckiwi31 | 5:63063a9fa51c | 52 | void setExtraColumns(string extraColumnNames[], int numCols); |
cnckiwi31 | 5:63063a9fa51c | 53 | void setExtraData(float data[]); |
cnckiwi31 | 5:63063a9fa51c | 54 | void update(); |
megrootens | 0:3855d4588f76 | 55 | |
cnckiwi31 | 5:63063a9fa51c | 56 | bool isLogging();//indicates if we are now datalogging |
cnckiwi31 | 5:63063a9fa51c | 57 | void stopLogging();//halts the data logging if we are now datalogging |
cnckiwi31 | 5:63063a9fa51c | 58 | |
cnckiwi31 | 5:63063a9fa51c | 59 | //reading angle sensors |
cnckiwi31 | 5:63063a9fa51c | 60 | As5048* get_as5048(); |
cnckiwi31 | 5:63063a9fa51c | 61 | |
megrootens | 0:3855d4588f76 | 62 | float getDegrees(int i_joint); |
megrootens | 0:3855d4588f76 | 63 | float getDegrees(Joint joint); |
megrootens | 0:3855d4588f76 | 64 | |
megrootens | 0:3855d4588f76 | 65 | float getRadians(int i_joint); |
megrootens | 0:3855d4588f76 | 66 | float getRadians(Joint joint); |
megrootens | 0:3855d4588f76 | 67 | |
megrootens | 0:3855d4588f76 | 68 | const char* getJointName(int i_joint); |
megrootens | 0:3855d4588f76 | 69 | const char* getJointName(Joint joint); |
megrootens | 0:3855d4588f76 | 70 | |
cnckiwi31 | 5:63063a9fa51c | 71 | //reading and calibrating force and pressure sensors |
megrootens | 0:3855d4588f76 | 72 | float getForce(); |
cnckiwi31 | 4:1cdce6c6c94e | 73 | void nullForce(); |
cnckiwi31 | 4:1cdce6c6c94e | 74 | |
cnckiwi31 | 4:1cdce6c6c94e | 75 | float getPressure0(); |
cnckiwi31 | 4:1cdce6c6c94e | 76 | void nullPressure0(); |
cnckiwi31 | 4:1cdce6c6c94e | 77 | float getPressure1(); |
cnckiwi31 | 4:1cdce6c6c94e | 78 | void nullPressure1(); |
megrootens | 0:3855d4588f76 | 79 | |
cnckiwi31 | 5:63063a9fa51c | 80 | //controlling valve |
cnckiwi31 | 5:63063a9fa51c | 81 | bool getValve(); |
cnckiwi31 | 5:63063a9fa51c | 82 | void setValve(bool pressurise); |
cnckiwi31 | 5:63063a9fa51c | 83 | |
cnckiwi31 | 5:63063a9fa51c | 84 | //printing data |
cnckiwi31 | 5:63063a9fa51c | 85 | MODSERIAL pc; |
cnckiwi31 | 5:63063a9fa51c | 86 | |
cnckiwi31 | 5:63063a9fa51c | 87 | void pausePrint(); |
cnckiwi31 | 5:63063a9fa51c | 88 | void resumePrint(); |
cnckiwi31 | 5:63063a9fa51c | 89 | |
cnckiwi31 | 5:63063a9fa51c | 90 | private: |
cnckiwi31 | 5:63063a9fa51c | 91 | //timing |
cnckiwi31 | 5:63063a9fa51c | 92 | int loggingUS; //microseconds between recording data logging |
cnckiwi31 | 5:63063a9fa51c | 93 | float loggingHz;// Hz of data logging |
cnckiwi31 | 5:63063a9fa51c | 94 | |
cnckiwi31 | 5:63063a9fa51c | 95 | Ticker tick_update, tick_serial, tick_logging; //for the updating of sensor values, printing of serial data and logging of data |
cnckiwi31 | 5:63063a9fa51c | 96 | Timer timer; |
cnckiwi31 | 5:63063a9fa51c | 97 | int firstReadMS; //first timer value read |
cnckiwi31 | 5:63063a9fa51c | 98 | bool startedLogging; //in the middle of a logging cycle |
cnckiwi31 | 5:63063a9fa51c | 99 | |
cnckiwi31 | 5:63063a9fa51c | 100 | bool is_logging; |
cnckiwi31 | 5:63063a9fa51c | 101 | bool is_printing; |
cnckiwi31 | 5:63063a9fa51c | 102 | bool was_printing; //if printing is paused true if is_printing was true |
cnckiwi31 | 5:63063a9fa51c | 103 | |
cnckiwi31 | 5:63063a9fa51c | 104 | //buttons |
cnckiwi31 | 5:63063a9fa51c | 105 | PinDetect lowerBut; |
cnckiwi31 | 5:63063a9fa51c | 106 | PinDetect upperBut; |
cnckiwi31 | 5:63063a9fa51c | 107 | |
cnckiwi31 | 5:63063a9fa51c | 108 | //joint angle |
cnckiwi31 | 5:63063a9fa51c | 109 | As5048 as5048_; |
cnckiwi31 | 5:63063a9fa51c | 110 | |
cnckiwi31 | 5:63063a9fa51c | 111 | //load cells |
cnckiwi31 | 5:63063a9fa51c | 112 | Lcm101 loadCell5kN; |
cnckiwi31 | 5:63063a9fa51c | 113 | Lcm101 loadCell1kN; |
cnckiwi31 | 5:63063a9fa51c | 114 | bool use5kN;//determine which load cell is used |
cnckiwi31 | 5:63063a9fa51c | 115 | |
cnckiwi31 | 5:63063a9fa51c | 116 | //pressure sensors |
cnckiwi31 | 5:63063a9fa51c | 117 | SPTEPressureSensor spte0; |
cnckiwi31 | 5:63063a9fa51c | 118 | SPTEPressureSensor spte1; |
cnckiwi31 | 5:63063a9fa51c | 119 | |
cnckiwi31 | 5:63063a9fa51c | 120 | //valve |
cnckiwi31 | 5:63063a9fa51c | 121 | ValveDigital valveFesto; |
cnckiwi31 | 5:63063a9fa51c | 122 | |
cnckiwi31 | 5:63063a9fa51c | 123 | //SD card |
cnckiwi31 | 5:63063a9fa51c | 124 | SDFileSystem sd; |
cnckiwi31 | 5:63063a9fa51c | 125 | FILE * fp_data; |
cnckiwi31 | 5:63063a9fa51c | 126 | int fname_prepend;//file number |
cnckiwi31 | 5:63063a9fa51c | 127 | bool sd_card_present;//card detected |
cnckiwi31 | 5:63063a9fa51c | 128 | |
cnckiwi31 | 5:63063a9fa51c | 129 | static const int maxCols = 5; |
cnckiwi31 | 5:63063a9fa51c | 130 | int usedExtraCols; //number of extra columns useds |
cnckiwi31 | 5:63063a9fa51c | 131 | string extraColNames[maxCols];//names of extra columns (up to maxCols allowed with 15 characters) |
cnckiwi31 | 5:63063a9fa51c | 132 | float extraColValues[maxCols];//value held in extra columns for current time step |
cnckiwi31 | 5:63063a9fa51c | 133 | |
cnckiwi31 | 5:63063a9fa51c | 134 | void InitSdCard(); |
cnckiwi31 | 5:63063a9fa51c | 135 | void StartLogging(const char * fname_append = "data"); |
cnckiwi31 | 5:63063a9fa51c | 136 | void StopLogging(); |
cnckiwi31 | 5:63063a9fa51c | 137 | void LogData(); |
cnckiwi31 | 5:63063a9fa51c | 138 | void ToggleLogging(); |
cnckiwi31 | 5:63063a9fa51c | 139 | |
cnckiwi31 | 5:63063a9fa51c | 140 | // serial printing |
cnckiwi31 | 5:63063a9fa51c | 141 | void TogglePrinting(); |
cnckiwi31 | 5:63063a9fa51c | 142 | void PrintStatus(); |
cnckiwi31 | 5:63063a9fa51c | 143 | void PrintMenu(); |
cnckiwi31 | 5:63063a9fa51c | 144 | }; |
megrootens | 0:3855d4588f76 | 145 | |
megrootens | 0:3855d4588f76 | 146 | |
megrootens | 0:3855d4588f76 | 147 | |
megrootens | 0:3855d4588f76 | 148 | #endif |