文档库 最新最全的文档下载
当前位置:文档库 › 采用VC的伺服电机控制毕业论文

采用VC的伺服电机控制毕业论文

基于VC++的伺服电机速度控制系统设计

摘要

本设计完成是基于Visual C++6.0软件下实现伺服电机控制界面的编程,并完成PID控制算法。该控制界面不仅简洁实用,而且具有良好的人机交流部分。

上位机控制界面所实现的功能有电机的启动、停止、正传、反转、速度给定、实时曲线显示等,在完成PID算法后同时下发PID调节后的PWM占空比,实现转速控制。在完成串口通讯编程本文采用MSComm控件实现PC机与单片机通讯,数据的发送与接收采用统一通讯协议,这种方法不仅简单,而且实用。本文采用单片机作为下位机来验证上位机控制功能的实现,单片机作为下位机主要负责直流电机的各种参数数据的采集和模数转换,然后通过串行端口把数据发送给上位机,PC机作为上位机主要负责数据的分析处理和显示。

关键词:伺服电机;VC++;串口通讯;PWM调速;PID;

The servo motor speed control system design Based on VC++

Abstract

This design's core is under the software of Visual C++6.0, realizes the servo motor control contact surface programming, and completes the PID control algorithm. This control interface has not only succinct practical, but also has the good man-machine exchange part.

The superior machine control interface realizes the function has the electrical machinery's start, electrical machinery's stop, electrical machinery's main story, electrical machinery's reverse, the speed value assigns, Curve demonstration and so on. After completing the PID algorithm simultaneously after-crops PID the adjustment the PWM current output.In completing serial port communication programming this article to use MSComm to control to realize PC machine and the monolithic integrated circuit communication, the data transmission and the receive uses the unified communication protocol, in this method is not only simple but also practical. In this article uses the monolithic integrated circuit to confirm the superior machine control function as the lower position machine realization, Monolithic integrated circuit as lower position machine primary cognizance direct current machine's each kind of parameter data gathering and with A/D conversion. Then through the serial port the data transmission for the superior machine, PC machine takes the superior machine primary cognizance data the analysis processing and the demonstration.

Key word:Servo electrical machinery; VC++; Serial port communication; PWM control speed; PID;

目录

摘要 ......................................................................................................................................... I Abstract ...................................................................................................................................... II 第一章引言 (1)

1.1 设计的目的 (1)

1.2 设计的意义 (2)

第二章电机调速 (3)

2.1 直流伺服电机简介 (3)

2.2 直流伺服电机调速 (5)

2.2.1 V-M调速系统 (5)

2.2.2 PWM调速系统 (7)

第三章GUI设计 (10)

3.1 主界面 (10)

3.2 实时曲线 (12)

3.3 按钮图标的实现 (13)

第四章串口通讯 (17)

4.1 PC机与单片机通信方式 (17)

4.2 VC实现串口通讯的四种方式 (19)

4.2.1 基于Windows API通信函数 (19)

4.2.2 利用端口函数直接操作 (21)

4.2.3基于MSComm控件 (22)

4.2.4基于CSerial类 (23)

4.2.5四种实现方式的分析 (24)

4.3 串口编程 (25)

4.3.1插入MSCOMM控件 (25)

4.3.2设置属性 (25)

4.3.3设置串口 (26)

4.3.4数据类型的处理 (29)

4.4 帧格式定义 (29)

4.5 发送数据帧 (30)

4.6 接收数据帧 (30)

4.6.1检测接收缓冲区数据 (30)

4.6.2从接收缓冲区取出数据 (32)

第五章PID算法 (33)

5.1 PID算法简介 (33)

5.2 参数调整一般规则 (34)

5.3 PID算法在VC中的实现 (34)

结论 (37)

参考文献 (38)

附录程序 (40)

致谢 (63)

第一章引言

在生产实践的各个领域,有大量的生产机械要求在不同的场合,用不同的速度来进行工作,以提高生产率和保证产品的质量,如机床、轧钢机、造纸机、纺织机械等。在工程实践中,有很多生产机械要求在一定的范围内进行速度的平滑调节,并且要求有良好的静、动态性能。所以如何能充分发挥生产机械效能,提高生产率,是电机转速控制系统首先要解决的问题。

