stmbl/shared/common.h

144 lines
2.7 KiB
C
Raw Permalink Normal View History

2015-07-20 20:48:18 +00:00
#pragma once
2015-10-10 21:39:08 +00:00
#include <stdint.h>
2015-07-20 20:48:18 +00:00
2016-01-09 22:45:27 +00:00
#if __GNUC__ < 5
#error gcc to old (< 5.0)
#endif
2017-03-24 21:30:17 +00:00
#define DATABAUD 3000000 //baudrate used for communication
2015-07-20 20:48:18 +00:00
2016-09-03 23:38:51 +00:00
//fixed point calculations signed bit, 9 bit predecimal, 6 bit decimal
2015-10-06 22:33:27 +00:00
#define TOFIXED(a) ((int16_t)((a) * 64))
#define TOFLOAT(a) ((float)((a) / 64.0))
2017-01-20 22:44:58 +00:00
#define PWM_RES 4800
2015-10-21 18:05:23 +00:00
2017-02-03 23:48:20 +00:00
#pragma pack(1)
2015-10-10 21:39:08 +00:00
typedef struct{
uint8_t start; // 255
uint8_t key;
2017-02-03 23:48:20 +00:00
uint16_t crc;
2015-10-10 21:39:08 +00:00
} packet_header_t;
2015-07-21 10:40:09 +00:00
//data from f1 to f4
#pragma pack(1)
2015-07-20 21:53:36 +00:00
typedef struct{
2017-01-20 22:44:58 +00:00
float d_fb;
float q_fb;
2017-01-19 00:38:53 +00:00
float dc_volt;
2017-01-21 02:23:06 +00:00
float pwm_volt;
2017-01-20 22:44:58 +00:00
float value;
uint8_t addr : 7;
uint8_t fault : 1;
2015-07-20 21:53:36 +00:00
} from_hv_t;
2015-07-21 10:40:09 +00:00
//data from f4 to f1
#pragma pack(1)
2015-07-20 21:53:36 +00:00
typedef struct{
2017-01-20 22:44:58 +00:00
float d_cmd;
float q_cmd;
2017-01-18 22:27:05 +00:00
float pos;
2017-01-21 02:23:06 +00:00
float vel;
2017-01-20 22:44:58 +00:00
float value;
uint8_t addr : 7;
2016-09-07 17:41:24 +00:00
uint8_t enable : 1;
2015-07-20 21:53:36 +00:00
} to_hv_t;
2015-07-20 20:48:18 +00:00
2017-01-20 22:44:58 +00:00
#pragma pack(1)
typedef union {
struct f3_config_data_temp{
float mode;
float r;
float l;
float psi;
float cur_p;
float cur_i;
float cur_ff;
float cur_ind;
float max_y;
2017-01-21 02:23:06 +00:00
float max_cur;
2017-01-20 22:44:58 +00:00
} pins;
float data[sizeof(struct f3_config_data_temp) / 4];
} f3_config_data_t;
#pragma pack(1)
typedef union {
struct f3_state_data_temp{
2017-01-21 02:23:06 +00:00
float u_fb;
float v_fb;
float w_fb;
2017-01-20 22:44:58 +00:00
float hv_temp;
float mot_temp;
float core_temp;
float fault;
float y;
} pins;
float data[sizeof(struct f3_state_data_temp) / 4];
} f3_state_data_t;
2016-09-07 17:47:31 +00:00
#pragma pack(1)
2015-10-10 21:39:08 +00:00
typedef struct{
packet_header_t head;
to_hv_t data;
} packet_to_hv_t;
2016-09-07 17:47:31 +00:00
#pragma pack(1)
2015-10-10 21:39:08 +00:00
typedef struct{
packet_header_t head;
from_hv_t data;
} packet_from_hv_t;
void buff_packet(packet_header_t* p, uint8_t size);
2017-02-03 23:48:20 +00:00
int unbuff_packet(packet_header_t* p, uint8_t size);
2015-10-10 21:39:08 +00:00
2015-07-21 10:40:09 +00:00
//check if structs can be send at 5kHz using DATABAUD
2016-09-07 17:41:24 +00:00
_Static_assert(sizeof(packet_to_hv_t) <= DATABAUD / 11 / 5000 - 1 - 5, "to_hv struct to large");
_Static_assert(sizeof(packet_from_hv_t) <= DATABAUD / 11 / 5000 - 1 - 5, "from_hv struct to large");
2015-07-20 22:37:43 +00:00
2015-07-20 20:48:18 +00:00
// struct f1tof4{
// int16 a;
// int16 b;
2015-07-20 20:48:18 +00:00
// int16 udc;
// int16 value;
// struct {
// bool enabled;
// bool temp_limit;
// bool current_limit;
// bool watchdog; // toggle
// int4 misc;
// }flags;
// int8 crc;
// };
//
// struct f4tof1{
// int16 a; // u/i
// int16 b; // u/i
// int16 value;
// int6 address;
// /*
// rw:
// r
// l
// max_i
// max_temp
// max_pwm
// phase_offset_uv
// phase_offset_vw
// svm_mode (centered, svm, bottom low)
// u/i cmd mode
// u/i fb mode
2015-07-20 20:48:18 +00:00
//
// r:
// temp0
// temp1
// temp2
// temp3
// hw version
// */
// bool enable;
// bool watchdog; // toggle in hal
// int8 crc;
2015-07-22 20:47:07 +00:00
// };