使用STM32H723VGT6芯片驱动达妙电机
首先,安装H7的pack包:
Arm Keil | Keil STM32H7xx_DFP
在这个网站中下载例如这个版本的pack包:

下载完成后,双击pack文件进行安装,会自动安装到keil的安装路径中,再电机Next:

安装完成,点击Finish:

接下来就可以开发基于STM32H7的工程了,基于达妙官方开源的stm32例程【dm_ctrl(h7 fdcan)v1.1 裸机】进行研究:
官方文档:2. 达妙电机上手流程(二)-使用开发板控制电机 - 飞书云文档
查看文档中的MIT模式控制,注意motor[Motor1].id我的设置为了0x03:
/* 在 dm_motor_ctrl.c 文件中 */
void dm_motor_init(void)
{memset(&motor[Motor1], 0, sizeof(motor[Motor1])); // 初始化Motor1电机结构体// 设置Motor1的电机信息motor[Motor1].id = 0x03;motor[Motor1].mst_id = 0x00; // 实际没有用上,只做标识作用motor[Motor1].tmp.read_flag = 1;motor[Motor1].ctrl.mode = mit_mode; // 选择 MIT 模式motor[Motor1].ctrl.vel_set = 1.0f; // 设置速度为 1motor[Motor1].ctrl.pos_set = 0.0f;motor[Motor1].ctrl.tor_set = 0.0f;motor[Motor1].ctrl.cur_set = 0.0f;motor[Motor1].ctrl.kp_set = 0.0f; motor[Motor1].ctrl.kd_set = 1.0f; // 设置 Kd 为 1// DM4310的 PMAX VMAX TMAXmotor[Motor1].tmp.PMAX = 12.5f;motor[Motor1].tmp.VMAX = 30.0f;motor[Motor1].tmp.TMAX = 10.0f;
}/* 在 main.c 文件中*/
int main(void)
{/* 截取添加的代码如下 */power(1); // 打开开发板的可控电源接口HAL_Delay(1000); // 等待电机上电自检通过bsp_fdcan_set_baud(&hfdcan1, CAN_CLASS, CAN_BR_1M); // 设置CAN为经典模式 波特率为1Mbsp_can_init();dm_motor_init();HAL_Delay(10);/* 往电机的寄存器里面写入MIT模式 */write_motor_data(motor[Motor1].id, 10, mit_mode, 0, 0, 0); // 修改电机为MIT模式HAL_Delay(100);save_motor_data(motor[Motor1].id, 10); // 保存电机参数HAL_Delay(100);dm_motor_enable(&hfdcan1, &motor[Motor1]); // 使能电机HAL_Delay(1000);HAL_TIM_Base_Start_IT(&htim3); // 开启1ms定时器中断用于发送can命令while (1){}
}// 1ms 定时器中断函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if (htim->Instance == TIM3) {dm_motor_ctrl_send(&hfdcan1, &motor[Motor1]);}
}/* 在 dm_motor_ctrl.c 文件中 */
// 接收中断回调 处理电机回传的信息,默认master id为0,所以这里 rec_id = 0
void fdcan1_rx_callback(void)
{uint16_t rec_id;uint8_t rx_data[8] = {0};fdcanx_receive(&hfdcan1, &rec_id, rx_data);switch (rec_id){case 0x00: dm_motor_fbdata(&motor[Motor1], rx_data); receive_motor_data(&motor[Motor1], rx_data); break;}
}
将上面代码下载入单片机,可以观察到电机匀速旋转