1.1设计的目的

随着微电子技术的发展,应用上位机实现现场的采集与控制越来越被大家所重视,上位机提供良好的人机界面,使现场监控更直接、简洁可靠和稳定。应用上位机实现现场监控,主要是通过上位机本身配置的串行口,通过串行通讯技术,控制和管理若干以单片机。由于上位机界面的应用给现场监控提供的极大的方便,所以上位机控制界面的设计也成为工业控制的重点内容。在Visual C++6.0界面下完成上位机的编程具有自己独特的优势,当VB成功推出后,microsoft又将C++包装成为了面向windows的visual C++(以下简称VC)。从VC1.0到VC6.0,每一个版本的推出都激动人心。VC借助传统的C/C++的美名加上microsoft这个金字招牌,使广大的程序员和专业编程人员纷纷投靠在VC的大旗下[16]。

伺服系统在机械制造行业中用得最多最广泛,各种高性能机床运动部件的速度控制运动轨迹控制、位置控制,都是依靠各种伺服系统控制的。它们不仅能完成转动控制、直线运动控制,而且能依靠多套伺服系统的配合,完成复杂的空间曲线运动的控制,如仿型机床的控制、机器人手臂关节的运动控制等等。它们可以完成的运动控制精度高、速度快、远非一般人工操作所能达到。电动机是伺服系统的重要执行元件,又称为执行电动机。在自动控制系统中,其任务是将输入的电信号转换为转角或转速,以带动控制

对象。因此,对伺服系统的控制关键所在就是对伺服电机的控制。

伺服电动机一般分为直流伺服电机和交流伺服电机,对于直流伺服电机具有响应快、低速平稳性好、调速范围宽等优点,常用于实现精密调速和位置控制的随动系统中,在工业、国防和民用等领域内得到广泛应用[13]。而对于交流伺服电机,虽然控制精度较高,但控制较复杂,驱动器参数需要现场调整PID参数整定,需要更多的连线[18]。所以本文主要介绍直流伺服电机转速的控制。

1.2设计的意义

工业控制领域,往往需要组成上位机—下位机系统,上位机一般为PC机,下位机一般为单片机系统[1]。上位机主要完成数据的采集、显示、以及数据的给定等随着,单片机做为下位机本主要负责直流电机的各种参数数据的采集和和模数转换。

利用VC++编程上位机控制界面可以解决很多工业控制中出现的难题,传统的上位机控制界面参数给定更改比较麻烦,需要浪费大量时间从新更改程序。而VC++的上位机控制界面就很容易实现,只需对程序中设置的参数加以更换就可以,特别是上位机一般都是计算机,随着计算机技术的发展,计算机的功能也越来越强大,很多复杂算法很容易实现,也为工业的中出现的复杂算法提供方便。在更变复杂算法时,由VC++编程上位机控制界面也十分方便。本文在完成控制伺服电机速度过程中介绍了PID算法的编程过程。

第二章电机调速

2.1直流伺服电机简介

直流伺服电机是将输入的直流电信号转换成机械角位移或角速度信号的装置。直流伺服电机具有良好的启动、制动和调速性能,可以再较宽的范围内实现平滑无极的调速,因而适应于调速性能较高的场合[4]。

(1)直流电动机的结构;

①定子。定子磁极磁场由定子的磁极产生。根据产生磁场的方式,直流伺服电动机可分为永磁式和他激式。永磁式磁极由永磁材料制成,他激式磁极由冲压硅钢片叠压而成,外绕线圈通以直流电流便产生恒定磁场。

②转子。又称为电枢,由硅钢片叠压而成,表面嵌有线圈,通以直流电时,在定子磁场作用下产生带动负载旋转的电磁转矩。

③电刷与换向片。为使所产生的电磁转矩保持恒定方向,转子能沿固定方向均匀的连续旋转,电刷与外加直流电源相接,换向片与电枢导体相接。

(2)直流电机的分类;

一般直流电机按结构、用途、容量的大小等分类。但从运行的观点来看,按励磁方式分类更用意义,因为除了少量微型电机的磁极是永磁铁外,绝大多数电机的磁场都是在磁极绕组中通以直流电流而建立的。因此都是通常都是按励磁绕组的连接方式(即按励磁方式)对直流电机进行分类。

