这些都是一些参加比赛的获奖程序,由工程师写的评语,具有很高的学习价值。发这样的帖子 主要是为了让大家去研究别人的程序,然后对比自己的思路,最后看看评委的评价找出不足然后改正
本程序由网友flycat编写 感谢分享
8.2版本:
8.5版本:
评委评语:
1 程序界面美观,有创意,但控件风格有不一致。文档注释详尽。程序代码显得稍显复杂,若把类似控件和数据以数组,簇等表示,程序代码应当可以更清晰
2 程序运行资源估算,程序基本没发现BUG ;
3 程序结构优化上欠佳,为何多个“结束购买”,和“取物”按钮为何?这个设计显得画蛇添足。
tiME OUT的事件可以用VALUE CHANGE来替代,以减少CPU运算资源(算法);
CP1到CP5 应该使用用族来设计,以减少事件使用,优化程序;
在“无效事件”中,最好把按钮DISABLE,或者每个按钮都有相应操作提示
4 GUI 滚动欢迎词设计的不错,GOOD,但整体设计非常一般,程序连线,布局稍微松散,乱。
5 控件名称不合理、没有对同类控制使用同一事件结构、数据类型强制转换注意细节
1
|
|
|
|
从零开始学习C++6.0之并口控制
步进电机的步数控制
因为过年,已经好久没跟进这个步进电机的程序控制了,其实我自己也还没有学到太多的新东西,所以不好意思写出来。
年前最后一编博文提到精确控制步进电机步数的程序,我这次把这个问题说一下,在这里尽可能详细的说明,可供和我一样处于摸索阶段的朋友参考。大家如果有什么更好的控制方法,希望能以留言或邮件形式( 178268235@qq.com)交流。
1、 步进电机脉冲
步进电机完成一个步进角需要一个完整的脉冲上下沿(之前我以为执行一次定时器输出一个1或0就可以了,实验测试中才发现这个想法很可爱^_^)。比如1.8°步进角的电机,完成一圈需要200个脉冲,实际上在控制定时器函数函数OnTimer执行了200个高电平1和200个低电平0,合计执行400次定时器程序才能完成一圈的行走。
2、 实验程序实现
在程序窗口中我们布局一个编辑按钮(IDC_PX1)用做输入步数,并将这个步数值传递给一个全局变量(int pxb=0),其中执行按钮中的两行代码如下:
pxb=GetDlgItemInt(IDC_PX1); //接受输入步数值
pxb=pxb*2; //一个完整的高低电平脉冲才走一步,需要2倍数值
以下是在时间函数OnTimer中的截图,只在原来的基础上增加了if () else 语句为循环做控制,达到根据需要值输出脉冲数量,进而精确控制电机步数。最后面a++那两行代码可以不要,我这里是附带过来,可适当修改,知道执行次数,就可变通为步数计步器等。全局变量pxb将输入的步数乘以2后,传递给定时器函数做为执行次数,产生定量脉冲。
3、 误差问题
有关步进电机的误差问题,在网上也有很多这方面的资料,比如用1.8°步进角的电机实现30°、45°、60°、90°的控制,其中45°和90°的步进控制就很容易,走25步就步进了45°角,走50步就步进了90°角,25步和50步都是整数。
然而步进30°角时,需要16.7步,只能取整走17步,实际上走了30.6°角;而步进60°角时走33步,实际走了59.4°,在这种不完全整步的情况下,走走停停完成一圈,就会产生误差。
这种步进电机的误差,有些驱动板提供脉冲细分以减小误差,其实我们通过程序对步进电机步数进行统计,在一定的步进量后进行补偿,有点类似于归零。这只是一个思路,我自己也还没有编写这个补偿程序,在以后的实际应用中一定会编写的,因为这误差控制是必须的。
今天就说这么一丁点,虽然知识点不多,但我个人觉得挺重要的,起码理解了步进控制的步进原理和精确控制。如果不掌握这一点,在实际应用中,就实现不了“要它走几步就走几步”了。这可是智能小车和机器人控制的一些基础程序原理。
谢谢大家支持!最近努力中,计划把针式打印机拆下的步进电机驱动电路设计一下,届时再和大家分享!
|
|
|
|
|