新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于Proteus 的PC 机对步进电机运动控制仿真

基于Proteus 的PC 机对步进电机运动控制仿真

作者:时间:2014-01-02来源:网络收藏
1引言

在简单的开环工作方式下能够达到相当高的定位精度,且低速运行时又可输出很大的转矩,因此在运动控制中得到了广泛的应用[1]。PC机控制系统,应用于多个领域如数控机床、机器人、激光加工设备等各种仪器设备。一个完整的PC机控制系统,下位机与PC机构成主从式控制结构:PC机负责人机交互界面的管理,包括键盘和鼠标的管理、系统状态的显示、控制指令的发送等部分工作;下位机完成运动控制的所有细节,包括脉冲和方向信号的输出、自动升降速的处理等部分工作。实际下位机开发过程复杂,主体包含硬件电路设计和控制程序设计两方面。控制程序设计过程需要软件调试、硬件调试、系统调试3个过程。软件调试一般比较容易进行,但如果要进行牵涉硬件的硬件调试或系统调试,包括元器件选用、PCB板制作、元器件焊接、程序烧录环节,其中任一环节的疏漏都可能造成程序调试失真。通过中各虚拟仪器所构建硬件电路,调试所设计程序的控制效果,达到虚拟硬件调试、虚拟系统调试程序的目的,为PC机步进电机系统开发提供有效的理论实践依据,避免因硬件电路设计过程错误引起的程序异常或硬件实验条件限制影响开发。

是英国Labcenter公司开发的电路分析与实物仿真软件实现了单片机仿真和SPICE电路仿真相结合,具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘、LCD、虚拟仪器、示波器、逻辑分析仪系统仿真的功能;支持主流单片机系统的仿真功能;在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态;支持第三方的软件编译和调试环境,如KeiluVision2、MTLAB等软件。由于软件本身的优良仿真特性,所设计程序能于Proteus中完成仿真过程的同时,即基本证明了所设计程序的准确性,从而基本完成了系统开发中的控制程序设计部分,并为系统硬件电路设计提供指导意义。

2设计要求

以构建基于Proteus的PC机对步进电机系统为例,上位机人机交互界面由VB开发完成;下位机硬件电路由Proteus中各虚拟仪器所构建完成;下位机控制程序由KeiluVision2开发完成;期间还要采用虚拟串口(VSPD),用于模拟一根串口通信线,实现上位机与下位机的串口通信,最终实现上位机(VB)对下位机(Proteus)中步进电机的实时控制过程。

2.1系统总体框图

上位机通过RS232C串口通信方式实现对下位机下达指令,下位机AT89C51单片机根据接受到的指令,按一定的时序产生A、B、C、D四相控制信号,分别实现单拍、双拍、单双拍的三种步进电机驱动方式。在实际运用中,单片机与步进电机之间一般还需要信号隔离、放大集成电路。下位机部分增设显示功能,由LCD1602来完成实时地显示步进电机运动状态。Proteus的仿真电路与实际电路可以有一定的区别,考虑到仿真的实践性验证,设计出实际仿真适用的整个控制模块,如图1所示。



2.2下位机仿真系统结构设计

在实际运用中,单片机控制步进电机需要隔离、放大模块。在仿真时该控制模块可省略,直接将步进电机与AT89C51相连接,也可在仿真电路中使用,因这里主要是为了检测脉冲的控制效果,所以省去隔离、放大电路。

串口通信部分[3],非仿真控制中,上位机电平是RS232C电平,而下位机是TTL电平,不能直接通信的,所以增加一个电平转换芯片MAX232。在实际仿真中,由于上下位机都是在PC中进行,所以无需电平转换芯片,否则会发生错误。实际仿真时,串口的2、3位直接与AT89C51的RXD、TXD直接对接就可以了。

LCD部分显示电路,当单片机驱动LCD时,由于信号的传输过程会有损耗,所以在实际应用驱动LCD时,常采用信号增益模块加以驱动。仿真过程无信号损耗,系统外部晶振电路,复位电路等在仿真过程可以省略。

综上所述,在搭建Proteus下位机系统时,隔离放大模块、LCD驱动模块、外部晶振电路和复位电路可有可无,而RS232电平与TTL电平转换模块必需省去。

3软件设计

3.1下位机软件设计

下位机软件由KeiluVision2开发完成。程序本身通用于仿真Proteus、实际步进电机控制系统。下位机程序包括:初始化程序,串行中断程序,定时器T0中断程序,LCD显示函数(含几条控制命令子函数)及程序主函数体五部分构成。程序设计流程,如图2所示。



程序设计中要注意设置串行中断的优先级应高于T0中断,因为默认的ET0中断优先级是高于串行中断ES的[6],使用语句PT0=0;//低优先级,PS=1;//高优先级即可,因为只要当串行通信优先级最高时,才能实现上位机对下位机的实时控制,十分重要。串行中断中需应用字符型数据与ASCII码转化的算法。因为MSComm1.Output中送出去的是字符型数据,而AT89C51会把接收到的字符数据转化成ASCII码,这样如果上位机发送一个数据“0”,而下位机转化成ASCII码后即变成了“48”,显然这不是事先跟下位机约定的控制指令,所以需要对接收到的指令数据做一定的计算处理,然后再交给CPU进行判断。因为上位机的控制指令数据只有七个,使用语句if(temp=57temp>=48)temp=temp-0x30;即可实现。整个串行中断程序设计如下:

staticvoidcom_isr(void)interruptSIO_VECTORusing1

if(RI)//RI=0申请串行中断

temp=SBUF;
//从接收寄存器中读取指令数据
if(temp=57temp>=48)
//判断指令寄存器数据
temp=temp-0x30;
//计算指令寄存器数据
RI=0;
//RI=0为下一次串行中断做准备
k=0;//为显示函数执行条件
return;



设计T0中断程序时,中段时间(它由定时计数器的初始值、工作方式共同决定)与中断次数关键内容,决定了驱动电机脉冲频率的变化,即决定了步进电机转速,需要设计一个合理的转速方便记录采集步进电机数据,观察单拍、双拍、单双拍驱动方式下电机的运动状态。
尘埃粒子计数器相关文章:尘埃粒子计数器原理
晶振相关文章:晶振原理

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