2.0 电机反馈 - 实验篇
2.0 电机反馈 - 实验篇
Sarzn在这个实验中, 电机将 CAN反馈报文发送给 A 板之后, A 板通过串口将信息发送给电脑, 在电脑上看 A 板串口的图像以此知道电机的状态
CubeMX配置
元件与引脚对应关系
- 24V电源输出控制引脚PMOS: PH2~PH5, 电路原理图中高电平供电
- CAN1: PD0, PD1 在APB1总线上
- UART2: PD5, PD6 在A板预留蓝牙接口处
配置 CAN1 参数,
并且打开接收中断
再开启USART2设置为异步, 开启中断, 开启 DMA,
配置正确参数
Clion
正确的包含 bsp
文件(byRobowalker)
导入库 1
2
3
4
5
6/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
定义变量 1
2
3
4
5
6
7/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
Class_Serialplot serialplot;
int16_t Rx_Encoder, Rx_Omega, Rx_Torque, Rx_Temperature;
float Tx_Encoder, Tx_Omega, Tx_Torque, Tx_Temperature;
/* USER CODE END PV */
定义回调函数 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void CAN_Motor_Call_Back (Struct_CAN_Rx_Buffer *Rx_Buffer)
{
uint8_t *Rx_Data = Rx_Buffer->Data;
switch (Rx_Buffer->Header.StdId)
{
case (0x201):
{
Rx_Encoder = (Rx_Data[0] << 8) | Rx_Data[1];
Rx_Omega = (Rx_Data[2] << 8) | Rx_Data[3];
Rx_Torque = (Rx_Data[4] << 8) | Rx_Data[5];
Rx_Temperature = (Rx_Data[6]);
}
break;
}
}
/* USER CODE END 0 */
使能一个电源接口, CAN, UART , 设置 CAN 1
2
3
4
5
6
7/* USER CODE BEGIN 2 */
BSP_Init(BSP_DC24_LU_ON);
CAN_Init(&hcan1, CAN_Motor_Call_Back);
Uart_Init(&huart2, NULL, 0, NULL);
CAN_Filter_Mask_Config(&hcan1, CAN_FILTER(13) | CAN_FIFO_1 | CAN_STDID |CAN_DATA_TYPE, 0x201, 0x7ff);
serialplot.Init(&huart2, 0, NULL);
/* USER CODE END 2 */
主程序 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
Tx_Encoder = Rx_Encoder;
Tx_Omega = Rx_Omega;
Tx_Torque = Rx_Torque;
Tx_Temperature = Rx_Temperature;
serialplot.Set_Data(4, &Tx_Encoder, &Tx_Omega, &Tx_Torque, &Tx_Temperature);
serialplot.TIM_Add_PeriodElapsedCallback();
TIM_UART_PeriodElapsedCallback();
HAL_Delay(0);
/* USER CODE END WHILE */
烧录代码, 看到串口绘图如下:







