广州周立功单片机科技有限公司 基于Freescale Cortex-M4单片机的三相无刷直流电机驱动器
图4.22 当前绘画层改变示意图
6. 电机启动停止的流程
菜单选项中的启动电机和停止电机的选项并不是真正的启动或者停止电机,而是向电机驱动程序模块发送命令,改变电机的状态,当电机驱动程序检测到状态的改变时,才真正的改变电机的状态。这种设计方法增加了模块的独立性,减小了模块之间的耦合,所以模块和模块之间可以独立编写,然后方便的整合,这正是现代程序设计所推荐的方法。电机的启动过程如图4.23所示。
图4.23 电机启动流程图
电机的关闭比较简单,首先向电机发送停止命令,然后把电机图标变成未启动状态,然后把当前绘画层加一,停止动态更新电机信息。
7. 电机加速减速的流程
控制电机加速和减速的方式和启动停止电机的方式一样,菜单管理程序并不正真的去控制电机的加速或减速,而是只改变一次状态,然后由电机驱动程序真正改变转速。 图4.24是电机加速时的流程图,首先只有在电机运行状态下,此功能才会被响应。由于电机有开环和闭环状态,所以在开环状态改变转速是通过改变占空比,每按一次加速按钮,占空比增加10,在闭环状态,改变转速是改变电机的目标转速,然后通过PID调节来改变实际转速。每按一次按钮,速度之增加一百。电机的转速有上限,所以为了保护电机,本系统将最大目标速度设置为4500rpm,占空比最高为100。
32
广州周立功单片机科技有限公司 基于Freescale Cortex-M4单片机的三相无刷直流电机驱动器
图4.24 加速过程流程图
图4.25是电机减速时的流程图。和加速设置一样,开环状态下,每按一次减速按钮,占空比减少10,在闭环状态下,每按一次减速按钮,目标速度值减少100rpm。由于电机转速不能过低,所以为了保护电机的低速运转,减速时只能减到设置的最小值,本系统中开环下最小占空比为10%,闭环有感模式最小转速为200rpm,闭环无感模式最小转速为500rpm。
图4.25 减速过程流程图
8. 速度波形放大缩小的流程
速度波形放大缩小的流程十分类似,在电机运行和停止状态都可以放大或缩小波形进行方便的观察。波形放大按钮通过减小坐标轴最大值和最小值之间的差距来使波形放大,波形
33
广州周立功单片机科技有限公司 基于Freescale Cortex-M4单片机的三相无刷直流电机驱动器
缩小按钮通过增加坐标轴最大值和最小值之间的差距来使波形缩小。波形放大和缩小菜单函数并没有实际改变波形,而是发送“改变波形”的命令给能真正改变波形的函数,系统会自动根据坐标轴最大值和最小值来调整波形的显示,这里再次体现了本系统程序设计的优点。 在波形放大缩小的设计中遇到了一些要解决的问题,如图4.26所示,假设当前速度值在2000rpm上下波动,(以下,“最大值”指速度坐标轴的最大值,“最小值”指速度坐标值的最小值)而最大值为5000rpm,最小值为0rpm,放大波形就是减少最大值和最小值之间的差距,假如每执行一次波形放大,最大值减少500rpm,变为4500rpm,最小值增加500rpm,变成500rpm。
图4.26 波形放大示意图
第一个问题是必须编程判断最小值是否小于当前速度值,最大值是否大于当前速度值,因为波形显示要实时跟踪当前速度曲线,要把波形放到能观察的范围。所以如上例最小值加3次500rpm之后,为1500rpm,就不能再加了,而最大值减5次500rpm之后,为2500rpm,就不能再减了。增加了编程判断的复杂性。
第二个问题是波形放大不够精细,通过上例发现,我们放大波形能放大的最大程度就是最大值为2500rpm,最小值为1500rpm,如图4.26(b)所示。当然可以通过改变增加的值来调整精细度,比如若最小值每次增加100rpm,最大值每次减少100rpm,然后我们波形能放大的最大程度就是最大值为2100rpm,最小值为1900rpm,如图4.26(c)所示。然而实际问题没有解决,那就是编程时还是要指定每次的改变值,而一旦指定就不能改变。而且这样的设计带来新的问题,假如以50rpm为基数,那么从最大值5000rpm调整到2050rpm要调整58次,这样的设计给用户带来很大的不变,用户可能希望只通过几次按键就把波形放大到他们想要的状态,而且不会有放大程度的限制。
解决方案也很简单,只需要最大值减去最大值与当前速度差值的二分之一,而最小值加上当前速度与最小值相差的二分之一就可以,这种二分法最小值永远不会大于最大值,省去了判断的麻烦,而且在最大值和当前速度差值大的时候,很快的放大,而差值小的时候,又慢慢放大。关键代码如程序清单4.3所示,GsMMrecord是记录波形最大值最小值的结构体,ssHmaxspeed是历史记录中速度最大值,ssHminspeed是历史记录中速度的最小值。GsMoter.usActAvgSpeed是当前电机速度。扩展思考一下,我们可以用三分法,四分法等等。
程序清单4.3 波形放大时坐标轴调整的部分代码
GsMMrecord.ssHmaxspeed -= /* 坐标轴最大值调整 */
((GsMMrecord.ssHmaxspeed - GsMoter.usActAvgSpeed - 20) >> 1);
GsMMrecord.ssHminspeed += /* 坐标轴最小值调整 */
34
广州周立功单片机科技有限公司 基于Freescale Cortex-M4单片机的三相无刷直流电机驱动器
((GsMoter.usActAvgSpeed - GsMMrecord.ssHminspeed -20) >> 1);
在实际应用中,因为速度曲线会一直波动的原因,对波形放大的程度做了一定的限制,波形缩小的方法和波形放大的方法类似。
9. 全屏非全屏切换的流程
由于串口屏大小的限制,又在控制界面加了一些控制选项,所以非全屏状态下,显示波形的界面显得比较小,所以提供了一个全屏的功能,在全屏状态下,控制菜单被隐藏,能显示更多的速度信息,这是一个比较实用的功能。
在从非全屏状态到全屏状态的相互切换的过程中,会遇到问题,怎么通信告诉绘制速度曲线的函数,以及绘制时间坐标轴的函数现在是在全屏状态还是非全屏状态。
方案一是编写函数的时候用if判断语句,但是这样对全屏和非全屏就要进行两种处理,增加了编程的复杂度。
方案二是编写一个巧妙的宏映射机制,这种编程思想借鉴MFC中处理MESSAGE_MAP的方法,模仿MFC定义几个精妙的宏来实现\消息映射\。免去了switch-case或者if-else的麻烦。
本系统软件设计使用方案二,程序中大量使用了宏映射的机制,减少了编程复杂性,而且理论上编译会生成更少的代码,执行速度会更快。
10. 退出控制台的流程
图 4.27是退出控制台的流程图,当电机正在运行时,用户试图退出控制台,将会提醒用户先把电机关闭,然后才能退出控制台,增加了安全保障。
图 4.27 退出控制台的流程图
4.8.3 电机参数设置菜单切换的流程
图4.28是电机参数设置菜单的流程图。在控制台窗口上面,都是一些经常用到的功能,电机参数设置属于高级设置,在这个界面可以设置电机开环闭环的速度控制方式,顺时针和逆时针的运行方向,以及有感和无感的控制方式。当速度闭环时可以设置具体转速,当速度开环时可以设置占空比,当用户在开环和闭环之间切换时,会有对话框提醒用户当前可以设置转速还是占空比,减少了用户的疑惑,增加了软件的友好性。软件还对速度上限和速度下限进行了保护,防止不当的操作。
35
相关推荐: