资深版主
- 积分
- 14287
- 金钱
- 14287
- 注册时间
- 2018-8-3
- 在线时间
- 1147 小时
|
发表于 2023-7-11 15:51:45
|
显示全部楼层
- case DECEL:
- step_count++; /* 步数加1 */
- g_add_pulse_count++;
- if(g_srd.dir == CW)
- {
- g_step_position++; /* 绝对位置加1 */
- }
- else
- {
- g_step_position--; /* 绝对位置减1 */
- }
- g_srd.accel_count++;
- new_step_delay = g_srd.step_delay - (((2 * g_srd.step_delay) + rest)/(4 * g_srd.accel_count + 1)); /* 计算新(下)一步脉冲周期(时间间隔) */
- rest = ((2 * g_srd.step_delay)+rest)%(4 * g_srd.accel_count + 1); /* 计算余数,下次计算补上余数,减少误差 */
- /* 检查是否为最后一步 */
- if(g_srd.accel_count >= 0) /* 判断减速步数是否从负值加到0是的话 减速完成,直接在此关闭定时器输出以及中断 */
- {
- step_count = 0; /* 清零步数计数器 */
- rest = 0; /* 清零余值 */
- /* 关闭通道*/
- HAL_TIM_OC_Stop_IT(&g_atimx_handle, ATIM_TIMX_PWM_CH3);
- ST3_EN(EN_OFF);
- g_motion_sta = 0; /* 电机为停止状态 */
- }
- break;
复制代码
|
|