mirror of
https://github.com/rene-dev/stmbl.git
synced 2026-02-06 02:02:34 +08:00
compiler warnings, TODOs, cleanup, fix fault dc links, hal pin arrays
This commit is contained in:
@@ -36,6 +36,7 @@ extern "C" {
|
||||
#define RAD(a) ((a) * 180.0 / M_PI)
|
||||
#define SIGN(a) (((a) < 0.0) ? (-1.0) : (((a) > 0.0) ? (1.0) : (0.0)))
|
||||
#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
|
||||
#define SCALE(value, high, max) MIN(MAX(((max) - (value)) / ((max) - (high)), 0.0), 1.0)
|
||||
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
|
||||
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
|
||||
|
||||
@@ -47,7 +48,7 @@ extern "C" {
|
||||
#define STRINGIFY_(x) #x
|
||||
#define STRINGIFY(x) STRINGIFY_(x)
|
||||
|
||||
//TODO: change type to typeof()
|
||||
//TODO: change type to typeof(), change initial value to something more useful
|
||||
#define RISING_EDGE(sig)\
|
||||
({static float __old_val__ = 0.0; uint8_t ret = (sig) > __old_val__; __old_val__ = (sig); ret;})
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
struct version_info {
|
||||
struct version_info {//TODO: typedef
|
||||
// set at link-time by add-version-info.py
|
||||
//
|
||||
uint32_t image_crc;
|
||||
|
||||
@@ -40,7 +40,7 @@ RT(
|
||||
float s;
|
||||
float c;
|
||||
|
||||
uint32_t *ADC_DMA_Buffer;
|
||||
volatile uint32_t *ADC_DMA_Buffer;
|
||||
|
||||
// if(DMA_GetCurrentMemoryTarget(DMA2_Stream0) == 0){
|
||||
// ADC_DMA_Buffer = ADC_DMA_Buffer1;
|
||||
|
||||
@@ -52,6 +52,7 @@ RT(
|
||||
float kiq = rq * PIN(ki) / lq;
|
||||
float kind = PIN(kind);
|
||||
|
||||
//TODO curpid: sqrt(di^2+qi^2) auf max_ac_cur clampen
|
||||
float idc = LIMIT(PIN(id_cmd), PIN(max_cur) * PIN(scale));
|
||||
float iqc = LIMIT(PIN(iq_cmd), PIN(max_cur) * PIN(scale));
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
HAL_COMP(fault);
|
||||
|
||||
#define SCALE(value, high, max) MIN(MAX(((max) - (value)) / ((max) - (high)), 0.0), 1.0)
|
||||
|
||||
HAL_PIN(en) = 0.0;
|
||||
HAL_PIN(reset) = 0.0;
|
||||
HAL_PIN(state) = 0.0;
|
||||
HAL_PIN(fault) = 0.0;
|
||||
HAL_PIN(en_out) = 0.0;
|
||||
@@ -60,11 +59,13 @@ HAL_PIN(mot_fan) = 0.0;
|
||||
HAL_PIN(phase_with_brake) = 1.0;
|
||||
HAL_PIN(phase_on_start) = 1.0;
|
||||
|
||||
HAL_PIN(print) = 0.0;
|
||||
|
||||
HAL_PIN(brake_release) = 0.0;
|
||||
|
||||
MEM(enum state_t state) = DISABLED;
|
||||
MEM(state_t state) = DISABLED;
|
||||
|
||||
MEM(enum fault_t fault) = NO_ERROR;
|
||||
MEM(fault_t fault) = NO_ERROR;
|
||||
|
||||
MEM(uint32_t phased) = 0;
|
||||
|
||||
@@ -106,6 +107,10 @@ RT(
|
||||
case SOFT_FAULT:
|
||||
if(PIN(en) <= 0.0){
|
||||
state = DISABLED;
|
||||
}else if(FALLING_EDGE(PIN(reset)) & (PIN(cmd_ready) > 0.0) & (PIN(fb0_ready) > 0.0) & (PIN(fb1_ready) > 0.0) & (PIN(hv_ready) > 0.0)){
|
||||
//TODO: phasing
|
||||
state = ENABLED;
|
||||
PIN(start_offset) = minus(PIN(fb), PIN(cmd));
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -241,7 +246,74 @@ RT(
|
||||
PIN(mot_brake) = 1.0;
|
||||
}
|
||||
);
|
||||
NRT(
|
||||
if(EDGE(state) || PIN(print) > 0.0){
|
||||
PIN(print) = 0.0;
|
||||
switch((state_t)state){
|
||||
case DISABLED:
|
||||
printf("INFO: Disabled \n");
|
||||
break;
|
||||
|
||||
case ENABLED:
|
||||
printf("INFO: Enabled \n");
|
||||
break;
|
||||
|
||||
case PHASING:
|
||||
printf("INFO: Phasing \n");
|
||||
break;
|
||||
|
||||
case SOFT_FAULT:
|
||||
printf("ERROR: Soft fault: ");
|
||||
switch((fault_t)fault){
|
||||
case NO_ERROR:
|
||||
printf("no error\n");
|
||||
break;
|
||||
|
||||
case CMD_ERROR:
|
||||
printf("CMD error\n");
|
||||
break;
|
||||
|
||||
case FB0_ERROR:
|
||||
printf("FB0 error\n");
|
||||
break;
|
||||
|
||||
case FB1_ERROR:
|
||||
printf("FB1 error\n");
|
||||
break;
|
||||
|
||||
case POS_ERROR:
|
||||
printf("position error\n");
|
||||
break;
|
||||
|
||||
case SAT_ERROR:
|
||||
printf("saturation error\n");
|
||||
break;
|
||||
|
||||
case HV_ERROR:
|
||||
printf("HV error\n");
|
||||
break;
|
||||
|
||||
case HV_TEMP_ERROR:
|
||||
printf("HV overtemperture\n");
|
||||
break;
|
||||
|
||||
case HV_VOLT_ERROR:
|
||||
printf("HV volt error\n");
|
||||
break;
|
||||
|
||||
case MOT_TEMP_ERROR:
|
||||
printf("Motor overtemperture\n");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case HARD_FAULT:
|
||||
printf("ERROR: Hard fault: \n");
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
);
|
||||
ENDCOMP;
|
||||
|
||||
//TODO curpid: sqrt(di^2+qi^2) auf max_ac_cur clampen
|
||||
|
||||
@@ -65,7 +65,7 @@ NRT(
|
||||
uint32_t red = 0;
|
||||
uint32_t green = 0;
|
||||
|
||||
switch((int)PIN(state)){
|
||||
switch((state_t)PIN(state)){
|
||||
case DISABLED:
|
||||
green = BLINK(1);
|
||||
red = 0;
|
||||
|
||||
@@ -1,60 +1,23 @@
|
||||
HAL_COMP(term);
|
||||
|
||||
HAL_PIN(wave0) = 0.0;
|
||||
HAL_PIN(gain0) = 10.0;
|
||||
HAL_PIN(offset0) = 0.0;
|
||||
#define TERM_NUM_WAVES 8
|
||||
|
||||
HAL_PIN(wave1) = 0.0;
|
||||
HAL_PIN(gain1) = 10.0;
|
||||
HAL_PIN(offset1) = 0.0;
|
||||
|
||||
HAL_PIN(wave2) = 0.0;
|
||||
HAL_PIN(gain2) = 10.0;
|
||||
HAL_PIN(offset2) = 0.0;
|
||||
|
||||
HAL_PIN(wave3) = 0.0;
|
||||
HAL_PIN(gain3) = 10.0;
|
||||
HAL_PIN(offset3) = 0.0;
|
||||
|
||||
HAL_PIN(wave4) = 0.0;
|
||||
HAL_PIN(gain4) = 10.0;
|
||||
HAL_PIN(offset4) = 0.0;
|
||||
|
||||
HAL_PIN(wave5) = 0.0;
|
||||
HAL_PIN(gain5) = 10.0;
|
||||
HAL_PIN(offset5) = 0.0;
|
||||
|
||||
HAL_PIN(wave6) = 0.0;
|
||||
HAL_PIN(gain6) = 10.0;
|
||||
HAL_PIN(offset6) = 0.0;
|
||||
|
||||
HAL_PIN(wave7) = 0.0;
|
||||
HAL_PIN(gain7) = 10.0;
|
||||
HAL_PIN(offset7) = 0.0;
|
||||
HAL_PIN_ARRAY(wave, TERM_NUM_WAVES);
|
||||
HAL_PIN_ARRAY(gain, TERM_NUM_WAVES);
|
||||
HAL_PIN_ARRAY(offset, TERM_NUM_WAVES);
|
||||
|
||||
HAL_PIN(send_step) = 10.0;
|
||||
|
||||
HAL_PIN(buf_use) = 0.0;
|
||||
|
||||
HAL_PIN(state) = 0.0;
|
||||
HAL_PIN(fault) = 0.0;
|
||||
HAL_PIN(con) = 0.0;
|
||||
HAL_PIN(jogvel) = 10.0;
|
||||
HAL_PIN(jogpos) = 0.0;
|
||||
HAL_PIN(jogging) = 0.0;
|
||||
|
||||
HAL_PIN(tim2_rv) = 420.0;
|
||||
|
||||
#define TERM_BUF_SIZE 24
|
||||
|
||||
MEM(float w0[TERM_BUF_SIZE]);
|
||||
MEM(float w1[TERM_BUF_SIZE]);
|
||||
MEM(float w2[TERM_BUF_SIZE]);
|
||||
MEM(float w3[TERM_BUF_SIZE]);
|
||||
MEM(float w4[TERM_BUF_SIZE]);
|
||||
MEM(float w5[TERM_BUF_SIZE]);
|
||||
MEM(float w6[TERM_BUF_SIZE]);
|
||||
MEM(float w7[TERM_BUF_SIZE]);
|
||||
MEM(float wave_buf[TERM_BUF_SIZE][TERM_NUM_WAVES]);
|
||||
|
||||
MEM(unsigned int read_pos) = 0;
|
||||
MEM(unsigned int write_pos) = 0;
|
||||
@@ -77,16 +40,11 @@ RT(
|
||||
}else{
|
||||
PIN(jogging) = 0.0;
|
||||
}
|
||||
//TIM2->ARR = (int)CLAMP(PIN(tim2_rv), 1, 1500);
|
||||
|
||||
if(send_counter++ >= PIN(send_step) - 1){
|
||||
w0[write_pos] = PIN(wave0);
|
||||
w1[write_pos] = PIN(wave1);
|
||||
w2[write_pos] = PIN(wave2);
|
||||
w3[write_pos] = PIN(wave3);
|
||||
w4[write_pos] = PIN(wave4);
|
||||
w5[write_pos] = PIN(wave5);
|
||||
w6[write_pos] = PIN(wave6);
|
||||
w7[write_pos] = PIN(wave7);
|
||||
for(int i = 0; i < TERM_NUM_WAVES; i++){
|
||||
wave_buf[write_pos][i] = PIN_ARRAY(wave,i);
|
||||
}
|
||||
|
||||
write_pos++;
|
||||
write_pos %= TERM_BUF_SIZE;
|
||||
@@ -96,7 +54,7 @@ RT(
|
||||
|
||||
NRT(
|
||||
|
||||
void print_version_info(struct version_info* v){
|
||||
void print_version_info(const volatile struct version_info* v){
|
||||
printf(
|
||||
"%s v%i.%i.%i %s\n",
|
||||
v->product_name,
|
||||
@@ -296,129 +254,22 @@ NRT(
|
||||
}
|
||||
}
|
||||
|
||||
void fault_sender(){
|
||||
if(EDGE(PIN(state))){
|
||||
switch((int)PIN(state)){
|
||||
case DISABLED:
|
||||
printf("INFO: Disabled \n");
|
||||
break;
|
||||
|
||||
case ENABLED:
|
||||
printf("INFO: Enabled \n");
|
||||
break;
|
||||
|
||||
case PHASING:
|
||||
printf("ERROR: Phasing \n");
|
||||
break;
|
||||
|
||||
case SOFT_FAULT:
|
||||
printf("ERROR: Soft fault: ");
|
||||
switch((int)PIN(fault)){
|
||||
case NO_ERROR:
|
||||
printf("no error\n");
|
||||
break;
|
||||
|
||||
case CMD_ERROR:
|
||||
printf("CMD error\n");
|
||||
break;
|
||||
|
||||
case FB0_ERROR:
|
||||
printf("FB0 error\n");
|
||||
break;
|
||||
|
||||
case FB1_ERROR:
|
||||
printf("FB1 error\n");
|
||||
break;
|
||||
|
||||
case POS_ERROR:
|
||||
printf("position error\n");
|
||||
break;
|
||||
|
||||
case SAT_ERROR:
|
||||
printf("saturation error\n");
|
||||
break;
|
||||
|
||||
case HV_ERROR:
|
||||
printf("HV error\n");
|
||||
break;
|
||||
|
||||
case HV_TEMP_ERROR:
|
||||
printf("HV overtemperture\n");
|
||||
break;
|
||||
|
||||
case HV_VOLT_ERROR:
|
||||
printf("HV volt error\n");
|
||||
break;
|
||||
|
||||
case MOT_TEMP_ERROR:
|
||||
printf("Motor overtemperture\n");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case HARD_FAULT:
|
||||
printf("ERROR: Hard fault: \n");
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int e = 0;
|
||||
int tmp = 0;
|
||||
unsigned char buf[8 + 2];
|
||||
|
||||
buf[0] = 255;
|
||||
buf[8 + 1] = 0;
|
||||
|
||||
float o0 = PIN(offset0);
|
||||
float o1 = PIN(offset1);
|
||||
float o2 = PIN(offset2);
|
||||
float o3 = PIN(offset3);
|
||||
float o4 = PIN(offset4);
|
||||
float o5 = PIN(offset5);
|
||||
float o6 = PIN(offset6);
|
||||
float o7 = PIN(offset7);
|
||||
float g0 = PIN(gain0);
|
||||
float g1 = PIN(gain1);
|
||||
float g2 = PIN(gain2);
|
||||
float g3 = PIN(gain3);
|
||||
float g4 = PIN(gain4);
|
||||
float g5 = PIN(gain5);
|
||||
float g6 = PIN(gain6);
|
||||
float g7 = PIN(gain7);
|
||||
|
||||
|
||||
unsigned int wp = write_pos;
|
||||
unsigned int bc = 0;
|
||||
|
||||
while(read_pos != wp){
|
||||
bc++;
|
||||
e = (w0[read_pos] + o0) * g0 + 128;
|
||||
buf[1] = CLAMP(e,1,254);
|
||||
|
||||
e = (w1[read_pos] + o1) * g1 + 128;
|
||||
buf[2] = CLAMP(e,1,254);
|
||||
|
||||
e = (w2[read_pos] + o2) * g2 + 128;
|
||||
buf[3] = CLAMP(e,1,254);
|
||||
|
||||
e = (w3[read_pos] + o3) * g3 + 128;
|
||||
buf[4] = CLAMP(e,1,254);
|
||||
|
||||
e = (w4[read_pos] + o4) * g4 + 128;
|
||||
buf[5] = CLAMP(e,1,254);
|
||||
|
||||
e = (w5[read_pos] + o5) * g5 + 128;
|
||||
buf[6] = CLAMP(e,1,254);
|
||||
|
||||
e = (w6[read_pos] + o6) * g6 + 128;
|
||||
buf[7] = CLAMP(e,1,254);
|
||||
|
||||
e = (w7[read_pos] + o7) * g7 + 128;
|
||||
buf[8] = CLAMP(e,1,254);
|
||||
|
||||
for(int i = 0; i < TERM_NUM_WAVES; i++){
|
||||
tmp = (wave_buf[read_pos][i] + PIN_ARRAY(offset,i)) * PIN_ARRAY(gain,i) + 128;
|
||||
buf[i+1] = CLAMP(tmp,1,254);
|
||||
}
|
||||
|
||||
read_pos++;
|
||||
read_pos %= TERM_BUF_SIZE;
|
||||
@@ -439,7 +290,6 @@ NRT(
|
||||
char source[APP_TX_BUF_SIZE];
|
||||
char sink[APP_TX_BUF_SIZE];
|
||||
|
||||
fault_sender();
|
||||
if(EDGE(hal.hal_state)){
|
||||
hal_term_print_state();
|
||||
}
|
||||
@@ -447,7 +297,7 @@ NRT(
|
||||
int i = -1;
|
||||
char rx_buf[APP_TX_BUF_SIZE];
|
||||
if (USB_VCP_get_string(rx_buf)) {
|
||||
i = sscanf_(rx_buf, "%N = %N", sink, source);
|
||||
i = sscanf_(rx_buf, "%N = %N", sink, source);//TODO: change to lib sscanf
|
||||
}
|
||||
if(i == 2){ // read hal pin
|
||||
if(hal_is_pin(sink)){
|
||||
|
||||
@@ -87,42 +87,6 @@
|
||||
#define FAN_PORT GPIOC
|
||||
#define FAN_IO_RCC RCC_AHB1Periph_GPIOC
|
||||
|
||||
//states
|
||||
|
||||
// state -10 = reset state, -6 = fb error, -5 = sat error, -4 = over current, -3 = pos_error, -2 = over temperature, -1 = over voltage, 0 = disabled, 1 = enabled, 2 = phasing
|
||||
// #define STATE_RESET -10
|
||||
// #define STATE_HV_ERROR -7
|
||||
// #define STATE_FB_ERROR -6
|
||||
// #define STATE_SAT_ERROR -5
|
||||
// #define STATE_OVR_CURR -4
|
||||
// #define STATE_POS_ERROR -3
|
||||
// #define STATE_OVR_TEMP -2
|
||||
// #define STATE_OVR_VOLT -1
|
||||
// #define STATE_DISABLED 0
|
||||
// #define STATE_ENABLED 1
|
||||
// #define STATE_PHASING 2
|
||||
|
||||
enum state_t{
|
||||
DISABLED = 0,
|
||||
ENABLED,
|
||||
PHASING,
|
||||
SOFT_FAULT,
|
||||
HARD_FAULT
|
||||
};
|
||||
|
||||
enum fault_t{
|
||||
NO_ERROR = 0,
|
||||
CMD_ERROR,
|
||||
FB0_ERROR,
|
||||
FB1_ERROR,
|
||||
POS_ERROR,
|
||||
SAT_ERROR,
|
||||
HV_ERROR,
|
||||
HV_TEMP_ERROR,
|
||||
HV_VOLT_ERROR,
|
||||
MOT_TEMP_ERROR,
|
||||
};
|
||||
|
||||
#ifdef TROLLER
|
||||
|
||||
#define UART_DRV USART1
|
||||
@@ -191,59 +155,59 @@ enum fault_t{
|
||||
|
||||
#endif
|
||||
|
||||
// i2c
|
||||
#define I2C I2C1
|
||||
#define I2C_RCC RCC_AHB1Periph_I2C1
|
||||
|
||||
//// gpio
|
||||
#define I2C_SDA_PIN GPIO_Pin_9
|
||||
#define I2C_SDA_PORT GPIOB
|
||||
#define I2C_SDA_IO_RCC RCC_AHB1Periph_GPIOB
|
||||
#define I2C_SDA_PIN_SOURCE GPIO_PinSource9
|
||||
#define I2C_SDA_AF_SOURCE GPIO_AF_I2C1
|
||||
|
||||
#define I2C_SCK_PIN GPIO_Pin_8
|
||||
#define I2C_SCK_PORT GPIOB
|
||||
#define I2C_SCK_IO_RCC RCC_AHB1Periph_GPIOB
|
||||
#define I2C_SCK_PIN_SOURCE GPIO_PinSource8
|
||||
#define I2C_SCK_AF_SOURCE GPIO_AF_I2C1
|
||||
|
||||
// spi
|
||||
#define SPI SPI1
|
||||
#define SPI_RCC RCC_AHB1Periph_SPI1
|
||||
|
||||
//// gpio
|
||||
#define SPI_MOSI_PIN GPIO_Pin_5
|
||||
#define SPI_MOSI_PORT GPIOB
|
||||
#define SPI_MOSI_IO_RCC RCC_AHB1Periph_GPIOB
|
||||
#define SPI_MOSI_PIN_SOURCE GPIO_PinSource5
|
||||
#define SPI_MOSI_AF_SOURCE GPIO_AF_SPI1
|
||||
|
||||
#define SPI_MISO_PIN GPIO_Pin_4
|
||||
#define SPI_MISO_PORT GPIOB
|
||||
#define SPI_MISO_IO_RCC RCC_AHB1Periph_GPIOB
|
||||
#define SPI_MISO_PIN_SOURCE GPIO_PinSource4
|
||||
#define SPI_MISO_AF_SOURCE GPIO_AF_SPI1
|
||||
|
||||
#define SPI_SCK_PIN GPIO_Pin_3
|
||||
#define SPI_SCK_PORT GPIOB
|
||||
#define SPI_SCK_IO_RCC RCC_AHB1Periph_GPIOB
|
||||
#define SPI_SCK_PIN_SOURCE GPIO_PinSource3
|
||||
#define SPI_SCK_AF_SOURCE GPIO_AF_SPI1
|
||||
|
||||
// can
|
||||
#define CAN CAN1
|
||||
#define CAN_RCC RCC_AHB1Periph_CAN1
|
||||
|
||||
//// gpio
|
||||
#define CAN_RX_PIN GPIO_Pin_8
|
||||
#define CAN_RX_PORT GPIOB
|
||||
#define CAN_RX_IO_RCC RCC_AHB1Periph_GPIOB
|
||||
#define CAN_RX_PIN_SOURCE GPIO_PinSource8
|
||||
#define CAN_RX_AF_SOURCE GPIO_AF_CAN1
|
||||
|
||||
#define CAN_TX_PIN GPIO_Pin_9
|
||||
#define CAN_TX_PORT GPIOB
|
||||
#define CAN_TX_IO_RCC RCC_AHB1Periph_GPIOB
|
||||
#define CAN_TX_PIN_SOURCE GPIO_PinSource9
|
||||
#define CAN_TX_AF_SOURCE GPIO_AF_CAN1
|
||||
// // i2c
|
||||
// #define I2C I2C1
|
||||
// #define I2C_RCC RCC_AHB1Periph_I2C1
|
||||
//
|
||||
// //// gpio
|
||||
// #define I2C_SDA_PIN GPIO_Pin_9
|
||||
// #define I2C_SDA_PORT GPIOB
|
||||
// #define I2C_SDA_IO_RCC RCC_AHB1Periph_GPIOB
|
||||
// #define I2C_SDA_PIN_SOURCE GPIO_PinSource9
|
||||
// #define I2C_SDA_AF_SOURCE GPIO_AF_I2C1
|
||||
//
|
||||
// #define I2C_SCK_PIN GPIO_Pin_8
|
||||
// #define I2C_SCK_PORT GPIOB
|
||||
// #define I2C_SCK_IO_RCC RCC_AHB1Periph_GPIOB
|
||||
// #define I2C_SCK_PIN_SOURCE GPIO_PinSource8
|
||||
// #define I2C_SCK_AF_SOURCE GPIO_AF_I2C1
|
||||
//
|
||||
// // spi
|
||||
// #define SPI SPI1
|
||||
// #define SPI_RCC RCC_AHB1Periph_SPI1
|
||||
//
|
||||
// //// gpio
|
||||
// #define SPI_MOSI_PIN GPIO_Pin_5
|
||||
// #define SPI_MOSI_PORT GPIOB
|
||||
// #define SPI_MOSI_IO_RCC RCC_AHB1Periph_GPIOB
|
||||
// #define SPI_MOSI_PIN_SOURCE GPIO_PinSource5
|
||||
// #define SPI_MOSI_AF_SOURCE GPIO_AF_SPI1
|
||||
//
|
||||
// #define SPI_MISO_PIN GPIO_Pin_4
|
||||
// #define SPI_MISO_PORT GPIOB
|
||||
// #define SPI_MISO_IO_RCC RCC_AHB1Periph_GPIOB
|
||||
// #define SPI_MISO_PIN_SOURCE GPIO_PinSource4
|
||||
// #define SPI_MISO_AF_SOURCE GPIO_AF_SPI1
|
||||
//
|
||||
// #define SPI_SCK_PIN GPIO_Pin_3
|
||||
// #define SPI_SCK_PORT GPIOB
|
||||
// #define SPI_SCK_IO_RCC RCC_AHB1Periph_GPIOB
|
||||
// #define SPI_SCK_PIN_SOURCE GPIO_PinSource3
|
||||
// #define SPI_SCK_AF_SOURCE GPIO_AF_SPI1
|
||||
//
|
||||
// // can
|
||||
// #define CAN CAN1
|
||||
// #define CAN_RCC RCC_AHB1Periph_CAN1
|
||||
//
|
||||
// //// gpio
|
||||
// #define CAN_RX_PIN GPIO_Pin_8
|
||||
// #define CAN_RX_PORT GPIOB
|
||||
// #define CAN_RX_IO_RCC RCC_AHB1Periph_GPIOB
|
||||
// #define CAN_RX_PIN_SOURCE GPIO_PinSource8
|
||||
// #define CAN_RX_AF_SOURCE GPIO_AF_CAN1
|
||||
//
|
||||
// #define CAN_TX_PIN GPIO_Pin_9
|
||||
// #define CAN_TX_PORT GPIOB
|
||||
// #define CAN_TX_IO_RCC RCC_AHB1Periph_GPIOB
|
||||
// #define CAN_TX_PIN_SOURCE GPIO_PinSource9
|
||||
// #define CAN_TX_AF_SOURCE GPIO_AF_CAN1
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
//global hal struct
|
||||
hal_struct_t hal;
|
||||
|
||||
char* itoa(int i){
|
||||
//TODO: only works for single positive digit
|
||||
char* hal_itoa(int i){
|
||||
hal.tmp[0] = (i % 10) + '0';
|
||||
hal.tmp[1] = '\0';
|
||||
return(hal.tmp);
|
||||
@@ -210,9 +211,10 @@ void hal_stop_frt(){
|
||||
hal.frt_state = FRT_STOP;
|
||||
}
|
||||
|
||||
//TODO: calculate and reduce name length...
|
||||
void hal_init_pin(hal_name_t name, hal_pin_t* pin, float value){
|
||||
strncpy(pin->name, hal.comp_types[hal.comp_type], HAL_NAME_LENGTH);
|
||||
strncat(pin->name, itoa(hal.comp_types_counter[hal.comp_type]), HAL_NAME_LENGTH);
|
||||
strncat(pin->name, hal_itoa(hal.comp_types_counter[hal.comp_type]), HAL_NAME_LENGTH);
|
||||
strncat(pin->name, ".", HAL_NAME_LENGTH);
|
||||
strncat(pin->name, name, HAL_NAME_LENGTH);
|
||||
pin->value = value;
|
||||
|
||||
16
src/hal.h
16
src/hal.h
@@ -167,6 +167,8 @@ extern uint32_t hal_get_systick_value();
|
||||
extern uint32_t hal_get_systick_reload();
|
||||
extern uint32_t hal_get_systick_freq();
|
||||
|
||||
char* hal_itoa(int i);
|
||||
|
||||
#define HAL_COMP(type) \
|
||||
{ \
|
||||
static hal_comp_t self; \
|
||||
@@ -190,6 +192,16 @@ extern uint32_t hal_get_systick_freq();
|
||||
hal_init_pin(#name, &name##_hal_pin, 0.0); \
|
||||
(name##_hal_pin.value)
|
||||
|
||||
//TODO: clamp loads of stuff, like count... check length...
|
||||
#define HAL_PIN_ARRAY(name,count) \
|
||||
static hal_pin_t name##_hal_pin[count]; \
|
||||
for(uint32_t i = 0; i < count; i++){ \
|
||||
char pinname[HAL_NAME_LENGTH]; \
|
||||
strncpy(pinname,#name,HAL_NAME_LENGTH); \
|
||||
strncat(pinname,hal_itoa(i),HAL_NAME_LENGTH); \
|
||||
hal_init_pin(pinname, &name##_hal_pin[i], 0.0); \
|
||||
}
|
||||
|
||||
#define GLOBAL_HAL_PIN(name) \
|
||||
volatile hal_pin_t name##_hal_pin;
|
||||
|
||||
@@ -198,6 +210,9 @@ extern uint32_t hal_get_systick_freq();
|
||||
#define PIN(name) \
|
||||
(name##_hal_pin.source->source->value)
|
||||
|
||||
#define PIN_ARRAY(name,index) \
|
||||
(name##_hal_pin[index].source->source->value)
|
||||
|
||||
#define INIT(func) \
|
||||
self.nrt_init = ({ void function(){func} function;});
|
||||
|
||||
@@ -273,6 +288,7 @@ if(ht_time_count < (time)){ \
|
||||
} \
|
||||
jump_label_pointer = jump_label_pointer_old;
|
||||
|
||||
//TODO: rename HAL_ENDCOMP
|
||||
#define ENDCOMP \
|
||||
self.hal_pin_count = hal.hal_pin_count - self.hal_pin_start_index; \
|
||||
hal_add_comp(&self); \
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "eeprom.h"
|
||||
#include "crc16.h"
|
||||
#include "link.h"
|
||||
#include "main.h" // for Wait
|
||||
#include <stdio.h>
|
||||
|
||||
uint16_t hal_conf_init(){
|
||||
@@ -14,7 +15,7 @@ uint16_t hal_conf_init(){
|
||||
void hal_conf_save(){
|
||||
if(hal.rt_state != RT_STOP || hal.frt_state != FRT_STOP){
|
||||
printf("cannot save while hal is running(run 'stop' command)\n");
|
||||
return(-1);
|
||||
return;
|
||||
}
|
||||
typedef union{
|
||||
float f;
|
||||
@@ -45,7 +46,7 @@ void hal_conf_save(){
|
||||
if(elo != FLASH_COMPLETE || ehi != FLASH_COMPLETE){
|
||||
FLASH_Lock();
|
||||
printf("error writing to address %i: error: %i,%i\n",address,elo,ehi);
|
||||
return -1;
|
||||
return;
|
||||
}
|
||||
address+=2;
|
||||
}
|
||||
@@ -56,7 +57,7 @@ void hal_conf_save(){
|
||||
if(elo != FLASH_COMPLETE){
|
||||
printf("error writing crc to address %i: error: %i\n",address,elo);
|
||||
FLASH_Lock();
|
||||
return -1;
|
||||
return;
|
||||
}
|
||||
FLASH_Lock();
|
||||
printf("flash save OK\n");
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include <stdio.h>
|
||||
#include "hal_term.h"
|
||||
#include "main.h" // for Wait
|
||||
|
||||
void hal_term_print_pin(hal_pin_t* pin){
|
||||
if(pin == pin->source){//if pin is not linked
|
||||
|
||||
16
src/link.c
16
src/link.c
@@ -123,12 +123,12 @@ void link_pid(){
|
||||
|
||||
// fault
|
||||
hal_link_pins("conf0.max_dc_cur", "fault0.max_dc_cur");
|
||||
hal_link_pins("conf0.max_ac_cur", "fault0.max_ac_cur");
|
||||
hal_link_pins("conf0.max_dc_volt", "fault0.max_dc_volt");
|
||||
// hal_link_pins("conf0.max_ac_cur", "fault0.max_ac_cur");
|
||||
hal_link_pins("conf0.max_dc_volt", "fault0.max_hv_volt");
|
||||
hal_link_pins("conf0.max_hv_temp", "fault0.max_hv_temp");
|
||||
hal_link_pins("conf0.max_motor_temp", "fault0.max_mot_temp");
|
||||
hal_link_pins("conf0.max_pos_error", "fault0.max_pos_error");
|
||||
hal_link_pins("conf0.high_dc_volt", "fault0.high_dc_volt");
|
||||
hal_link_pins("conf0.high_dc_volt", "fault0.high_hv_volt");
|
||||
hal_link_pins("conf0.high_hv_temp", "fault0.high_hv_temp");
|
||||
hal_link_pins("conf0.high_motor_temp", "fault0.high_mot_temp");
|
||||
hal_link_pins("conf0.low_dc_volt", "fault0.min_hv_volt");
|
||||
@@ -169,8 +169,6 @@ void link_pid(){
|
||||
hal_link_pins("fault0.fault", "io0.fault");
|
||||
hal_link_pins("fault0.state", "io0.state");
|
||||
|
||||
hal_link_pins("fault0.state", "term0.state"); //sent state to terminal
|
||||
hal_link_pins("fault0.fault", "term0.fault"); //sent fault to terminal
|
||||
// cauto
|
||||
|
||||
hal_link_pins("conf0.fb_offset", "cauto0.mag_offset");
|
||||
@@ -271,8 +269,8 @@ int update_fb(){
|
||||
hal_set_pin("enc_fb0.frt_prio", -1.0);
|
||||
hal_set_pin("res0.rt_prio", -1.0);
|
||||
hal_set_pin("encm0.rt_prio", -1.0);
|
||||
hal_set_pin("encs0.rt_prio", -1.0);
|
||||
hal_set_pin("yaskawa0.rt_prio", -1.0);
|
||||
// hal_set_pin("encs0.rt_prio", -1.0);
|
||||
// hal_set_pin("yaskawa0.rt_prio", -1.0);
|
||||
switch((protocol_t)hal_get_pin("conf0.fb_type")){
|
||||
case ENC:
|
||||
hal_link_pins("enc_fb0.pos", "rev1.in");
|
||||
@@ -341,8 +339,8 @@ int update_fb(){
|
||||
int update_cmd(){
|
||||
hal_set_pin("enc_cmd0.rt_prio", -1.0);
|
||||
hal_set_pin("enc_cmd0.frt_prio", -1.0);
|
||||
hal_set_pin("step_cmd0.rt_prio", -1.0);
|
||||
hal_set_pin("step_cmd0.frt_prio", -1.0);
|
||||
// hal_set_pin("step_cmd0.rt_prio", -1.0);
|
||||
// hal_set_pin("step_cmd0.frt_prio", -1.0);
|
||||
hal_set_pin("sserial0.rt_prio", -1.0);
|
||||
hal_set_pin("sserial0.frt_prio", -1.0);
|
||||
hal_set_pin("en0.rt_prio", -1.0);
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "usb_cdc.h"
|
||||
#include "main.h"
|
||||
|
||||
GLOBAL_HAL_PIN(rt_time);
|
||||
GLOBAL_HAL_PIN(frt_time);
|
||||
@@ -240,8 +241,6 @@ int main(void)
|
||||
HAL_PIN(fb_error) = 0.0;
|
||||
HAL_PIN(cmd_d) = 0.0;
|
||||
HAL_PIN(fb_d) = 0.0;
|
||||
HAL_PIN(core_temp0) = 0.0;
|
||||
HAL_PIN(core_temp1) = 0.0;
|
||||
HAL_PIN(motor_temp) = 0.0;
|
||||
HAL_PIN(rt_calc_time) = 0.0;
|
||||
HAL_PIN(frt_calc_time) = 0.0;
|
||||
@@ -280,9 +279,9 @@ int main(void)
|
||||
HAL_PIN(cmd_unit) = 0.0;//pos,vel,torque
|
||||
HAL_PIN(cmd_rev) = 0.0;
|
||||
HAL_PIN(cmd_res) = 2000.0;
|
||||
HAL_PIN(en_condition) = 0.0;
|
||||
HAL_PIN(en_condition) = 0.0;//enable condition
|
||||
HAL_PIN(error_out) = 0.0;
|
||||
HAL_PIN(pos_static) = 0.0;//track pos in disabled and error condition
|
||||
HAL_PIN(pos_static) = 0.0;//track pos in disabled and error condition TODO: not implemented
|
||||
|
||||
HAL_PIN(sin_offset) = 0.0;
|
||||
HAL_PIN(cos_offset) = 0.0;
|
||||
|
||||
24
src/main.h
Normal file
24
src/main.h
Normal file
@@ -0,0 +1,24 @@
|
||||
//fault state
|
||||
typedef enum{
|
||||
DISABLED = 0,
|
||||
ENABLED,
|
||||
PHASING,
|
||||
SOFT_FAULT,
|
||||
HARD_FAULT
|
||||
} state_t;
|
||||
|
||||
//fault errors
|
||||
typedef enum{
|
||||
NO_ERROR = 0,
|
||||
CMD_ERROR,
|
||||
FB0_ERROR,
|
||||
FB1_ERROR,
|
||||
POS_ERROR,
|
||||
SAT_ERROR,
|
||||
HV_ERROR,
|
||||
HV_TEMP_ERROR,
|
||||
HV_VOLT_ERROR,
|
||||
MOT_TEMP_ERROR,
|
||||
} fault_t;
|
||||
|
||||
void Wait(uint32_t ms);
|
||||
@@ -67,9 +67,12 @@ ssize_t _read(int fd, void *ptr, size_t len)
|
||||
return len;
|
||||
}
|
||||
|
||||
|
||||
//TODO: check if connected?
|
||||
int _write(int fd, const char *ptr, int len)
|
||||
{
|
||||
if(!USB_CDC_is_connected()){
|
||||
return 0;
|
||||
}
|
||||
char *c = (char *) ptr;
|
||||
(void) fd;
|
||||
int sent = 0;
|
||||
|
||||
@@ -57,14 +57,14 @@ uint32_t w_error = 0;
|
||||
#define TOFLOAT32(a) ((uint32_t)((a) / 65536))
|
||||
|
||||
#define TEMP_RES 32
|
||||
#define SCALE (TEMP_RES / ARES)
|
||||
#define TEMP_SCALE (TEMP_RES / ARES)
|
||||
int16_t temp_buf[TEMP_RES];
|
||||
|
||||
float tempb(float i){
|
||||
unsigned int x = (int)(i * SCALE);
|
||||
unsigned int x = (int)(i * TEMP_SCALE);
|
||||
float a = TOFLOAT(temp_buf[x]);
|
||||
float b = TOFLOAT(temp_buf[x + 1]);
|
||||
return(a + (b - a) * (i * SCALE - x));
|
||||
return(a + (b - a) * (i * TEMP_SCALE - x));
|
||||
}
|
||||
|
||||
volatile uint32_t timeout = 99999;
|
||||
@@ -474,7 +474,7 @@ int main(void)
|
||||
packet_from_hv.head.key = 0;
|
||||
#ifndef TROLLER
|
||||
for(int i = 0; i < TEMP_RES; i++){
|
||||
temp_buf[i] = TOFIXED(TEMP(i / SCALE));
|
||||
temp_buf[i] = TOFIXED(TEMP(i / TEMP_SCALE));
|
||||
}
|
||||
#endif
|
||||
while(1){
|
||||
|
||||
Reference in New Issue
Block a user