从零开始学习C++6.0之并口控制(第七课 步进电机的步数控制)

来源:互联网 发布:数据审核制度 编辑:程序博客网 时间:2024/04/29 20:16

从零开始学习C++6.0之并口控制 

 步进电机的步数控制

 

因为过年,已经好久没跟进这个步进电机的程序控制了,其实我自己也还没有学到太多的新东西,所以不好意思写出来。

年前最后一编博文提到精确控制步进电机步数的程序,我这次把这个问题说一下,在这里尽可能详细的说明,可供和我一样处于摸索阶段的朋友参考。大家如果有什么更好的控制方法,希望能以留言或邮件形式(178268235@qq.com)交流。

1、 步进电机脉冲

步进电机完成一个步进角需要一个完整的脉冲上下沿(之前我以为执行一次定时器输出一个10就可以了,实验测试中才发现这个想法很可爱^_^)。比如1.8°步进角的电机,完成一圈需要200个脉冲,实际上在控制定时器函数函数OnTimer执行了200个高电平1200个低电平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°,在这种不完全整步的情况下,走走停停完成一圈,就会产生误差。

这种步进电机的误差,有些驱动板提供脉冲细分以减小误差,其实我们通过程序对步进电机步数进行统计,在一定的步进量后进行补偿,有点类似于归零。这只是一个思路,我自己也还没有编写这个补偿程序,在以后的实际应用中一定会编写的,因为这误差控制是必须的。

今天就说这么一丁点,虽然知识点不多,但我个人觉得挺重要的,起码理解了步进控制的步进原理和精确控制。如果不掌握这一点,在实际应用中,就实现不了“要它走几步就走几步”了。这可是智能小车和机器人控制的一些基础程序原理。

谢谢大家支持!最近努力中,计划把针式打印机拆下的步进电机驱动电路设计一下,届时再和大家分享!

 

 

原创粉丝点击