直流电机按其励磁绕组与电枢绕组连接方式的不同,可①他励;②并励;③串励;

④复励等四种,如图2.1

(a)

(b)

(c)

(d)

图2.1直流电机励磁方式图

图 2.1(a)为他励直流电机,其特点是励磁绕组接在独立大励磁电源上,而与电枢的绕组无关,图 2.1(b)为并励直流电机,其特点是励磁绕组与电枢绕组并联,这种励磁绕组的匝数较多,导线较细,图 2.1(c)为串励直流电机,其特点是励磁绕组与电枢绕组串联,电枢电流就是励磁电流,励磁绕组匝数少、导线较粗。图2.1(d)为复励直流电机,其特点是在主磁极上装有两套励磁绕组,一套是与电枢绕组并联时并励绕组,另一套与电枢绕组串联是串励绕组[20]。

(3)直流伺服电机工作原理;

直流伺服电动机的工作原理与一般直流电动机的工作原理是完全相同,如图2.2所示。他激直流电机转子上的载流导体(即电枢绕组),在定子磁场中受到电磁转矩M 的作用,使电机转子旋转。由直流电机的基本原理分析得到转速值如2.1式所示:

a a

e

u I R n k -=

(2.1) n──电枢的转速,r/min ; u──电枢电压; Ia ──电机电枢电流;

Ra──电枢电阻;

ke──电势系数(ke=Ce φ)。 图2.2直流电机原理图

2.2直流伺服电机调速

直流伺服电机的调速有三种方法:

(1)改变电枢电压U:由额定电压向下调低,转速也由额定转速向下调低,调速范围大。

(2)改变磁通量Φ(即改变ke):改变激磁回路的电阻可改变Φ。由于激磁回路电感大,电气时间常数大,调速快速性差,转速只能由额定转速向上调高。

(3)在电枢回路中串联调节电阻。转速只能调低,铜耗大,不经济。直流伺服电机通常采用调压调速,通常改变电枢电压调速是直流调速系统采用的主要方法。

改变电枢电压调速是直流调速系统采用的主要方法,调节电枢供电电压或者改变励磁磁通,都需要有专门的可控直流电源,常用的可控直流电源有以下三种:

(1)旋转变流机组。用交流电动机和直流发电机组成机组,以获得可调的直流电压。

(2)静止可控整流器。用静止的可控整流器,如汞弧整流器和晶闸管整流装置,产生可调的直流电压。

(3)直流斩波器或脉宽调制变换器。用恒定直流电源或不可控整流电源供电,利用直流斩波或脉宽调制的方法产生可调的直流平均电压。

下面分别对各种可控直流电源以及由它供电的直流调速系统作概括性介绍。

2.2.1V-M调速系统

1957年,晶闸管问世,它是一种大功率半导体可控整流元件,俗称可控硅整流元件,简称“可控硅”,20世纪60年代起就已生产出成套的晶闸管整流装置。晶闸管问世以后,变流技术出现了根本性的变革。目前,采用晶闸管整流供电的直流电动机调速系统(即晶闸管-电动机调速系统,简称V-M系统,又称静止Ward-Leonard系统)已经成为直流调速系统的主要形式。图2.3所示是V-M系统的原理框图,图中V是晶闸管可控整流器,它可以是任意一种整流电路,通过调节触发装置GT的控制电压来移动触发脉冲的

相位,从而改变整流输出电压平均值

U,实现电动机的平滑调速。和旋转变流机组及离

d

子拖动变流相比,晶闸管整流不仅在经济性和可靠性上都有很大提高,而且在技术性能上显示出很大的优越性。晶闸管可控整流器的功率放大倍数大约在,控制功率小,有利于微电子技术引入到强电领域;在控制作用的快速性上也大大提高,有利于改善系统的动态性能[5]。但是,晶闸管整流器也有它的缺点,主要表现在以下方面:

(1)晶闸管一般是单向导电元件,晶闸管整流器的电流是不允许反向的,这给电动机实现可逆运行造成困难。必须实现四象限可逆运行时,只好采用开关切换或正、反两组全控型整流电路,构成V-M可逆调速系统,后者所用变流设备要增多一倍。

