#include "board.h" #include "motor.h" uart_t *uarts[UART_NUM_MAX]; motor_t *motor; motor_ctrl_t *motor_param = NULL; uint8_t motor_state = MOTOR_IDEL; adc_t adc1 = { .adc = ADC1, .dma = DMA1, .dma_channel = LL_DMA_CHANNEL_1, }; // 单位:N·m float32 torsion_detect(uint16_t adc) { float32 val = 0; val = (float32)adc / 4096 * 3000; val = (val - 1500) / 101 / (1.934 * 3) * 10; return val; } // 单位:kPa float32 pressure_detect(uint16_t adc) { float32 val = 0; val = (float32)adc / 4096 * 3000; val = (val - 600) / (10 * 15) / 16 * 1000; return val; } // 单位:SLPM float32 flow_detect(uint16_t adc) { float32 val = 0; val = (float32)adc / 4096 * 3000; val = (val - 600) / (10 * 15) / 16 * 300; return val; } static void motor_init(void) { motor = motor_create(STEP_MOTOR); gpio_t dir = { .port = DIR_GPIO_Port, .pin = DIR_Pin, }; gpio_t en = { .port = ENA_GPIO_Port, .pin = ENA_Pin, }; motor->handle.step_motor.interface.init(motor, dir, en, MAX_STEP_ANGLE, TIM21, LL_TIM_CHANNEL_CH2); } void motor_process_init(void) { motor_param = (motor_ctrl_t *)osel_mem_alloc(sizeof(motor_ctrl_t)); DBG_ASSERT(motor_param != NULL __DBG_LINE); osel_memset((uint8_t *)motor_param, 0, sizeof(motor_ctrl_t)); } void motor_process(void) { step_motor_t *step_motor = &motor->handle.step_motor; switch (motor_state) { case MOTOR_RUN: step_motor->interface.run(motor, (dir_e)motor_param->dir); motor_state = MOTOR_IDEL; break; case MOTOR_STOP: step_motor->interface.stop(motor); motor_state = MOTOR_IDEL; break; case MOTOR_STEP: step_motor->interface.set_angle(motor, motor_param->angle, (dir_e)motor_param->dir); motor_state = MOTOR_IDEL; break; case MOTOR_IDEL: break; default: break; } } void board_init(void) { motor = NULL; osel_memset((uint8_t *)uarts, 0, sizeof(uarts)); my_mem_init(SRAMIN); motor_init(); // 电机初始化 adc_init(adc1); // 初始化ADC1通道,默认采集AD ENABLE_TIM(TIM6); // 任务流程定时器使能 }