多通道步进电机控制系统上位机设计
来源:爱够旅游网
第48卷 第5期 2015钜 截t MICROMOTORS Vo1.48.No.5 Mav.2015 5月 多通道步进电机控制系统上位机设计 吴康,刘景林 (西北工业大学,西安710129) 摘要:针对多通道步进电机细分控制系统,设计了一套上位机控制程序。论文详细的介绍了上位机的功能及各子 程序的实现方法,给出了部分关键程序的代码,上位机使用VC++的MSComm控件来实现与控制系统的通信,所 设计的上位机界面友好,可以设定电机运行速度及方向、细分控制模式、电流给定等功能;并且上位机可以实时对 系统进行监测。实验结果表明上位机能够对系统进行很好的控制和监测。 关键词:步进电机;上位机;MSComm控件;细分 中图分类号:TM383.6 文献标志码:A 文章编号:1001—6848(2015)05—0066—04 Design of PC Program for Multi——channel Stepper Motor Control System WU Kang.LIU Jinglin (Northwestern Polytechnical University,Xi an 710129,China) Abstract:According to subdivision control system of multi—channel stepper motor,the paper designed a set of host computer program.The paper detailed introduced the function of PC program and the method of each sub—module。gave some key programs.The Host was realized by Microsoft communication control of VC++, the PC program was designed friendly,could set motor speed and direction,could give subdivision control mode and set given current;also could realized the real—time monitor to control system.The experimental results showed that the computer could control and realized monitor to the system wel1. Key words:stepper motor;PC;mSComm;subdivision 0 引 言 步进电机具有易于开环控制、精度高,无累积 误差,转速容易控制等优点,在工业生产、仪器仪 表及天线伺服等领域得到了广泛的应用。由于实际 工作和生产的需要,为了提高生产效率需要控制多 台电机同时或协同工作,不仅需要控制电机平稳有 效的工作,还要对其工作状况进行显示以及时了解 系统的工况避免不必要的损失。随着计算机、电子、 机进行控制;下位机收到控制指令后对系统进行控 制,并将系统的工作状况上传给上位机进行显示、 数据保存等处理。本文主要介绍了三通道步进电机 控制系统上位机软件的实现过程和方法。 1 系统总体结构 系统的总体结构如图1所示,下位机是以TI公 司的数字信号处理器F28335为控制核心的,它主要 通讯技术的飞速发展,工厂对生产现场设备的运行 管理控制,可视化操作等综合水平提出了新得要求, 在一些特殊环境需要对系统进行远程控制并实时显 示系统工作状况,上位机的开发就显得尤为重 要了 。 完成控制指令的解算,然后通过步进电机专用驱动 芯片来驱动3台两相混合式步进电机工作,电机采 用细分驱动技术,避免了低频振荡的问题并提高了 电机在高频时的带载能力。电机控制器也可以发出 指令来控制电机运行,比如拨盘、变阻器等,也能 本系统以基于DSP28335的三通道步进电机控制 器为下位机,微机为上位机,两者通过RS232串行 接口进行通信,在Vc++6.0环境下开发了一套监控 软件。上位机有很好的人机交互界面,以便对下位 够简单的显示电机运行信息;采用上位机进行控制 可以更加直观、方便,更加详细的显示系统的工作 情况。 上位机采用VC++6.0提供的串行通讯控件 MSCOMM来实现,通过图形化编程,实现了DSP与 收稿日期:2014—09—01 作者简介:吴康(1989),男,硕士研究生,研究方向为伺服系统控制。 ・68・ 簸 靠 48卷 3各子程序的实现方法 在具体的编程之前,需要向项目添加MSComm 控件,控件添加成功之后,会在工具栏出现一个类 似电话形状的图标,要用它就直接把它拖到窗口即 可。每个MSComm控件对应着一个串行端口,如果 应用程序需要同时访问多个串行端口,必须使用多 个MSComm控件。 MSComm控件提供了很多重要的属性,要实现 串口通信需对这些属性进行设置,其中最常用的属 性如表1所示。 表1 MSComm控件的常用属性介绍 MSComm控件提供了查询方式和事件驱动两种 串口通信方法。事件驱动相当于中断,当有通信事 件或错误产生时,MSComm控件的OnComm事件会 被激发,在OnComm函数中添加相应的代码就可以 完成串行通信,事件驱动响应及时,是处理串行端 口交互作用很有效的方法,本系统采用事件驱动 方式。 3.1通信初始化子程序 要实现上下位机的通讯,需要对串口、 MSComm控件、滑块等进行相应的初始化。通讯初 始化子程序包括串口初始化、MSComm控件初始化、 Slider滑块初始化等程序。在进行初始化之前,需要 对各个控件添加成员变量和相应的事件。在为 MSComm控件添加一个CMSComm类型的m—Comm 变量后就可以进行初始化了。 (1)通讯端口选择。 选择COM1为通讯端口(系统默认的是COM1 口),在进行初始化之前需要关闭串口,通过以下语 句来实现。 if(!in—Comm.GetPortOpen()) m—Comm.SetPortOpen(FALSE);//关闭串口 in—Comm.SetCommPort(1);//选择COM1口 (2)波特率及数据帧格式初始化。 波特率是串行通信中非常重要的概念,即每秒 钟传输二进制数据的位数(bits),只有收发双方的波 特率一致才能保证通信的正常进行。通过MSComm 控件的Settings属性来实现。 nl—ctrlComm.SetSettings(”9600,n,8,1”); 字符串“9600,n,8,1”表示采用9600的波特 率,不作奇偶校验,每帧数据为8bits,1bit停止位。 (3)MSComm控件初始化 在采用OnComm事件驱动时,需要对引发事件 方式、缓冲区大小、接受数据的方式等进行初始化。 具体如下: 113一Comm.SetInputMode(1);//二进制传输 m—ctrlComm.SetInBufferSize(1024);//设置输 入缓冲区大小为1024 m—ctrlComm.SetOutBufferSize(1024);//设置 输出缓冲区大小为1024 m—ctrlComm.SetRThreshold(1);//参数1表示 每当串口接收缓冲区中有多于或等于1个字符时将 引发一个接收数据的OnComm事件。 ITI~ctrlComm.SetInputLen(0);//设置当前接收 区数据长度为0 in—ctrlComm.GetInput();//先预读缓冲区以清 除残留数据 (4)初始化完成之后,需要打开串口。 既可以在初始化函数中来实现,也可以通过按 钮事件来实现。本系统选择第二种,单击一次打开 串口,再次单击关闭串口并在编辑框内显示串口 状态。 if(!in—ctrlComm.GetPortOpen()) nl—ctrlComm.SetPortOpen(TRUE);//打开串口 else AfxMessageBox(”cannot open serial port”); 3.2数据发送子程序 用户把电机的预置频率、细分运行模式、电流 给定等电机控制指令设定之后,通过按钮事件把有 效数据写入到发送缓冲区。具体方法是对相应的按 钮添加特定的事件函数,然后在事件函数中来实现 数据的发送。其中1}≠电机正转的控制程序如下: void CmctrlDlg::OnBUTTONZhengl() { …//把需要发送的数据放在bySend数组里