(2)晶闸管元件对于过电压、过电流以及过高的du/dt和di/dt十分敏感,其中任一指标超过允许值都可能在很短时间内元件损坏,因此必须有可靠的保护装置和符合要求的散热条件,而且在选择元件时还应保留足够的余量,以保证晶闸管装置的可靠运行。

(3)晶闸管的控制原理决定了只能滞后触发,因此,晶闸管可控制整流器对交流电源来说相当于一个感性负载,吸取滞后的无功电流,因此功率因素低,特别是在深调速状态,即系统在较低速运行时,晶闸管的导通角很小,使得系统的功率因素很低,并产生较大的高次谐波电流,引起电网电压波形畸变,殃及附近的用电设备。如果采用晶闸管整流装置的调速系统在电网中所占容量比重较大,将造成所谓的“电力公害。为此,应采取相应的无功补偿、滤波和高次谐波的抑制措施。

(4)晶闸管整流装置的输出电压是脉动的,而且脉波数总是有限的。如果主电路电感不是非常大,则输出电流总存在连续和断续两种情况,因而机械特性也有连续和断续两段,连续段特性比较硬,基本上还是直线;断续段特性则很软,而且呈现出显著的非线性。

图2.3晶闸管电机调速系统原理图(V-M )

2.2.2 PWM 调速系统

直流斩波器又称直流调压器,是利用开关器件来实现通断控制,将直流电源电压断续加到负载上,通过通、断时间的变化来改变负载上的直流电压平均值,将固定电压的直流电源变成平均值可调的直流电源,亦称直流-直流变换器。它具有效率高、体积小、重量轻、成本低等优点,现广泛应用于地铁、电力机车、城市无轨电车以及电瓶搬运车等电力牵引设备的变速拖动中。

图2.4为直流斩波器的原理电路和输出电压波型,

(a)图中VT 代表开关器件。当开关VT 接通时,电源电压S U 。加到电动机上;当VT 断开时,直流电源与电动机断开,电动机电枢端电压为零。如此反复,得电枢端电压波形如图2.4(b )所示。

(a)

(b)

图2.4 直流斩波器的原理图

这样,电动机电枢端电压的平均值如式2.2所示: 01T d S S S t

U U dt U kU T T

=

==? (2.2)

式中,T-开关器件的通断周期;

输出电压平均值

U可以通过改变占空比k,即通过改变开关器件导通或关断时间来

d

调节,常用的改变输出平均电压的调制方法有以下三种:

(1)脉冲宽度调制(pulse width modulation,简称PWM)。开关器件的通断周期T保持不变,只改变器件每次导通的时间t,也就是脉冲周期不变,只改变脉冲的宽度,即定频调宽。

(2)脉冲频率调制(pulse frequency modulation,简称PFW)。开关器件每次导通的时间t不变,只改变通断周期T或开关频率f,也就是只改变开关的关断时间,即定宽调频,称为调频。

(3)两点式控制。开关器件的通断周期T和导通时间t均可变,即调宽调频,亦可称为混合调制。当负载电流或电压低于某一最小值时,使开关器件导通;当电流或电压高于某一最大值时,使开关器件关断。导通和关断的时间以及通断周期都是不确定的。构成直流斩波器的开关器件过去用得较多的是普通晶闸管和逆导晶闸管,它们本身没有自关断的能力,必须有附加的关断电路,增加了装置的体积和复杂性,增加了损耗,而且由它们组成的斩波器开关频率低,输出电流脉动较大,调速范围有限。自20世纪70年代以来,电力电子器件迅速发展,研制并生产了多种既能控制其导通又能控制其关断的全控型器件,如门极可关断晶闸管(GTO)、电力电子晶体管(GTR)、电力场效应管(P-MOSFET)、绝缘栅双极型晶体管(IGBT)等,这些全控型器件性能优良,由它们构成的脉宽调制直流调速系统(简称PWM调速系统)近年来在中小功率直流传动中得到了迅猛的发展,与V-M调速相比,PWM调速系统有以下优点:

①采用全控型器件的PWM调速系统,其脉宽调制电路的开关频率高,一般在几kHz,因此系统的频带宽,响应速度快,动态抗扰能力强。

