Version 3 is with update to the test rig with a linear actuator

Dependencies:   SPTE_10Bar_5V mbed AS5048 SDFileSystem MODSERIAL PinDetect LCM101 LinearActuator

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?

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