ti bisogna il phaserunner

Dependencies:   mbed PID mbed-rtos

Committer:
EpicG10
Date:
Thu May 16 20:42:39 2019 +0000
Revision:
7:15e6fc689368
Parent:
Phaserunner.h@6:a80300ee574d
Child:
9:56aed8c6779f
Implementation Regler (not finished)

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