1.设计任务
通过一片C52单片机,控制系统运行时四台步进电动机的驱动器,使之带动功率各不相同的四台步进电动机,完成上位机通过串行口发出的规定动作。为了定位准确,在各关键位置引入了行程开关,在运行时进行自我位置矫正,使得进行每一个阶段时所产生的误差不会累积,整体位置误差控制在5%以内。
2.设计难点
STC89C52只有三个定时器,并且其中之一需要分配给串口进行通信。每个步进电动机即使通过驱动器来控制,由于需要不同的脉冲频率,使得要精确控制步进电动机需要对每一台步进电动机分配一个定时器/计数器。这就使得C52本身的硬件资源比较紧张。因此需要解决的问题就是如何对有限的系统硬件资源进行充分的利用。
同时,各同步电动机若被施加较大负载会产生丢失精度的现象,因此必须通过行程开关来进行定时的位置校核,而这也会产生另一个问题,即外部中断不够用。因此,需要首先对所有行程开关的信号进行位与操作,之后进行判断所产生的中断源的种类。这就对电路部分提出了较高的要求。
整套软件系统需要模块化设计,各层之间结构分明,关联性仅仅取决于各层的调用方式。每层模块之间的接口对上一层软件保持透明,方便各层之间的调用。而各个层级之间相互独立,保持软件系统的扩展性与可修改性。这样可以降低复杂度,使程序更容易修改,开发的速度更快,并且每层利用紧邻的下层服务,更容易记住每个层的功能。
3.程序流程
图10-24为存放流程图。整个结构为自然顺序的循环,来完成上位机的一个存或者取的任务。上位机先取出用来存放物品的盒子,然后用户将所要存放的东西放入取来的盒子之中,之后向单片机发出信号,单片机将储物盒上升到储物柜之中,将装有所存放东西的储物盒返回之前的位置,完成整个存放过程。而取的过程同样按照存放任务的循环,将所需的储物盒取出,然后再放回,完成取出物品的循环。存放取出的过程,通过上位机进行控制,中间各个运行阶段的间隔时间完全通过用户来控制,使得用户进行各阶段操作时不会产生紧张的情形。
(www.xing528.com)
图10-24 存放流程图
4.串口通信协议
整个运动过程中与上位机的通信并不频繁,通信仅在进行任务分配时进行,也就是在每次动作循环前后进行数据传输与确认。电路采用12MHz晶体振荡器,为保证通信之间的精度,减少误码的发生,采用最高2400波特率,保证与上位机之间通信不会出现信号丢失现象,并且在软件系统中进行通信校验的步骤,如CRC32即循环冗余校验检测。串口通信协议对照表见表10-7所示。
表10-7 串口通信协议对照表
5.底层硬件驱动程序设计
硬件系统所选用的步进电动机型号不同,所对应的驱动器的型号也不相同。对于STC89C52来说,信号处理所占用CPU的时间不宜过长,尤其在中断之中,不适合进行大量的运算工作,特别是占用资源最高的除法运算,因此运算要尽量在中断之外进行,并且尽量减少运算的次数。对于时间比较敏感的阶段,甚至可以采用查表法来进行,以空间复杂性来减少时间上的复杂性,使整个系统程序处理的效果最高。此外,对编译后的代码进行逆向阅读,进行反汇编,优化程序效率。
由于定时器与外部中断源的缺少,程序尽量采用单线程控制,完成额定工作目标,并且重复利用定时器与中断,相互联系而又彼此数据上保持独立,使得单片机的资源充分发挥作用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。