②由于开关频率高,仅靠电动机电枢电感的滤波作用就可以获得脉动很小的直流电

流,电枢电流容易连续,系统的低速性能好,稳速精度高,调速范围宽,同时电动机的损耗和发热都较小。

③PWM系统中,主回路的电力电子器件工作在开关状态,损耗小,装置效率高,而且对交流电网的影响小,没有晶闸管整流器对电网的“污染”,功率因数高,效率高。

④主电路所需的功率元件少,线路简单,控制方便。所以本文采用脉冲宽度调制的方法来调试电机的速度。

脉宽调速系统的主要电路采用脉宽调制式变换器,简称PWM变换器。PWM变换器有不可逆和可逆两类,可逆变换器又有双极式、单极式和受限单极式等多种电路,本文采用不可逆PWM变换器,其原理简单容易实现[19]。

第三章GUI设计

3.1主界面

上位机界面主要完成PID试调、速度给定、速度显示、曲线显示等功能。可实现的软件有VC、Delphi、VB、CAI、Labview。本文是用Visual C++6.0来完成上位机界面的设计;如图3.1所示:

图3.1 电机转速控制界面图

Visual C++6.0作为可视化编程软件具有独特优势。是目前综合性最高、最强大,也是最为复杂的Windows 应用程序开发软件。Visual C++是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。

首先,要了解VC++6.0则必须先了解C/C++语言。在计算机领域,C/C++语言相信

一定无人不知、无人不晓。C语言最初主要用于unix系统,大多数unix系统的程序都是用C编写的。借助早期unix系统的流行和C本身的优秀品质,C语言从此名扬天下、威震四方。而后,伴随着面向对象概念的提出和应用,形成了C++语言,A T&T公司于1985年正式推出了C++1.0版,它是c语言面向对象的扩充。C++1.0增加了类和实例、单继承、重载、虚函数、友员、内联等面向对象的程序设计机制。1989年推出的C++2.0版和1993年推出的C++3.0版分别增加了支持多继承、保护接口、模板和异常等。C++被公认为“最好的面向对象的编程语言,是学习面向对象编程技术人员较好的启蒙语言。

Visual C++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境。Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。这些组件通过一个名为Developer Studio 的组件集成为和谐的开发环境[17]。

VC++是微软公司开发的C++语言开发环境,VC的特点是微软公司做了一个自己独有的类库MFC,里面封装了绝大多数的API函数,使得WINDOWS程序的开发变的高效和易于理解,如果用API直接开发WINDOWS程序的话,将会是一件非常烦琐的工作,WINDOWS对资源的管理是非常严格的这与DOS可直接用中断处理程序和I/O指令操作硬件端口是截然相反的;所以这个MFC就是VC和其他公司出产的编译器的最大区别了,当然了别的公司也有自己封装API的类库比如DELPHI等,不过由于微软公司掌握着WINDOWS内核的全部秘密,所以他们的编译器与其他公司的相比有其独到的优势。

主界面控件参数设置首先打开VC++6.0集成开发环境,选择菜单项File/New,在出现的对话框中选中Projects标签中的MFC AppWizard(exe),然后在Project Name框中填入MyCOMM(可根据需要命名),之后点OK按钮。在接着出现的对话框中选中Dialog Based 项,然后点NEXT按钮。以下的各对话框都按照缺省设置,这样即可生成一个基于对话框

的应用程序。在资源编程器中会出现其对话框模板。在对话框中添加相应应用的控件,再对参数进行属性设置,如设置ID,设置后的界面如图3.2所示:

图3.2伺服电机控制界面图

3.2实时曲线

在伺服电机转速控制过程中,需要采集电机的实际转速,并实时显示到控制界面上,这样可以轻松的观察的速度曲线的实时变化。实现的方法为在工程中添加曲线资源,然后自Dlg中添加代码:

GetDlgItem(IDC_OSCOPE)->GetWindowRect(rect) ;

ScreenToClient(rect) ; //适应picture控件的大小

创建画图工具

m_quxian.Create(WS_VISIBLE | WS_CHILD, rect, this) ;

初始化画图工具

m_quxian.SetRange(0, 200, 0) ; //设置纵坐标以及小数位数

