从零开始学习VC++6.0之并口控制(第五课 步进电机启动)

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

 

第五课  步进电机启动

 

这一课开始实验控制步进电机。

我用的是步进电机是从实达NX-300针式打印机上拆下的,不过我没有完全拆下来,把其他电路板什么的全部拆掉,保留字车和皮带,进纸电机齿轮部分也都保留,把步进电机的两个插线接出来接到自己购买的驱动板上,这样试验的时候很直观,也可以看到字车平台左右运动。

步进电机的具体型号:字车那个电机为STP-42D1038,边上进纸那个电机为KBL 42LCB345A,都是六芯的步进电机,具体的参数我在“步进电机”目录中再另介绍(迟一点时间整理)。这里主要讲连接方法和VC的程序设计。

一、 CLK脉冲生成

上一课结束时提到了利用Windows系统提供的定时器来生成,这个定时器,实际上就是调用Windows消息管理器(这也是一个知识点,提供很多有用的消息处理及事件处理函数),不知有没有朋友百度到了相关知识,我这里将做一个详细的讲解。

1、界面设计

我们从第四课直流电机启动的工程Portcon3目录,两样复制并粘贴后改成工程Portcon4,再打开工程工作空间。我把原来的几个按钮和代码全删除,重新做,把ID也变了一下,界面如下:

从零开始学习VC++6.0之并口控制(第五课 步进电机启动)_第1张图片

因为我用P14引脚做步进电机的使能控制,所以启动按钮改为ID_P14_1,停止按钮改为ID_P14_0,反转按钮ID_P3_1,正转按钮ID_P3_0。为了方便知道程序中用到了哪些并口引脚,大家也可以不修改或根据自己的想法做,没关系的,不会影响实验。

 

2SetTimer()函数

在程序中直接使用这个函数,编译时肯定会报错,因为还没有添加到工程程序里。

现在我们来添加WM_TIMER事件处理器。

打开“ClassView”-“CPortcon1Dlg”窗口,选择右键菜单“Add Windows Message Handler”,在弹出的窗口中左侧事件列表找到“WM_TIMER”,双击就会移动到右边窗口:

从零开始学习VC++6.0之并口控制(第五课 步进电机启动)_第2张图片

 

点击“确定”后返回到ClassView窗口的“CPortcon1Dlg”列表中就会自动增加了一个OnTimer(UINT nlDEvent),这就是我们需要的定时器了。

从零开始学习VC++6.0之并口控制(第五课 步进电机启动)_第3张图片

成功添加好这个OnTimer(UINT nlDEvent)类后,SetTimer()函数也就出来了,因为是它提供的。SetTimer的详细使用方法在博客VC目录下另一编有说明,从网上转的。这里只简单讲一下。

SetTimer()函数一般使用方法为:SetTimer(0,30,NULL);

这其中用到三个参数:第一个参数0是这个函数的ID,也可以设为123……,在多个定时器事件时用来区分定时器用的。第二个参数30是指30ms(毫秒),也就是我们需要多少时间重复做一件事,CLK脉冲的频率就是从它来的,可以设为11000,分别表示1ms1000ms执行一次定时器事件。第三个参数NULL是指默认的参数,我们使用它就行了。

    调用SetTimer()后所需要做的工作代码,就只能放在OnTimer(UINT nlDEvent)

    调用KillTimer()来关掉不用的定时器,它只有一个参数,就是定时器的ID

二、添加代码

1、  CLK脉冲生成代码

     我这里是用P2引脚连接驱动板的CLK+端(根据自己的驱动板连接)做CLK输出,双击OnTimer(UINT nlDEvent),输入以下代码:

    从零开始学习VC++6.0之并口控制(第五课 步进电机启动)_第4张图片

     因为我这个程序产生的原理就是定时输出01,形成CLK脉冲,在代码中用到变量ab,因为是用来传递01,相对OnTimer属于全局变量,所以把它放到定义void函数外。大家如果有更好的脉冲生成设计方法,可以自行设计的。

程序中的代码(包括后面的同类代码)就不一条一条讲解了,如果之前的实验都掌握了,都能理解的。实在不懂的就自己慢慢分析了。

 

2、  调用SetTimer()函数

这个实验程序中我用控制端口的P14引脚连接驱动板的EN+端(根据自己的驱动板连接)控制步进电机的启动和停止,具体代码如下:

 从零开始学习VC++6.0之并口控制(第五课 步进电机启动)_第5张图片

从启动按钮代码中可以看到SetTimer(0,20,NULL),设定为20ms的脉冲,根据自己的步进电机的改,有些步进电机的启动要求不同,可能需要设稍长的100ms才比较清晰的转动起来,原则上时间ms数值越小,步进电机转得更快,反之变慢。

不过步进电机一般属于低速电机,改为1ms也不会快得起来,这个自己慢慢认识。

3、  步进电机的正反转

步进电机的正反转原理其实就是让两个绕组的供电顺序反过来就实现了,具体的电机原理这里就不考究了,我们买的驱动板都提供这些功能,程序中我们只需要输出01就可以实现正反转功能。这个实验程序中我用P3引脚连接驱动板的CW+端(根据自己的驱动板连接)实现对步进电机的正反转功能,具体代码如下:

 从零开始学习VC++6.0之并口控制(第五课 步进电机启动)_第6张图片

三、执行代码

所有这些工作都完成后,按F7顺利编译通过后再按F5执行,就应该会弹出前面的实验界面。点击相应的启动、停止、反转、正转按钮,字车步进电机一定由你随意操纵。满足感肯定会油然而生。呵呵!

字车步进电机能操纵后,就能够幻想3D打印机的X平台操纵,原来也可以这样……

^_^^_^

这一课的工作较多,大家慢慢来啊,下一课计划把进纸步进电机加进来一起控制。

这几天连续做实验整理有点累,不过如果从第一课掌握到这五课的内容,最主要的程序功能已经实现了,其他控制需要根据自己的思路来设计。

我可能会休息一下。大家等待续啊!

你可能感兴趣的:(VC6++语言,步进电机控制,25针并口控制)