diff --git a/include/motor.h b/include/motor.h index 0b0d721..2795e42 100644 --- a/include/motor.h +++ b/include/motor.h @@ -7,4 +7,10 @@ void motor_init(void); void motor_set_speed(int speed_rpm); +struct motor_state { + int speed_rpm; +}; + +extern struct motor_state st_motor; + #endif /* __MOTOR_H__ */ diff --git a/src/motor.c b/src/motor.c index bfb7e51..03db566 100644 --- a/src/motor.c +++ b/src/motor.c @@ -2,7 +2,12 @@ #include +struct motor_state st_motor; + + void motor_init() { + memset(&st_motor, 0, sizeof(st_motor)); + /* PB1 (BT1) -> Open drain, TIM2 CH3N for speed PWM*/ GPIOB->MODER &= ~GPIO_MODER_MODER0_Msk; GPIOB->MODER |= AF(1); @@ -30,9 +35,18 @@ void motor_init() { } void motor_set_speed(int speed_rpm) { + if (speed_rpm > 3000) { + speed_rpm = 3000; + } else if (speed_rpm < -3000) { + speed_rpm = -3000; + } + + st_motor.speed_rpm = speed_rpm; + int speed = speed_rpm * 65535 / 3000; if (speed == 0) { GPIOB->BRR = 1<<12; + } else { GPIOB->BSRR = 1<<12; if (speed < 0) { diff --git a/src/proto.c b/src/proto.c index ce5c238..d5bdc81 100644 --- a/src/proto.c +++ b/src/proto.c @@ -1,6 +1,7 @@ #include #include +#include #include #include @@ -291,12 +292,12 @@ ErrorCode tx_update_display() { }, .led = { sys_time_us/10000, - 0, + st_motor.speed_rpm, 0 }, .led_fmt = { PROTO_LED_FMT_DEC | PROTO_LED_FMT_DP_2, - PROTO_LED_FMT_OFF, + PROTO_LED_FMT_DEC, PROTO_LED_FMT_OFF, }, };