娱乐建设网站,iis架设jsp网站,WordPress写小说插件,兰州网站seo哪家公司好摘要#xff1a;根据前两节内容#xff0c;已完成所有计算工作#xff0c;本节内容介绍具体单片机程序流程及代码
一、程序流程图 根据前两节文章内容可知#xff0c;T型加减速的关键内容是运动类型的判断以及定时器初值的计算#xff0c;在输出运动参数后即可判断出运动…摘要根据前两节内容已完成所有计算工作本节内容介绍具体单片机程序流程及代码
一、程序流程图 根据前两节文章内容可知T型加减速的关键内容是运动类型的判断以及定时器初值的计算在输出运动参数后即可判断出运动类型再根据运动类型在主循环程序中计算定时器初值在定时器中断中判断各运动阶段是否完成最终实现T型加减速过程程序流程图如下所示 二、误差分析 在动态计算的过程中由于51单片机没有硬件乘、除法器下述定时器初值的递推计算耗时最多为尽量提升性能将此步计算放入了主循环中以节省定时器中断计算量 在12Mhz,12T模式下STC89C52RC单片机实测控制最高转速约为200RPM,最大的瓶颈在于51单片机的主频速度实太慢此处可以勾选STC单片机特有的6T双倍速模式电机的转速上限会有明显的提升
三、关键程序代码
void cal_init()//预计算
{K1sqrt(a*X);tn4056000/K1;//计算t1cn65536-tn; //计算c1 TH0cn/256;//装定时寄存器初值TL0cn%256;angle_stepangle*X/18; //计算总步数K210*w*w/a;K310*X*w*w/(36*a);
}void cal_cn()//计算cn
{if(ready_flag){ready_flag0;if(flag2){tntn-2*tn/(4*n1);}else if(flag4){tntn2*tn/(4*n-1);}cn65536-tn;}
}void cal_motion()//计算运动模式
{if(angle_step1) flag1; //转一步else //转多步{if(angleK2) //有匀速过程{motion_flag1;angle2_stepK3;angle3_stepangle_step-2*K3;angle4_stepK3;}else //无匀速过程{motion_flag0;angle2_stepangle_step/2;angle4_stepangle_step-angle2_step;}}
}void main()
{device_init();TR01;//开步进电机while(1){cal_cn();}
}void time0_int() interrupt 1
{TH0cn/256;//装定时寄存器初值TL0cn%256;PUL1;_nop_();_nop_();nop_();nop_();PUL0;//上升沿产生脉冲switch (flag){case 1: //转1步TR00; break;case 2: //加速阶段n;if(nangle2_step) //加速结束{if(motion_flag) //有匀速{flag3; n0;}else //无匀速{flag4; nangle4_step;}}break;case 3: //匀速阶段n;if(nangle3_step){flag4;nangle4_step;}break;case 4: //减速阶段n--;if(n0){TR00; //关步进电机}break;default:break;}ready_flag1;
}四、总结 上述代码实现了步进电机采用T型加减速的方式转动5圈输入参数有驱动器细分值转动角度加速度、最大角速度。其中转动角度的单位是0.1°例如输入100实际代表转动10°。此种控制方式相对于S曲线加减速灵活性更高可以实现加减速大小的实时调节灵活性较好同时可以大幅节省data资源
五、附件 完整代码工程文件请见微信小程序