本贴主要展示初始硬件验证,这算是本人的习惯吧,对于新到手的物料,习惯先进行硬件验证:即只是用最少的模块,搭建最简的测试平台,使用最少的外设,对相关设备进行验证。

这边采用12V开关电源作为电机电压,使用STM32U5开发板做主控,通过TMC2209对步进电机进行控制。
/* 简单的微秒级软件延时,用于产生脉冲 */
static void delay_us(uint32_t us) {
uint32_t count = us * 8; // 这个值可能需要根据你的系统时钟调整
while (count--) {
__NOP();
}
}对于STEP脉冲延时,暂时不使用PWM生成,使用最简单的延时生成
/* 1. 使能电机驱动器 (EN 引脚输出低电平) */
HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_RESET); // EN低电平有效
HAL_Delay(100); // 等待驱动器就绪
/* 2. 设置方向 (DIR 引脚) */
// 正转:设置DIR引脚为高电平
HAL_GPIO_WritePin(DIR_GPIO_Port, DIR_Pin, GPIO_PIN_SET);
// 如果要反转,将上面的 SET 改为 RESET 即可
/* 3. 发送脉冲 (STEP 引脚) */
//printf("Motor is running forward...\r\n");
for(StepPulseCount = 0; StepPulseCount < TargetStepCount; StepPulseCount++)
{
// 产生一个脉冲:高 -> 低
HAL_GPIO_WritePin(STEP_GPIO_Port, STEP_Pin, GPIO_PIN_SET);
delay_us(500); // 脉冲宽度,调整此值可改变速度,值越小越快
HAL_GPIO_WritePin(STEP_GPIO_Port, STEP_Pin, GPIO_PIN_RESET);
delay_us(500); // 脉冲间隔,调整此值可改变速度
}
/* 4. 停止并失能电机 */
//printf("Motor stopped.\r\n");
// 失能电机 (EN 引脚输出高电平)
HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_SET);
/* 5. 停止一段时间再循环 */
HAL_Delay(5000); // 停止5秒主要代码为让电机转一段时间,在停一段时间,对电机、核心板、电源、模块进行验证,确认硬件运行正常,线路接线没问题,防止后面代码已经写好,但硬件故障,以为是代码问题,增加故障排除时间。
我要赚赏金