m_quxian.SetYUnits("电机转速(转/秒)") ; //设置y轴标题

m_quxian.SetXUnits("时间轴") ; //设置x轴标题

m_quxian.SetBackgroundColor(RGB(0, 0, 64)) ; //背景色

m_quxian.SetGridColor(RGB(192, 192, 255)) ; //坐标颜色

m_quxian.SetPlotColor(RGB(255, 255, 255)) ; // 曲线颜色

当串口调通后可以收发数据时,便可以接收下位机的速度给定时,可以实时显示速度曲线,如图3.3所示。

图3.3速度曲线显示图

3.3按钮图标的实现

按钮图标是通过CButtonS T这个类实现的,CButtonS T是目前最强大功能最全的CButton派生类,CButtonS T类主要包括BtnST.h、BtnST.cpp、BCMenu.h和BCMenu.cpp 四个文件,在VC++的Workspace —> FileView中导入以上的四个文件之后,然后在SdtAfx.h文件中添加合适的i nclude语句,如#include "BtnST.h"。

下面介绍应用CButtonST可实现下面6种效果;

(1)在按钮上加入Icon,使Icon和文字同时显示;

假设按钮ID为IDC_BUTTON1;

①添加成员变量CButtonST m_btn;

②添加Icon资源,设其ID设为IDI_ICON1;

③在OnInitDialog函数中初始化按钮;

m_btn.SubclassDlgItem(IDC_BUTTON1,this);

m_btn.SetIcon(IDI_ICON1);

m_btn.SetFlat(FALSE); 根据Icon的大小调整按钮的大小。

(2)显示平面按钮;

只需要在效果一的基础上把m_btn.SetFlat(FALSE);语句去掉。

(3)使按钮上的图标可变;

假设按钮ID为IDC_BUTTON1;

①添加成员变量CButtonST m_btn;

②添加两个Icon资源,ID设为IDI_ICON1和IDI_ICON2;

IDI_ICON1是普通状态的图标,IDI_ICON2是按下时的图标;

③在OnInitDialog函数中初始化按钮;

m_btn.SubclassDlgItem(IDC_BUTTON1,this);

m_btn.SetIcon(IDI_ICON2,IDI_ICON1);

(4)设置按钮在不同状态下的底色和文字颜色;

假设按钮ID为IDC_BUTTON1;

①添加成员变量CButtonST m_btn;

②添加Icon资源,设其ID设为IDI_ICON1;

③在OnInitDialog函数中初始化按钮;

m_btn.SubclassDlgItem(IDC_BUTTON1,this); m_btn.SetIcon(IDI_ICON1);

m_btn.SetColor(CButtonST::BTNST_COLOR_BK_OUT, RGB(208,208,208));

m_btn.SetColor(CButtonST::BTNST_COLOR_BK_FOCUS,RGB(208,208,208));

m_btn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);

SetColor函数和OffsetColor函数的第一个参数表示按钮的各个状态,前景色就是文字的颜色,它们的取值表示:

BTNST_COLOR_BK_IN;//鼠标放在按钮内时的背景色

BTNST_COLOR_FG_IN;//鼠标放在按钮内时的前景色

BTNST_COLOR_BK_OUT;//普通状态时的背景色

BTNST_COLOR_FG_OUT;//普通状态时的前景色

BTNST_COLOR_BK_FOCUS;//按钮被按下后的背景色

BTNST_COLOR_FG_FOCUS;//按钮被按下后的前景色实例:演示程序中的48×48 icon 按钮、Zip按钮等。

(5)设置图标和文字的位置;

假设按钮ID为IDC_BUTTON1;

①添加成员变量CButtonST m_btn;

②添加Icon资源,ID设为IDI_ICON1;

③在OnInitDialog函数中初始化按钮;

m_btn.SubclassDlgItem(IDC_BUTTON1,this);

m_btn.SetIcon(IDI_ICON1);

m_btn.SetAlign(CButtonST::ST_ALIGN_VERT);

SetAlign函数的第一个参数表示位置信息,缺省情况下,文字在图标右边ST_ALIGN_HORIZ;// 文字在右

ST_ALIGN_VERT;//文字在下

相关文档
相关文档 最新文档