复制
收藏
提问
简洁
static u16 SM_SpeedController(eSM_ID smid) { u32 rpul; if(sm[smid].smRP.adjSpeed==true) { if(sm[smid].smRP.thisTimeRunSteps<sm[smid].smRP.totalSteps) { if(sm[smid].smRP.frlSteps==0) sm[smid].smRP.frlSteps=1; if(sm[smid].smRP.thisTimeRunSteps<=sm[smid].smRP.frlSteps) { //加速阶段 return sm[smid].smRP.lowSpdArr-sm[smid].smRP.thisTimeRunSteps*(sm[smid].smRP.lowSpdArr-sm[smid].smRP.highSpdArr)/sm[smid].smRP.frlSteps; }else { rpul=sm[smid].smRP.totalSteps-sm[smid].smRP.thisTimeRunSteps; //剩余脉冲数 if(rpul<=sm[smid].smRP.frlSteps) //降速阶段 return sm[smid].smRP.lowSpdArr-rpul*(sm[smid].smRP.lowSpdArr-sm[smid].smRP.highSpdArr)/sm[smid].smRP.frlSteps; else return sm[smid].smRP.highSpdArr; //中间匀速阶段 } }else { return sm[smid].smRP.lowSpdArr; } } return sm[smid].smRP.lowSpdArr; }
0秒前
全网
文档
学术
百科
知识库
回答简洁模式
深入研究一些
梯形加减速控制算法实现
- 算法概述:该函数实现了步进电机的梯形加减速控制算法,通过调整脉冲频率来控制速度。23
- 加速阶段:在加速阶段,速度从基础频率逐渐增加到最高频率,脉冲频率线性增加。9
- 匀速阶段:达到最高频率后,电机以恒定速度运行,脉冲频率保持不变。7
- 减速阶段:在减速阶段,脉冲频率从最高频率逐渐降低到基础频率,实现平滑减速。8
代码逻辑分析
- 初始化条件:首先检查是否需要调整速度,如果不需要则直接返回基础速度。1
- 加速判断:如果当前步数小于加速步数,则根据当前步数计算加速过程中的速度。9
- 匀速判断:如果当前步数大于加速步数且小于总步数减去加速步数,则电机以最高速度运行。7
- 减速判断:如果当前步数小于总步数减去加速步数,则根据剩余步数计算减速过程中的速度。8
- 结束条件:如果当前步数等于或超过总步数,则速度降至基础速度。1
应用场景
你觉得结果怎么样?