This repository has been archived on 2025-01-02. You can view files and clone it, but cannot push or open issues or pull requests.
torsion/User/board/board.h

102 lines
2.2 KiB
C

#ifndef __BOARD_H__
#define __BOARD_H__
#include "main.h"
#include "adcs.h"
#include "uarts.h"
// 串口协议参数
#define UART_RXSIZE (240u) // 接收缓冲区 240个字节
#define UART_TXSIZE (240u) // 发送缓冲区 240个字节
// 包头 + 状态码 + 设备号 + 命令号 + 长度 + 数据 + 校验 + 包尾
// 1 1 1 1 1 0~128 1 1
#define PACKET_STX 0xff // 包头
#define PACKET_ETX 0x3c // 包尾
#define PACKET_
#define DATA_LEN_INDEX 4 // 数据长度偏移
#define DATA_INDEX 5 // 数据偏移
// 最大数据长度
#define DATA_MAX_LEN 128
// 最小帧长度:包头 + 状态码 + 设备号 + 命令号 + 长度 + 校验 + 包尾
#define PACKET_MIN_LEN 7
// 最大帧长度
#define PACKET_MAX_LEN (DATA_MAX_LEN + PACKET_MIN_LEN)
// 电机初始默认值
#define PULSE_REV 18000.0 // 每圈脉冲数(驱动器脉冲)
#define MIN_STEP_ANGLE (360 / PULSE_REV) // 最小步距
typedef enum
{
IDLE = 0, // 空闲
BUSY = 1, // 忙碌
} host_state_e;
typedef enum
{
ADC_SENSOR,
MOTOR,
} dev_id_e;
typedef enum
{
UART_NUM_1,
UART_NUM_2,
UART_NUM_3,
UART_NUM_4,
UART_NUM_5,
UART_NUM_MAX,
} uart_num_e;
typedef enum
{
SET_MOTOR_SPEED,
GET_MIN_STEP,
GET_MOTOR_STATE,
MOTOR_MOVE,
MOTOR_STOP,
} motor_cmd_e;
typedef enum
{
GET_TORSION_VALUE,
GET_PRESSURE_VALUE,
GET_FLOW_VALUE,
GET_ALL_VALUE,
} sensor_cmd_e;
typedef enum
{
ST_DEV_NORMAL,
ST_DEV_BUSY,
ST_DEV_MISS,
} status_code_e;
typedef struct
{
uint8_t head; // 包头
uint8_t state; // 状态
uint8_t dev_no; // 设备号
uint8_t cmd_no; // 命令号
uint8_t len; // 长度
uint8_t data[DATA_MAX_LEN]; // 数据
} frame_msg_t;
typedef struct
{
uint8_t dir;
float32 angle;
} motor_ctrl_t;
extern void board_init(void);
extern uint16_t get_torsion_adc(void);
extern float32 torsion_detect(void);
extern uint16_t get_pressure_adc(void);
extern float32 pressure_detect(void);
extern uint16_t get_flow_adc(void);
extern float32 flow_detect(void);
extern void host_rx_msg_deal(void);
extern void motor_process_init(void);
#endif // __BOARD_H__