most functionality to splashdwon, find neutral and start mission. short timeouts still in code for testing, will adjust to go directly to sit_idle after splashdown

Dependencies:   mbed MODSERIAL FATFileSystem

Committer:
danstrider
Date:
Tue Oct 31 22:19:20 2017 +0000
Revision:
15:2a8cfd3f1cf5
Parent:
11:3b241ecb75ed
Child:
41:ed5b95ab97e3
POOL TESTED!  Tuned PID gains, put in depth/pitch files.  Added keyboard tuning of neutral positions since FIND_NEUTRAL won't work right.  Only suggested FSM change is for DIVE to timeout to RISE, rather than EMERGENCY_CLIMB.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
danstrider 10:085ab7328054 1 #ifndef LINEARACTUATOR_HPP
danstrider 10:085ab7328054 2 #define LINEARACTUATOR_HPP
mkelly10 9:d5fcdcb3c89d 3
mkelly10 9:d5fcdcb3c89d 4 #include "mbed.h"
mkelly10 9:d5fcdcb3c89d 5 #include "PololuHbridge.hpp"
danstrider 10:085ab7328054 6 #include "PidController.hpp"
mkelly10 9:d5fcdcb3c89d 7 #include "ltc1298.hpp"
mkelly10 9:d5fcdcb3c89d 8 #include "PosVelFilter.hpp"
mkelly10 9:d5fcdcb3c89d 9
mkelly10 9:d5fcdcb3c89d 10 //Dependencies
mkelly10 9:d5fcdcb3c89d 11 //This Class requires adc readings to sense the position of the piston
mkelly10 9:d5fcdcb3c89d 12 //This is a resource that ends up being shared among other classes in the vehicle
mkelly10 9:d5fcdcb3c89d 13 //for this reason it makes sense for it to be its own entity that is started in
mkelly10 9:d5fcdcb3c89d 14 //the main line code
mkelly10 9:d5fcdcb3c89d 15
danstrider 10:085ab7328054 16 class LinearActuator {
mkelly10 9:d5fcdcb3c89d 17 public:
mkelly10 9:d5fcdcb3c89d 18 LinearActuator(float interval, PinName pwm, PinName dir, PinName reset, PinName limit, int adc_ch);
mkelly10 9:d5fcdcb3c89d 19
mkelly10 9:d5fcdcb3c89d 20 // functions for setting up
mkelly10 9:d5fcdcb3c89d 21 void init();
mkelly10 9:d5fcdcb3c89d 22 void update();
mkelly10 9:d5fcdcb3c89d 23 void start();
mkelly10 9:d5fcdcb3c89d 24 void stop();
mkelly10 9:d5fcdcb3c89d 25 void pause();
mkelly10 9:d5fcdcb3c89d 26 void unpause();
mkelly10 9:d5fcdcb3c89d 27
mkelly10 9:d5fcdcb3c89d 28 void refreshPVState();
mkelly10 9:d5fcdcb3c89d 29
mkelly10 9:d5fcdcb3c89d 30 // setting and getting variables
mkelly10 9:d5fcdcb3c89d 31 void setPosition_mm(float dist);
danstrider 11:3b241ecb75ed 32 float getSetPosition_mm();
danstrider 11:3b241ecb75ed 33
mkelly10 9:d5fcdcb3c89d 34 float getPosition_mm();
danstrider 11:3b241ecb75ed 35 float getPosition_counts();
mkelly10 9:d5fcdcb3c89d 36 float getVelocity_mms();
mkelly10 9:d5fcdcb3c89d 37
mkelly10 9:d5fcdcb3c89d 38 void setControllerP(float P);
mkelly10 9:d5fcdcb3c89d 39 float getControllerP();
mkelly10 9:d5fcdcb3c89d 40
mkelly10 9:d5fcdcb3c89d 41 void setControllerI(float I);
mkelly10 9:d5fcdcb3c89d 42 float getControllerI();
mkelly10 9:d5fcdcb3c89d 43
mkelly10 9:d5fcdcb3c89d 44 void setControllerD(float D);
mkelly10 9:d5fcdcb3c89d 45 float getControllerD();
mkelly10 9:d5fcdcb3c89d 46
mkelly10 9:d5fcdcb3c89d 47 void setZeroCounts(int zero);
mkelly10 9:d5fcdcb3c89d 48 int getZeroCounts();
mkelly10 9:d5fcdcb3c89d 49
mkelly10 9:d5fcdcb3c89d 50 void setTravelLimit(float limit);
mkelly10 9:d5fcdcb3c89d 51 float getTravelLimit();
mkelly10 9:d5fcdcb3c89d 52
mkelly10 9:d5fcdcb3c89d 53 void setPotSlope(float slope);
mkelly10 9:d5fcdcb3c89d 54 float getPotSlope();
mkelly10 9:d5fcdcb3c89d 55
mkelly10 9:d5fcdcb3c89d 56 void homePiston();
danstrider 10:085ab7328054 57 bool getSwitch();
mkelly10 9:d5fcdcb3c89d 58
mkelly10 9:d5fcdcb3c89d 59 float getOutput();
mkelly10 9:d5fcdcb3c89d 60
danstrider 10:085ab7328054 61 void setFilterFrequency(float frequency);
mkelly10 9:d5fcdcb3c89d 62
mkelly10 9:d5fcdcb3c89d 63 void setDeadband(float deadband);
danstrider 11:3b241ecb75ed 64 float getDeadband();
mkelly10 9:d5fcdcb3c89d 65 bool toggleDeadband(bool toggle);
mkelly10 9:d5fcdcb3c89d 66
mkelly10 9:d5fcdcb3c89d 67 protected:
mkelly10 9:d5fcdcb3c89d 68 PololuHBridge _motor;
mkelly10 9:d5fcdcb3c89d 69 PosVelFilter _filter;
mkelly10 9:d5fcdcb3c89d 70 PIDController _pid;
mkelly10 9:d5fcdcb3c89d 71 Ticker _pulse;
mkelly10 9:d5fcdcb3c89d 72 InterruptIn _limitSwitch;
mkelly10 9:d5fcdcb3c89d 73
mkelly10 9:d5fcdcb3c89d 74 void _switchPressed();
mkelly10 9:d5fcdcb3c89d 75 void _switchReleased();
mkelly10 9:d5fcdcb3c89d 76 void _calculateSensorSlope();
mkelly10 9:d5fcdcb3c89d 77
mkelly10 9:d5fcdcb3c89d 78 bool _init;
mkelly10 9:d5fcdcb3c89d 79 bool _paused;
mkelly10 9:d5fcdcb3c89d 80 bool _limit;
mkelly10 9:d5fcdcb3c89d 81
mkelly10 9:d5fcdcb3c89d 82 int _adc_channel;
mkelly10 9:d5fcdcb3c89d 83
mkelly10 9:d5fcdcb3c89d 84 float _filterFrequency;
mkelly10 9:d5fcdcb3c89d 85
mkelly10 9:d5fcdcb3c89d 86 float _dt;
mkelly10 9:d5fcdcb3c89d 87
mkelly10 9:d5fcdcb3c89d 88 float _SetPoint_mm;
mkelly10 9:d5fcdcb3c89d 89
danstrider 10:085ab7328054 90 // position and velocity in counts (PVF runs on counts)
mkelly10 9:d5fcdcb3c89d 91 float _position;
danstrider 10:085ab7328054 92 float _velocity;
danstrider 10:085ab7328054 93
danstrider 10:085ab7328054 94 // position and velocity converted to mm and mm/s
mkelly10 9:d5fcdcb3c89d 95 float _position_mm;
mkelly10 9:d5fcdcb3c89d 96 float _velocity_mms;
mkelly10 9:d5fcdcb3c89d 97
danstrider 10:085ab7328054 98 // linear actuator servo PID gains
mkelly10 9:d5fcdcb3c89d 99 float _Pgain;
mkelly10 9:d5fcdcb3c89d 100 float _Igain;
mkelly10 9:d5fcdcb3c89d 101 float _Dgain;
mkelly10 9:d5fcdcb3c89d 102
mkelly10 9:d5fcdcb3c89d 103 float _deadband;
mkelly10 9:d5fcdcb3c89d 104
mkelly10 9:d5fcdcb3c89d 105 int _zeroCounts; //gets assigned by homing function. can also be stored in config
mkelly10 9:d5fcdcb3c89d 106 float _extendLimit; //config variable, limits the extension of the piston, this is same as datum for normal operation,
mkelly10 9:d5fcdcb3c89d 107
mkelly10 9:d5fcdcb3c89d 108 float _slope;
mkelly10 9:d5fcdcb3c89d 109 int dist_to_counts(float dist);
mkelly10 9:d5fcdcb3c89d 110 float counts_to_dist(int count);
mkelly10 9:d5fcdcb3c89d 111 float counts_to_velocity(int count);
mkelly10 9:d5fcdcb3c89d 112 };
danstrider 10:085ab7328054 113
danstrider 10:085ab7328054 114
danstrider 10:085ab7328054 115 template <typename T>
danstrider 10:085ab7328054 116 T clamp(T value, T min, T max)
danstrider 10:085ab7328054 117 {
danstrider 10:085ab7328054 118 if(value < min) {
danstrider 10:085ab7328054 119 return min;
danstrider 10:085ab7328054 120 } else if(value > max) {
danstrider 10:085ab7328054 121 return max;
danstrider 10:085ab7328054 122 } else {
danstrider 10:085ab7328054 123 return value;
danstrider 10:085ab7328054 124 }
danstrider 10:085ab7328054 125 };
danstrider 10:085ab7328054 126
mkelly10 9:d5fcdcb3c89d 127 #endif