ti bisogna il phaserunner

Dependencies:   mbed PID mbed-rtos

Committer:
EpicG10
Date:
Sat Apr 20 10:01:22 2019 +0000
Revision:
0:8a660654d511
Child:
6:a80300ee574d
Da Testare

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EpicG10 0:8a660654d511 1 /**
EpicG10 0:8a660654d511 2 * Handelt die Kommunikation (Lesen und Schreiben) mit den Phaserunnern
EpicG10 0:8a660654d511 3 */
EpicG10 0:8a660654d511 4
EpicG10 0:8a660654d511 5 #ifndef PHASERUNNER_H
EpicG10 0:8a660654d511 6 #define PHASERUNNER_H
EpicG10 0:8a660654d511 7
EpicG10 0:8a660654d511 8 #include "mbed.h"
EpicG10 0:8a660654d511 9 #include "rtos.h"
EpicG10 0:8a660654d511 10
EpicG10 0:8a660654d511 11 class Phaserunner {
EpicG10 0:8a660654d511 12 private:
EpicG10 0:8a660654d511 13 //Private constants
EpicG10 0:8a660654d511 14 static const uint8_t BUFLEN = 255;
EpicG10 0:8a660654d511 15
EpicG10 0:8a660654d511 16 //Adressen
EpicG10 0:8a660654d511 17 static const unsigned short REMOTE_THROTTLE_VOLTAGE = 495;
EpicG10 0:8a660654d511 18 static const unsigned short REMOTE_ANALOG_BREAK_VOLTAGE = 497;
EpicG10 0:8a660654d511 19 static const unsigned short MOTOR_CURRENT = 262;
EpicG10 0:8a660654d511 20 static const unsigned short LAST_FAULT = 269;
EpicG10 0:8a660654d511 21
EpicG10 0:8a660654d511 22 //Modbus-Protokoll
EpicG10 0:8a660654d511 23 static const uint8_t SCHREIBANTWORT = 0x10;
EpicG10 0:8a660654d511 24 static const uint8_t LESEANTWORT = 0x03;
EpicG10 0:8a660654d511 25
EpicG10 0:8a660654d511 26
EpicG10 0:8a660654d511 27 //Sonstiges
EpicG10 0:8a660654d511 28 static const uint16_t WRITE_PERIOD = 3; //Minimaler Zeitintervall zwischen zwei Messages an den Phaserunner [ms]
EpicG10 0:8a660654d511 29 static const float TICKER_PERIOD = 0.02f; //Zeitintervall für das Schreiben auf den Phaserunner [s]
EpicG10 0:8a660654d511 30
EpicG10 0:8a660654d511 31 //Thread thread; //Wird für die Funktion writeToPhaserunner() gebraucht
EpicG10 0:8a660654d511 32 Ticker ticker;
EpicG10 0:8a660654d511 33
EpicG10 0:8a660654d511 34 //Verbindung zum Phaserunner
EpicG10 0:8a660654d511 35 RawSerial& connection;
EpicG10 0:8a660654d511 36
EpicG10 0:8a660654d511 37 //Buffer in das gelesen wird.
EpicG10 0:8a660654d511 38 uint8_t writeBuffer[BUFLEN];
EpicG10 0:8a660654d511 39
EpicG10 0:8a660654d511 40 //Buffer aus dem geschrieben wird.
EpicG10 0:8a660654d511 41 uint8_t read_buffer[BUFLEN];
EpicG10 0:8a660654d511 42
EpicG10 0:8a660654d511 43 //State valiables
EpicG10 0:8a660654d511 44 float frequency;
EpicG10 0:8a660654d511 45 float voltage;
EpicG10 0:8a660654d511 46 float current;
EpicG10 0:8a660654d511 47 uint16_t error;
EpicG10 0:8a660654d511 48 uint16_t newTorque;
EpicG10 0:8a660654d511 49 uint16_t newRecuperation;
EpicG10 0:8a660654d511 50
EpicG10 0:8a660654d511 51 /**
EpicG10 0:8a660654d511 52 * Wartet auf ein Byte. Wenn ein Datenstring gelesen wird, werden die Daten mithilfe einer Zustandsmaschine abgespeichert.
EpicG10 0:8a660654d511 53 */
EpicG10 0:8a660654d511 54 void Rx_interrupt();
EpicG10 0:8a660654d511 55
EpicG10 0:8a660654d511 56 /**
EpicG10 0:8a660654d511 57 * @brief Bereitet buf darauf vor, versendet zu werden.
EpicG10 0:8a660654d511 58 * @param buf: Byte-Array
EpicG10 0:8a660654d511 59 * @param addr: Adresse des Registers, das beschrieben wird
EpicG10 0:8a660654d511 60 * @param value: Wert der in das Register geschrieben wird
EpicG10 0:8a660654d511 61 */
EpicG10 0:8a660654d511 62 static int WriteRegister(uint8_t* buf, unsigned short addr, unsigned short value);
EpicG10 0:8a660654d511 63
EpicG10 0:8a660654d511 64 /**
EpicG10 0:8a660654d511 65 * @brief Sendet einen Schreibbefehl auf einen Phaserunner
EpicG10 0:8a660654d511 66 * @param writeBuf: Byte-Array in das geschrieben wird.
EpicG10 0:8a660654d511 67 * @param registerAddress: Adresse des Registers aus dem gelesen wird.
EpicG10 0:8a660654d511 68 */
EpicG10 0:8a660654d511 69 static int readRegister(uint8_t *buf, uint16_t registerAddress);
EpicG10 0:8a660654d511 70
EpicG10 0:8a660654d511 71 /**
EpicG10 0:8a660654d511 72 * @brief Sendet ein Byte-Array zum Phaserunner
EpicG10 0:8a660654d511 73 * @param adress: Adresse des Zielregisters
EpicG10 0:8a660654d511 74 * @param value: Wert der in das Register geschriebern werden soll.
EpicG10 0:8a660654d511 75 * @return Anzahl gesendeter Bytes
EpicG10 0:8a660654d511 76 */
EpicG10 0:8a660654d511 77 int sendBuffer(unsigned short adress, unsigned short value);
EpicG10 0:8a660654d511 78
EpicG10 0:8a660654d511 79 /**
EpicG10 0:8a660654d511 80 * @brief Sendet den writeBuffer
EpicG10 0:8a660654d511 81 * @param: Länge des zu sendenden Arrays
EpicG10 0:8a660654d511 82 * @return: Anzahl gesendeter Bytes
EpicG10 0:8a660654d511 83 */
EpicG10 0:8a660654d511 84 int sendBuffer(int length);
EpicG10 0:8a660654d511 85
EpicG10 0:8a660654d511 86 /**
EpicG10 0:8a660654d511 87 * @brief: Liest ein Register aus.
EpicG10 0:8a660654d511 88 * @param adress: Adresse des Registers aus dem gelesen werden soll.
EpicG10 0:8a660654d511 89 * @return: Anzahl gelesener Bytes
EpicG10 0:8a660654d511 90 */
EpicG10 0:8a660654d511 91 int readBuffer(uint16_t adress);
EpicG10 0:8a660654d511 92
EpicG10 0:8a660654d511 93 /**
EpicG10 0:8a660654d511 94 * @brief: Schreibt ein Drehmoment auf den Phaserunner.
EpicG10 0:8a660654d511 95 * @param: torque Drehmoment in percent
EpicG10 0:8a660654d511 96 */
EpicG10 0:8a660654d511 97 void writeTorque(uint8_t torque);
EpicG10 0:8a660654d511 98
EpicG10 0:8a660654d511 99 /**
EpicG10 0:8a660654d511 100 * @brief: Schreibt den Rekuperationswert auf den Phaserunner.
EpicG10 0:8a660654d511 101 * @param: recuperation Rekupertation in Prozent
EpicG10 0:8a660654d511 102 */
EpicG10 0:8a660654d511 103 void writeRecuperation(uint8_t recuperation);
EpicG10 0:8a660654d511 104
EpicG10 0:8a660654d511 105 /**
EpicG10 0:8a660654d511 106 * @brief: Prüfziffer berechnen
EpicG10 0:8a660654d511 107 * @param: msgByte Byte-Array
EpicG10 0:8a660654d511 108 * @param: length length of Byte-Array
EpicG10 0:8a660654d511 109 */
EpicG10 0:8a660654d511 110 static uint16_t getCRC(uint8_t* msgByte, uint8_t length);
EpicG10 0:8a660654d511 111
EpicG10 0:8a660654d511 112 /**
EpicG10 0:8a660654d511 113 * @brief: Sendet kontinuierlich einen Lesebefehl auf den Phaserunner.
EpicG10 0:8a660654d511 114 */
EpicG10 0:8a660654d511 115 void writeToPhaserunner();
EpicG10 0:8a660654d511 116
EpicG10 0:8a660654d511 117 /**
EpicG10 0:8a660654d511 118 * @brief: Sendet einen Schreibbefehl für die Drehgewschwindigkeit, die Stromstärke und die Spannung
EpicG10 0:8a660654d511 119 */
EpicG10 0:8a660654d511 120 void readRPM();
EpicG10 0:8a660654d511 121
EpicG10 0:8a660654d511 122 /**
EpicG10 0:8a660654d511 123 * @brief: Liest das Fehlerregister aus
EpicG10 0:8a660654d511 124 * @return Byte
EpicG10 0:8a660654d511 125 */
EpicG10 0:8a660654d511 126 uint16_t readFaults();
EpicG10 0:8a660654d511 127
EpicG10 0:8a660654d511 128 public:
EpicG10 0:8a660654d511 129 static const uint8_t MAX_TORQUE_GAIN = 2; //Maximaler Sprung für Drehmoment
EpicG10 0:8a660654d511 130 static const uint8_t MIN_RECUPERATION = 10; //Schwellwert für die Aktivierung des Daumengriffbetätigers
EpicG10 0:8a660654d511 131 static const uint8_t MIN_HANDGRIFF = 5; //Schwellwert für die Aktivierung des Handgriffbetätigers
EpicG10 0:8a660654d511 132
EpicG10 0:8a660654d511 133 /**
EpicG10 0:8a660654d511 134 * @brief Initialisiert ein Phaserunner-Objekt
EpicG10 0:8a660654d511 135 * @param connection: Serielle Schnittstelle zum Phaserunner
EpicG10 0:8a660654d511 136 */
EpicG10 0:8a660654d511 137 Phaserunner(RawSerial& connection);
EpicG10 0:8a660654d511 138
EpicG10 0:8a660654d511 139 /**
EpicG10 0:8a660654d511 140 * @brief: Schreibt ein Drehmoment ins Phaserunnerobjekt, das dann geschrieben wird.
EpicG10 0:8a660654d511 141 * @param: torque Drehmoment in Prozent
EpicG10 0:8a660654d511 142 */
EpicG10 0:8a660654d511 143 void setTorque(uint8_t torque);
EpicG10 0:8a660654d511 144
EpicG10 0:8a660654d511 145 /**
EpicG10 0:8a660654d511 146 * @brief: Schreibt einen Rekuperationswert ins Phaserunnerobjekt, dass dann geschrieben wird.
EpicG10 0:8a660654d511 147 * @param: recuperation Rekuperationswert in Prozent
EpicG10 0:8a660654d511 148 */
EpicG10 0:8a660654d511 149 void setRecuperation(uint8_t recuperation);
EpicG10 0:8a660654d511 150
EpicG10 0:8a660654d511 151 /**
EpicG10 0:8a660654d511 152 * @return frequenz
EpicG10 0:8a660654d511 153 */
EpicG10 0:8a660654d511 154 float getFrequency();
EpicG10 0:8a660654d511 155
EpicG10 0:8a660654d511 156 /**
EpicG10 0:8a660654d511 157 * @return strohm
EpicG10 0:8a660654d511 158 */
EpicG10 0:8a660654d511 159 float getCurrent();
EpicG10 0:8a660654d511 160
EpicG10 0:8a660654d511 161 /**
EpicG10 0:8a660654d511 162 * @return spannung
EpicG10 0:8a660654d511 163 */
EpicG10 0:8a660654d511 164 float getVoltage();
EpicG10 0:8a660654d511 165
EpicG10 0:8a660654d511 166 //Delete
EpicG10 0:8a660654d511 167 uint8_t badBuf[256];
EpicG10 0:8a660654d511 168 uint8_t bufPointer;
EpicG10 0:8a660654d511 169 uint8_t read;
EpicG10 0:8a660654d511 170 DigitalOut led;
EpicG10 0:8a660654d511 171
EpicG10 0:8a660654d511 172 uint16_t getRecup();
EpicG10 0:8a660654d511 173 };
EpicG10 0:8a660654d511 174
EpicG10 0:8a660654d511 175 #endif