基于matlab的永磁同步电机调速系统的仿真_第1页
基于matlab的永磁同步电机调速系统的仿真_第2页
基于matlab的永磁同步电机调速系统的仿真_第3页
基于matlab的永磁同步电机调速系统的仿真_第4页
基于matlab的永磁同步电机调速系统的仿真_第5页
已阅读5页,还剩98页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要

本文首先介绍了永磁同步电机的国内外发展状况,然后介绍了永磁同步电机的结构及原理,接着建立了永磁同步电机的数学模型,并在此基础上用MATLAB进行了仿真,最后进行了仿真及仿真结果的分析。

永磁同步电机是具有非线性、强耦合性、时变性的系统,在运行过程中会受到负载扰动等多因素影响。以往研究永磁同步电机的做法是在硬件上搭建一个平台进行模拟,但是这样在做实验中难免会造成一些损失,而且硬件上的反馈会比较长研究周期长。目前在国内外关于永磁同步电机调速系统的研究现状上来讲,基于MATLAB环境下仿真模型的构建下进行研究,这可极大的缩短研究周期和研究成本。在利用MATLAB仿真模型研究永磁同步电机时,我们可以把那些扰动因数做成模拟信号给予模型,这样可以准确的定性分析实验得出结论。

关键字:永磁同步电机,空间矢量调制,MATLAB仿真,数学模型。

ABSTRACT

Inthefirst,thispaperintroducesthedomesticandinternationaldevelopmentstatusofPermanentMagnetSynchronousMotor(PMSM),givesaexplanationaboutitsbasictheory,structure.Thenitbuildsamathematicalmodel,andusesMATLABtosimulatethatmodel.

ThePMSMisanonlinear,strong-couplingandtime-varyingsystem,sointheoperationprocess,itwillbeinfluencedbymanyfactorssuchasloaddisturbance.Therere,itisnecessarytotakeactionwhenresearchingthecontrolmethodofPMSM.Theformerresearchmethodissettingupaplatformonhardwaretoperformexperimensbutitisundesirable,becauseitoftencausesomeloss,andthefeedbackcycleislongerthanresearchcycle.AsfordomesticandinternationalcurrentsituationontheresearchofPMSM,itisobviousthatresearchingunderthesimulationmodelcreatedbyMATLABcouldgreatlyreducethecostandcycleofresearchment.WhenusingMATLABtobuildsimulationmodelontheresearchofPMSM,wecantransformthesedisturbancefactorsintoanalogsignal,makingaqualitativeanalysistodrawconclusionsfromthem.

Keywords:PMSM,SVPWM,MATLABsimulation,mathmaticalmodel

目录

TOC\o"1-4"\h\z\u

摘要

I

ABSTRACT

II

目录

III

第一章绪论

1

1.1研究背景及意义

1

1.1.1研究背景

1

1.1.2研究的目的及意义

1

1.2国内外研究现状

2

1.2.1国内研究历史及现状

2

1.2.2国外研究现状及趋势

2

1.3本文的主要内容

3

第二章永磁同步电机调速系统的结构和数学模型

5

2.1引言

5

2.2永磁同步电机调速系统的结构

5

2.3永磁同步电机调速系统的数学模型

6

2.3.1PMSM在ABC坐标系下的磁链和电压方程

6

2.3.2PMSM在坐标系下的磁链和电压方程

8

2.3.3PMSM在dq0坐标系下的磁链和电压方程

9

2.4永磁同步电机的控制策略

11

2.5本章小节

12

第三章永磁同步电机矢量控制及空间矢量脉宽调制

14

3.1引言

14

3.2永磁同步电动机的矢量控制

14

3.3空间矢量脉宽调制概念

15

3.4SVPWM模块的建立

17

3.5本章小结

23

第四章基于Matlab的永磁同步调速系统仿真模型的建立

24

4.1引言

24

4.2MATLAB软件的介绍

24

4.3永磁同步电机调速系统整体模型的建立

25

4.4仿真参数调试及结果分析

28

4.5本章小结

29

第五章总结与展望

30

5.1全文总结

30

参考文献

31

致谢

33

第一章绪论

1.1研究背景及意义

1.1.1研究背景

随着电力电子技术、微电子技术和现代电机控制理论的发展,交流调速系统逐步具备了宽调速范围、高稳速精度、快速动态响应及四象限运行等良好的技术性能,交流调速系统应用越来越广泛。而永磁同步电机调速系统能使电机的功率因数更高、转子参数变的可测、效率更高等特点,近年来永磁同步电机调速系统的研究也越来越受到国内外专家学者的重视[1]。

而对于永磁同步电机调速系统的研究主要是依据Matlab的仿真,在Matlab中进行永磁同步电机调速系统(PMSM)建模仿真方法的研究,以往大部分的研究是采用的是节点电流法对电机控制系统进行分析,然后通过列写nt文件来建立PMSM的仿真模型。这实质上是一种整体分析方法,但是在此模型基础上修改控制算法或添加、删除闭环会显得极不方便。为了克服这一不足,本文利用的是将控制单元模块化的仿真方法。

对于研究永磁同步电机的研究人员来讲,只需通过修改系统参变量或人为加入不同扰动因素来考察不同实验条件下电机系统的动、静态性能,或者模拟相同的实验条件,比较不同控制策略的优劣,来分析和设计永磁同步电机调速系统,就可为实际电机控制系统的设计和调试提供新的思路。

1.1.2研究的目的及意义

近十年来,随着永磁材料、电力电子器件和控制技术的发展。永磁同步电动机控制存在的硬件问题得以逐步解决。永磁同步电机由于体积小,重量轻,磁性能稳定,具有较高的运行效率、较小的转动惯量、转矩脉动、可支持高速运行等优点,在现代交流伺服系统中,诸如高性能机床进给、位置控制、工业机器人、航空航天等众多领域同步电机得到了广泛应用[2]。但是为了得到更好的控制效果更高效的生产效率对于永磁同步电机调速系统的研究提出了新的更高的要求。

本课题主要研究基于Matlab的永磁同步电机调速系统的仿真,在Simulink中建立整个调速系统的仿真模型并给出仿真结果。该课题主要是为了在研究永磁同步电机调速系统时搭建好一个仿真的平台,能够在研究过程中及时的实现研究要求的控制策略进行相关的条件给予模拟,以代替以往只能在实际硬件中进行调试实验的研究。

1.2国内外研究现状

1.2.1国内研究历史及现状

我国从20世纪70年代开始跟踪开发交流伺服技术,主要研究力量集中在高等院校和科研单位,以军工、宇航卫星为主要应用方向。主要研究机构是北京机床所、西安微电机研究所、中科院沈阳自动化所等。80年代之后开始进入工业领域,直到2000年,国产伺服停留在小批量、高价格、应用面狭窄的状态,技术水平和可靠性难以满足工业需要。2000年之后,随着中国变成世界工厂,制造业的快速发展为交流伺服提供了越来越大的市场空间,国内几家单位开始推出自己品牌的交流伺服产品。目前国内主要的伺服品牌或厂家有森01(和利时电机)、华中数控、广数、南京埃斯顿、兰州电机厂等。其中华中数控、广数等主要集中在数控机床领域[2]。

1.2.2国外研究现状及趋势

在国外上,现代交流伺服系统,经历了从模拟到数字化的转变,数字控制环已经无处不在,比如换相、电流、速度和位置控制;采用新型功率半导体器件、高性能DSP加FPGA、以及伺服专用模块。如贝加莱(B&R)-V业自动化公司推出的ACOPOSmulti驱动系统采用模块化的可扩展结构,每个轴模块可以提供1-2个伺服轴控制,并集成了一个24VDC的辅助电源模块,为驱动器、控制器和外围设备提供了一个到直流总线的链接,来获得开路、短路和过载保护。在国内,我们还没有看到有厂商进行类似的模块式设计,并在产品中融入机器安全概念。国外厂商伺服产品每5年就会换代,新的功率器件或模块每2-5年就会更新一次,新的软件算法则日新月异,总之产品生命周期越来越短。总结国内外伺服厂家的技术路线和产品路线,结合市场需求的变化,可以看到以下一些最新发展趋势:

1.高效率化:主要包括电机本身的高效率比如永磁材料性能的改进和更好的磁铁安装结构设计,也包括驱动系统的高效率化,包括逆变器驱动电路的优化,加减速运动的优化,再生制动和能量反馈以及更好的冷却方式等。

2.直接驱动:由于消除了中间传递误差,从而实现了高速化和高定位精度。

3.高速、高精、高性能化:采用更高精度的编码器(每转百万脉冲级),更高采样精度和数据位数、速度更快的DSP,无齿槽效应的高性能旋转电机,以及应用自适应、人工智能等各种现代控制策略,不断将伺服系统的指标提高。

4.通用化:通用型驱动器配置有大量的参数和丰富的菜单功能,便于用户在不改变硬件配置的条件下,方便地设置各种工作方式,适用于各种场合,可以驱动不同类型的电机,也可以适应不同的传感器类型甚至无位置传感器。可以使用电机本身配置的反馈构成半闭环控制系统,也可以通过接口与外部的位置或速度或力矩传感器构成高精度全闭环控制系统。

5.智能化:现代交流伺服驱动器都具备参数记忆、故障自诊断和分析功能,绝大多数进口驱动器都具备负载惯量测定和自动增益调整功能,有的可以自动辨识电机的参数,自动测定编码器零位,有些则能自动进行振动抑止。将电子齿轮、电子凸轮、同步跟踪、插补运动等控制功能和驱动结合在一起。

6.网络化和模块化:随着机器安全标准的不断发展,传统的故障诊断和保护技术已经落伍,最新的产品嵌入了预测性维护技术,使得人们可以通过Intemet及时了解重要技术参数的动态趋势,并采取预防性措施。比如:关注电流的升高,负载变化时评估尖峰电流,外壳或铁芯温度升高时监视温度传感器,以及对电流波形发生的任何畸变保持警惕[3]。

1.3本文的主要内容

本文主要目的是通过Matlab中的sumlink环境中进行永磁同步电机调速系统的仿真调试,具体的内容如下:

第一章绪论:通过各种资料了解本课题的研究背景及意义,分析国内外的研究现状及研究趋势。随着电力电子技术、微电子技术和现代电机控制理论的发展,永磁同步电机的应用越来越广泛,研究提升已有的系统的性能需要一个利于研究的平台,在这一点上国内外的差距在于我们国内的研究重视还不够。

第二章永磁同步电机调速系统的结构和数学模型:分析建立了永磁同步电机的结构和数学模型的,具体的细分到PMSM在三种不同坐标系下的磁链和电压方程以及它们之间的坐标转换,并简单了解了PMSM的控制策略。

第三章永磁同步电机矢量控制及空间矢量脉宽调制:主要讲解关于PMSM的核心空间矢量脉宽调制(SVPWM)的仿真模型的建立,要用的工具有MATLAB软件,了解SVPWM的概念以及建立SVPWM模块。

第四章基于Matlab的永磁同步电机调速系统仿真模型的建立:讲述了PMSM仿真模块整体的建构以及仿真参数的调试及结果分析的一章,通过分块建构模型,最后集成整体模型的方式完成整体建构[4]。

第五章总结与展望:总结本文的主要研究内容,并对后续要做的进行展望。

第二章永磁同步电机调速系统的结构和数学模型

2.1引言

20世纪80年代,永磁材料特别是具有高磁能积、高强磁力、低廉价格的铷铁硼永磁材料的发展,使人们研制出了价格低廉、体积小巧、性能高的永磁同步电机[5]。永磁同步电动机转子通常使用永磁体,无电励磁电动机的转子发热和励磁损耗问题,运行的效率和功率因数都较高,因而此类永磁同步电机在数字驱动控制系统领域中逐渐成为了主流[5]。本章在简要介绍永磁同步电机结构和分类的基础上,分析推导出永磁同步电机相关的数学模型。

2.2永磁同步电机调速系统的结构

永磁同步电机分为正弦波驱动电流的永磁同步电机和方波驱动电流的永磁同步电机。本文主要以三相正弦波驱动永磁同步电机作为研究对象。和普通同步电机一样,永磁同步电动机由定子,转子和端盖等部件组成。定子由定子铁心(由冲有槽孔的硅钢片受压而成)、定子绕组(在铁芯槽中嵌入三相电枢绕组)构成。定子和普通感应电动机基本相同,也是采用叠片结构以减小电动机运行时的铁耗。转子通常由轴、永久磁钢及磁滞组成,其主要作用是在电动机气隙内产生足够大的磁场强度,与通电后的定子绕组相互作用产生转矩以驱动自身的运转。转子铁心可以做成实心的,也可以用叠片叠压而成。图2-1为永磁同步电动机的结构示意图。转子上安装有永磁体,转子铁心上可以有电枢绕组。为了减少电动机的杂散损耗,定子绕组通常采用星形接法[6]。

图2-1永磁同步电机的结构

根据转子极对数的不同,永磁同步电动机分为单极电动机和多极电动机两大类。目前制作转子的材料多采用高性能的永磁材料有:AINiCo(铝镍钻铁磁性合金材料)、Ferrites(铁氧体磁性材料)、RareEarth(稀土族磁性材料)、MnAIC(锰铝碳磁性材料)、Ceramic(陶瓷磁性材料)anNdFeB(铷铁硼合金磁性材料)等。目前我国的铷铁硼磁性材料特性水平达到世界的先进水平,因此开发和研制铷铁硼永磁同步电机及其控制系统具有得天独厚的有利条件。

对于无刷直流电机构成的运动控制系统,通常有着成本低廉、材料利用率高以及控制方式简单等优点。但由于无刷直流电机原理上存在固有缺陷,使得其转矩脉动较大,铁心附加损耗较大,因此只适用于一般精度及性能要求的场合;而交流永磁同步电机作为一种特殊的同步电动机,它能够克服无刷直流电机驱动系统的不足,具有优良的控制性能,在交流驱动系统中的应用更为广泛。目前,永磁同步电机已经成为高性能驱动系统的主体。

永磁同步电机从转子结构上大致可以分为两大类:表面式永磁同步电机SPMSM(SurfacePermanentManetSynchronousMotor)和内埋式永磁同步电机IPMSM(InteriorPermanentMagnetSynchronousMotor)。对采用稀土永磁的电机来说,由于永磁材料的相对回复磁导率接近于1,所以表面凸极式转子在电磁性能上属于隐极转子结构;而表面插入式转子的相邻两永磁磁极间有着磁导率很大的铁磁材料,故在电磁性能上属于凸极转子结构。表面式永磁同步电机定子与转子之间磁路分布均匀,基本上与转子位置无关;内埋式转子具有明显的磁极,定子与转子之间磁路是不均匀的,与转子的位置有关。表面式永磁同步电机结构上较简单,转子直径较小,从而降低转动惯量,它有较大的磁路气隙,若将永磁体直接粘在转轴上还可获得低电感,利于电机动态性能的改善。一般永磁同步电机多采用这种形式的转子结构。内埋式永磁同步电机是将永磁体装于转子铁芯内部,制造工艺较为复杂,但机械强度高,一般适于弱磁控制的高速运行场合[7]。

2.3永磁同步电机调速系统的数学模型

下面我们将以三相正弦波电流驱动的永磁同步机(PMSM)为研究对象,分析永磁同步电机在ABC坐标系下的、永磁同步电机在坐标系下的及在dq0坐标系下的磁链和电压方程,并将分析三种坐标系下的坐标变换。

2.3.1PMSM在ABC坐标系下的磁链和电压方程

本文所研究的对象为表面式PMSM,它与普通电励磁同步电机的定子一样有A,B,C三相对称绕组,转子上安装有永磁体,定子和转子通过气隙磁场存在电磁耦合关系。由于定子和转子之间存在相对运动,使得这种电磁耦合关系十分复杂,给电机的分析和控制带来了困难。为了简化永磁同步电机的数学模型,做如下假设[8]:

(1)忽略磁饱和,不计铁心的涡流损耗和磁滞损耗,认为磁路是线性的;

(2)定子绕组三相对称,各相绕组的轴线在空间上互差120度;

(3)电机定子电枢绕组的空载电势是正弦波

(4)定子绕组电流在气隙中只产生正弦分布的磁势,忽略磁场的高次谐波;

(5)转子上无阻尼绕组;

(6)永磁体的电导率为零。

PMSM的定子磁链是由定子三相绕组电流和转子永磁体产生,定子三相绕组电流产生的磁链与转子位置角有关,转子永磁体产生的磁链也与转子位置有关,转子永磁体在每相绕组中产生反电势。由此,得到三相PMSM在定子静止三相ABC坐标系统下的磁链方程为[9]:

(2.1)

式(2.1)中:

为定子三相绕组磁链;

为定子三相绕组自感系数;

为定子X绕组和Y绕组的互感系数;

为永磁磁极与定子绕组交链的最大磁链。

定子绕组的自感系数和互感系数均为的函数,且互感系数满足关系、、。

三相永磁同步电机在定子静止三相ABC坐标下的电压方程为

(2.2)

式(2.2)中:

为定子相电压;

R为定子绕组每相电阻;

为定子相电流。

2.3.2PMSM在坐标系下的磁链和电压方程

定子静止三相ABC坐标系统到定子静止两相坐标系统的坐标变换为

(2.3)

其中Clarke变换阵[10]为:

(2.4)

将式(2.4)改写为

(2.5)

在式(2.5)两边左乘Clarke变换阵后,得到定子静止两相坐标系统下的磁链方程

(2.6)

式(2.6)中

(2.7)

将式(2.2)改写为

(2.8)

式(2.8)中P为求导符号,在方程式两边左乘Clarke变换矩阵后,可得到定子静止两坐标系统下的电压方程

(2.9)

经过Clarke变换后,定子磁链方程和电压方程的系数矩阵仍然与转子位置角有关,分析计算比较麻烦,需进一步实现对转子位置角的解耦变化。

2.3.3PMSM在dq0坐标系下的磁链和电压方程

dq0坐标系统是随电机转子同步旋转的,其d轴(直轴)与转子的磁场方向重合(定向),q轴(交轴)逆时针超前d轴电角度[11]。如图2-2所示。

图2-2静止与同步坐标系

定子静止两相坐标系统到转子dq0坐标系统的坐标变换为

(2.10)

其中park变换阵为

(2.11)

由此,可得三相永磁同步电机在转子dq0坐标系统下的磁链方程和电压方程为

(2.12)

(2.13)

式中,一转子机械角速度。

在本系统中,三项永磁同步电机定子绕组采用星形连接,三相定子电流在电枢绕组中性点满足基尔霍夫电流定律,即三相电流相加等于零,因此定子电流的零序分量等于零,可以计算得定子磁链和定子电压的零序分量也等于零[12]。

因此,三相永磁同步电机在转子dq0坐标下的磁链方程和电压方程就可以简化为

(2.14)

(2.15)

即:

由此可见,三相永磁同步电机必须建立在转子dq0坐标系统下才能实现角度解耦。

2.4永磁同步电机的控制策略

永磁同步发电机调速系统常用的矢量控制策略有[13]:

(1)控制;

(2)最大转矩电流比控制:

(3)单位功率因数控制;

(4)最小损耗控制等。

每种控制策略都有其优缺点,但是针对永磁同步电机不同控制目标下的矢量控制策略进行比较分析,目前最常用到的控制策略主要是电流控制。的控制称为磁场定向控制,这种控制方法简单,计算量小,没有电枢反应中电机的去磁问题,因此应用的比较广泛[14]。

电流控制旨在将永磁同步电机d轴电流控制为零,是永磁同步电机最常用的控制策略。将代入永磁同步电机转矩方程有:

(2.22)

因为电机的所有电流都用来产生电磁力矩,控制效率较高。其缺点是随着输出端转矩的增加,电机的端电压增加较快,功率因此下降,于是对逆变器的容量要求有所提高,无法充分利用电机的磁阻转矩,不能发挥其输出转矩的能力。

假定转子磁场恒定,则电磁转矩Te与q轴电流Isq成正比,即电磁转矩与定

子电流呈线性关系,从而使电机的转矩控制环节得到简化,这是Isd=0控制的优点,在已知转矩指令Te*时,电机dq轴电流指令分别如下:

(2.23)

于是得到永磁同步电机稳态控制方程:

(2.24)

要使实际电流跟随给定参考值,上式中还加入反馈控制量。下面以比例积分PI调节为例,于是得系统最终控制方程式:

(2.25)

采用控制方法是基于转子磁通定向的矢量控制方法,这种控制方法比较简单,其突出的优点是没有电机直轴电枢反应,不会引起电机永磁体的去磁现象,并且可以实现电机最大转矩电流比控制[15]。不足之处是没有考虑电机效率和功率因数等问题。

2.5本章小节

本章从永磁同步电机结构调速系统结构出发,建立了永磁同步电机在三种坐标系下的磁链和电压方程,分别是ABC坐标系,坐标系,dq0坐标系,以及三种坐标系下的坐标变换,并初步简单的介绍了下关于永磁同步电机的控制策略主要常用的是电流控制。

第三章永磁同步电机矢量控制及空间矢量脉宽调制

3.1引言

矢量控制是交流电机的一种高性能控制技术,其基本思想是根据坐标变换理论将交流电机两个在时间相位上正交的交流分量转换为空间上正交的两个直流分量,从而把交流电机定子电流分解成励磁分量和转矩分量两个独立的直流控制量[16],分别实现对电机磁通和转矩的控制,然后再通过坐标变换将两个独立的直流控制量还原为交流时变量来控制交流电机,大大提高了调速的动态性能。

根据第二章推导的永磁同步电机运动学方程式可以知道,对传动系统的转速进行控制是通过对电机转矩控制与调节实现的,电机转矩控制是交流电气传动系统的控制核心。在矢量控制系统中,通过对永磁同步电机的直轴电流和交流电流控制就能控制电机的转矩,而电机的交直轴电流可以有不同的组合方式,这就有了永磁同步电机的不同的矢量控制。本章对用于永磁同步电机矢量控制和空间矢量的调制(SVPWM)技术深入研究并建立了SVPWM模块[17]。

3.2永磁同步电动机的矢量控制

矢量控制思想是1971年由德国Blaschke等人提出的,首先是应用在感应电机中。从那时起人们运用矢量控制理论为改善IM的伺服驱动性能做了大量研究。矢量控制的原理和方法同样可以应用于三相永磁同步电动机PMSM。可以说,正是因为运用了矢量控制理论,才使PMSM的伺服驱动性能达到直流电动机的水平,甚至超过了直流电动机。众所周知,在他励直流电动机中,励磁磁场与电枢磁动势间的空间角度由电刷和机械换向器所固定,通常情况下,两者正交。因此,当励磁不变时,电枢电流和电磁转矩间存在线性关系,通过单独调节电枢电流可以直接控制转矩。为使电动机在高速区能以恒功率方式运行,还可以单独调节励磁,进行弱磁控制。正是因为在很宽的运行范围内都能提供可控转矩,直流电动机才在电气传动系统中得到了广泛的应用[18]。

在同步电动机中,励磁磁场与电枢磁动势间的空间角度不是固定的,它随负载而变化,特别在动态情况下,这将会引起磁场间十分复杂的作用关系,因此也就不能简单地通过调节定子电流来控制转矩。倘若能够利用电动机外部的控制系统,即通过外部条件能对定子磁动势相对励磁磁动势的空间角度实施定向控制,就可以直接控制两者间的空间角度。我们将此称为“角度控制”。若对定子电流幅值也能独立地直接控制,就将永磁同步电动机模拟为他励直流电动机。这实际是对定子电流空间矢量相位和幅值的控制,所以称之为“矢量控制”[19]。

永磁同步电动机的矢量控制与异步电动机、电励磁同步电动机一样,都是一种基于磁场定向的控制策略,只是前者转子永磁体所提供的磁场恒定,加之其结构和参数各异,故控制方法和其它电机也有所不同。同步电动机按照磁链定向控制的方法分类可以分为四种控制方案:转子磁链定向控制,定子磁链定向控制,气隙磁链定向控制和阻尼磁链定向控制。根据角(定子电流相对的空间角度)的控制范围,矢量控制有三种形式。

(l)方式。

在这种方式下,,转矩表达式变为:。电磁转矩仅仅依靠交轴电流与,从而实现了力矩表达式中的交、直轴电流解耦,达到了矢量控制的目的。永磁同步电动机的电流磁势与励磁磁势正交,当磁路为线性时,定子电枢电流对转子励磁磁场既无助磁作用也无去磁作用,永磁同步电动机的电磁转矩与电枢电流交轴分量成正比,且电动机的转矩系数最大。

(2)方式。

在这种方式下,,定子电枢绕组电流存在直流分量,且该直流分量对永磁体的励磁磁场有去磁作用,永磁同步电动机伺服系统工作在基速以上时,可以在该方式控制下实现弱磁升速控制。

(3)方式。

在这种方式下,,电枢绕组电流存在直轴分量,且该直轴分量对转子励磁磁场有助磁作用永磁同步电动机工作在该方式下可在一定程度上提高其输出转矩[20]。

凸极永磁同步电机组成的伺服驱动系统中,可以灵活地利用磁阻转矩。例如,在基速以下恒转矩运行区中,控制角,使其在范围内,就可以提高转矩值。在恒功率运行区,通过调整和控制角可以提高输出转矩和扩大速度范围。

3.3空间矢量脉宽调制概念

从原理上讲,SVPWM以三相对称正弦波电压供电时交流电机产生的理想圆形磁链轨迹为基准,用逆变器不同的开关模式产生的实际电机产生的理想圆形磁链轨迹为基准,用逆变器不同的开关模式产生的实际磁通去逼近基准磁链圆,从而达到较高的控制性能[21]。由于逆变器产生的矢量数目有限,不能产生角度连续变化的空间矢量,SVPWM方法通过8个基本空间矢量中两个相邻的有效矢量及零矢量,并根据各自作用时间不同来等效电机所需的空间电压矢量,其原理图如图3-1所示。

图3-1SVPWM向量和扇区

对于任意空间矢量时,假设位于第I扇区,把它沿、的方向分解。设PWM的周期为T,在T内导通时间为,导通时间为,或,导通时间为,可得:

同时将分解为平面上的两个空间矢量和,并考虑到功率不变条件下坐标变换虽然有变换前后两个系统功率不变的优点,但由于三相系统与二相系统的绕组匝数不等,应用空间矢量计算时应把它在各相坐标轴上的投影再乘于。从图3-1我们可以得到:

由上式就可以求得:

SVPWM调制模式采用连续开关调制模式。每次切换开关状态时,只切换一个功率开关器件,以减少开关损耗。它由3段零矢量和4段相邻的两个非零矢量组成,3段零矢量分别位于PWM波的开始,中间和结尾。开关顺序为:Uo(000),U4(100),U6(110),U7(111),U6(110),U4(100),Uo(000)。作用时间依次为:,,,,,,[22]。

按上述方法可以计算出其它五个扇区。

3.4SVPWM模块的建立

在SVPWM技术中,首先要确定合成电压矢量所处的扇区,再次要计算出基本矢量的作用时间和开关时间。电压空间矢量SVPWM波形产生模块:以两相旋转坐标系下的电压分量和作为输入,通过扇区判断、作用时间计算、过调制判断、矢量切换时间点计算、各相占空比分配等功能模块输出PWM波形,输出PWM脉冲来控制三相逆变器晶体管功率开关器件的导通或者断开状态向外供电,从而实现三相交流永磁同步电机的电压空间矢量调制[23]。

(一)扇区选择

根据图3-1中各扇区与,的关系,判断如下:当>0时,令A=1,否则A=0;当时,令B=1,否则B=0;当时,则C=1,否则C=0。确定扇区号N=A+2B+4C,得到扇区与N的对应关系如表3-1,模型如图3-2所示。

表3-1各扇区与N的对应关系

扇区号

I

II

III

IV

V

VI

N

3

1

5

4

6

2

图3-2扇区判断模型

(二)计算基本矢量的作用时间

以扇区1为例,用最近的两个相邻基本电压空间矢量,和零矢量合成参考矢量,在坐标系下分解为和,如图3-3所示

图3-3参考电压矢量映射图

在周期内,作用时间为,作用时间为,作用时间为,根据矢量作用等效有:

由图3-3根据三角关系得:

有空间矢量的定义式有:,根据以上三式计算得:

若定义:

则在不同扇区其相邻的两个基本电压空间矢量和的作用时间(对应,,),(对应,,)可以按表3-2取值。

表3-2扇区与非零矢量作用时间的对应关系

扇区号123456

-ZZX-X-YY

XY-YZ-Z-X

在一般不发生过调制的情况下,有,,最大值是,它是6个基本矢量形成的正六边形的内切圆。

对应的转换模块如图3-4:

图3-4仿真模块图

令,,。计算模型如图3-3。则N与矢量作用时间互和疋的对应关系如表3-2所示:

表3-3基本矢量作用时间

N

1

2

3

4

5

6

Z

Y

-Z

-X

X

-Y

Y

-X

X

Z

-Y

-Z

由于和和一定要小于或等于T(即PWM调制周期),所以还要进行饱和判断,当时,应取:,。其模型实现如下:

图3-5xyz/t1t2仿真模块图

(三)计算开关作用时间

令,,,则N与开关作用时间,,。之间的对应关系如表3-3所示,该模型如图3-6所示。

表3-4开关作用时间

N

1

2

3

4

5

6

图3-6计算ta,tb,tc

图3-6计算Tcm1,Tcm2,Tcm3

(四)生成PWM波形

计算得到的,,值与等腰三角形进行比较,就可以生成对称空间矢量PWM波形PWMl、PWM3、PWM5。将生成的PWM1、PWM3、PWM5进行非运算就可以生成PWM2、PWM4和PWM6[21]。模型如图3-5所示。

图3-7生成PWM波模型

3.5本章小结

本章分析了SVPWM的概念及相关的原理,并通过分析计算了其中的四个模块分别为(扇区选择,基本矢量作用时间的计算,开关作用时间的计算,生成PWM波模块等)来深入了解SVPWM的构成并建立好了SVPWM的模型。

第四章基于Matlab的永磁同步调速系统仿真模型的建立

4.1引言

在电气行业常常是软件伴随着硬件的研发而一路发展下来的每年都有新型的电子材料的出现带动着电力电子技术,微电子技术,新型电机控制理论和稀土永磁材料的快速发展到现今为止永磁同步电机(PMSM)系统在大范围伺服系统中得以应用,对于它的研究要求周期短尽可能的跟上硬件的发展,因而建立一个基于MATLAB的PMSM的仿真模型用于研究具有重要的意义[24]。基于前面几章分析的PMSM的数学模型,及空间矢量脉宽调制的基础上,借助于Matlab强大的仿真建模能力,在Matlab/Simulink中我们可以建立永磁同步电机调速系统的仿真模型。

4.2MATLAB软件的介绍

MATLAB是功能强大的科学及工程计算软件,它不但具有以矩阵计算为基础的强大数学计算和分析功能,而且还具有丰富的可视化图形表现功能和方便的程序设计能力。MATLAB的应用领域极为广泛,除数学计算和分析外。还被广泛地应用于自动控制,系统仿真,数字信号处理,图形图像分析,数理统计,人工智能,虚拟现实技术,通信工程,金融系统等领域。

在MATLAB中的Simulink改变了以往实现系统仿真和模拟的传统方法,它提供了大量的系统模块,包括了信号运算显示和系统等多方面的功能,可以创建各种类型的仿真系统,实现丰富的仿真功能,用户也可以自定义自己的模块,进一步扩展模型的范围和功能。

为了创建大型系统,Simulink提供了系统分层次排列的功能,类似于系统的设计。在Simulink中可以将系统分为高级到低级的几个层次,每层又可以细分为几个部分,每层系统构建完成后,将各层连接起来构成一个完整的系统。

模型创建完成后,可以启动系统的仿真功能分析系统的动态特性。Simulink内置的分析工具包括各种仿真算法,系统线性化,寻求平衡等,仿真结果可以以图片的方式显示在示波器的窗口,以便于用户观察系统的输出结果。Simulink的输出结果可以以变量的形式保存起来,并输入到MATLAB中以便完成进一步的分析。

Simulink可以仿真线性或非线性系统,并能够创建连续时间,离散时间或二者的混合的系统。Simulink还支持多采样频率系统,及不同的系统能够以不同的采样频率进行组合,可以仿真较大较复杂的系统[25]。

模型的创建与定义,模型的分析以及修正是使用Simulink的三大步骤,如下图显示了典型的Simulink的工作框图。

图4-1Simulink的工作框图

4.3永磁同步电机调速系统整体模型的建立

在Matlab7.0的Simulink环境下.利用Sim-PowerSystems(简称PSB)中丰富的模块库.通过分析PMSM数学模型的基础上.提出了建立控制系统仿真模型的方法。在实际设计中,虽然PSB模块是在Simulink基础上发展起来的。但PSB中的模块与Simulink中的模块大多不能直接连接.要通过PSB提供的两类中间接口模块来实现这两种模块中信号的传递:一类是电压、电流测量模块,将PSB中的电压、电流等电路信号转换为Simulink可接受的信号;另一类是受控电压源、受控电流源模块,将Simulink信号转换为PSB中的电路信号,这两类模块在Simulink和PSB之间起到了桥梁的作用,通过它们就可以将PSB与Simulink连接到一起。

系统设计框图如图4-2所示。该控制系统主要由以下几个部分组成:主电路部分(包括三相交流电源、二极管不控整流电路、逆变电源模块)。电路检测模块(检测电机转速,位置),速度控制、矢量变换及脉冲产生模块。电机本体等。

图4-2三相PMSM转子磁场定向电压空间矢量控制系统框图

PMSM本体的仿真模型可以直接使用PSB中自带的电机模块,只要根据仿真的要求合理设置相关参数就可以了。电流环为PI控制器,系统中检测电机的相电流,,位置信号,和转速。,通过Clarke和Park变换,得到直轴电流和交轴电流。将给定转速和实际转速做差,产生的偏差通过滑模控制器的作用,得到交轴电流的给定信号,直轴电流给定信号,将交轴和直轴给定信号,分别与坐标变换得到的实际电流,做差,得到的偏差通过两个PI控制器的作用,得到和,,经过Park反变换得到,。,经过空间矢量脉宽调制(SVPWM)得到六路PWM波形,然后通过驱动逆变器产生旋转的磁场,从而使永磁同步电机旋转。

参照交流电机的解耦思想,将三相永磁同步电机的三相定子绕组坐标系(ABC),等效变换为两相静止坐标系(),再经过Park变换变换为dq坐标系,使得其d轴和永磁转子N极同向,所以就可以像直流电机那样,通过调节直流量来控制转矩,从而实现永磁同步电机的解耦。

(1)坐标变换模块

图4-3的仿真图

图4-4的仿真模块图

图4-5的仿真模块图

图4-6仿真模块图

根据PMSM整体框图及各个小模块我们可以构建出永磁同步电机调速系统整体模型如下:

图4-6永磁同步电机调速系统整体仿真图

4.4仿真参数调试及结果分析

仿真中的相关参数为:定子电阻R=2.8750,=8.5mH,=8.5mH,转动惯量J=,极对数=2。仿真时,取=150,=875,=4000,给定转速300r/min,仿真时间为0.2秒,在t=0.05时刻电机加2的负载转矩。

图4-8三相电流波形

仿真时,将PI控制的幅值都限制在[-20A,20A],可以看出定子三相电流的波形基本呈正弦波,有一定的畸变,在0.05秒突加2的负载后有一个明显的跃升,符合预计的结果。

图4-9转矩波形

通过图可以看出转矩的波形在0.05s突加2负载时有明显的跳变,跳变时间只有0.02秒左右,控制效果较好。

图4-9转速波形

在转速给定为300r/min的情况下,当0.05s负载突变为2时,转速会有一个脉动,PI控制器控制的转速要经过一个较短的调节时间就能再次跟上给定,需要大约0.35秒。

本次仿真成功的实现了永磁同步电机调速系统在Matlab/Simulink中的模拟仿真,并得到了较好的仿真结果,为今后实际系统的实验奠定了基础。

4.5本章小结

本章首先讲解了Matlab中关于Simulink建立模块的相关知识,然后分析并建立了永磁同步电机调速系统的整体模型,在模型的基础上进行了相关参数设定,最后对得出的仿真结果进行了相应的分析与总结。

第五章总结与展望

5.1全文总结

MATLAB技术年得到了迅猛的发展,它可以用于语言处理、图像处理、高速控制、数字通讯等多种领域。由于它能把数字信号处理的一些理论和算法实时实现,并迅速推广到应用方面,因此得到了学术界和工程界的高度重视。因此本文把MATLAB技术用于高性能的PMSM调速系统在理论指导和实际应用方面都有一定意义,具有先进性。本文在查阅大量文献基础上通过分析建立永磁同步电机调速系统的数学模型,以及空间矢量脉宽调制(SVPWM)的数学模型,在MATLAB中的Simulink环境中建立了相关的仿真模块,利用这些模块最后搭建出一个完整的永磁同步电机调速系统,利用到的Simulink技术代替以往复杂的仿真方式为研究永磁同步电机调速系统的人们提供便利。在本课题的研究与开发过程中,主要完成了一下工作:

在查阅了国内外有关PMSM的工作原理及其运行特点的有关资料的基础上,采用SVPWM矢量控制技术,在此基础上建立PMSM数学模型。

通过网络上的相关资料学习使用MATLAB软件,在Simulink中建立SVPWM模块,搭建起完整的PMSM模型,并作出了仿真结果。

5.2研究展望

由于本人的时间及精力有限,论文的撰写过程中难免有些不足,在本文的基础上还可以做以下展望:

(1)本文的仿真是针对永磁同步电机调速系统,在本文的理论及仿真基础上还可以加位置环,完成整个私服系统的仿真。

(2)本文速度环的调节,用的是PI控制算法,它是一个传统的控制算法,在一些高要求的场合不能满足要求,可以采用控制效果更好的控制算法来控制,有待后续的学习和研究。

参考文献

[1]李骥,宋仲康。基于DSP的永磁同步电机矢量控制系统的研究[D]。武汉理工大学,2008。

[2]管良勇,徐国卿,袁登科。基于DSP的永磁同步电机新型矢量控制技术研究[D]。同济大学信息与工程学院,2009。

[3]高延荣,舒志兵,葛宏涛,基于Matlab/Simulink的永磁同步电机(PMSM)矢量控制仿真[J]。机床与液压,2008。

[4]叶军军。基于MATLAB的永磁同步电机矢量控制系统仿真[J]。商品储运与养护,2008。

[5]龚云飞,富历新。基于MATLAB的永磁同步电机矢量控制系统仿真研究[E]。哈尔滨工业大学机器人研究所,2007。

[6]李三东,薛花,纪志成。基于Matlab永磁同步电机控制系统的仿真建模[J]。江南大学,2004。

[7]高仕红。基于MATLAB永磁同步电机矢量控制的仿真研究[J]。湖北民族学院学报(自然科学版),2006。

[8]王巍。侯利民。李洪珠。基于Simulink的PMSM矢量控制系统仿真研究[J]。自动化与应用,2008。

[9]毛克诚,李云军。基于MATLAB永磁同步电机矢量控制系统仿真研究[J]。光电技术应用,2006。

[10]银英君,林荣文。基于Simulink永磁同步电机矢量控制系统仿真[J]。福建福州,福州大学电气工程与自动化学院,东方电气评论,2010。

[11]洪熙闻,王钦若。永磁同步电机电压空间矢量控制仿真研究[D]。广州,广东工业大学自动化学院,2010。

[12]赖重平,李春茂。永磁同步电机交流伺服控制系统的研究[D]。西南交通大学,2009。

[13]邓干铭,永磁同步电机控制系统仿真[J]。龙岩学院院报,2010。

[14]李海涛,邓樱。MATLAB程序设计教程[M],高等教育出版社,2002

[15]于艳君,程树康,柴凤.永磁同步电动机无传感器控制综述[J].微电机,2007。

[16]梁艳,李永东.无传感器永磁同步电机矢量控制系统概述[J].电气传动,2003。

[17]宫明玉,廖晓钟,冬雷.无速度传感器异步电机按定子磁链定向的矢量控制系统[J].电气传动,2005。

[18]黄雷,赵光宇,年珩.基于扩展反电势估算的内插式永磁同步电动机无传感器控制[J].中国电机工程学报,2007。

[19]江俊,沈艳霞,纪志成.基于EKF的永磁同步电机转子位置和速度估计[J].系统仿真学报,2005。

[20]吴春华,陈国呈,孙承波.基于滑模观测器的无传感器永磁同步电机矢量控制系统[J].电工电能新技术,2006。

[21]周雒维,杨柳,彭国秀,杜雄.一种永磁同步电机滑模观测器的设计[J].重庆大学学报,2008。

[22]沈艳霞,纪志成.基于无源性永磁同步电机模糊滑模控制系统研究[J].系统仿真学报,2007。

[23]海老原大树.电动机技术实用手册[M].北京:科学出版社,2006。

[24]林伟杰.永磁同步电机伺服系统控制策略的研究[D],[博士学位论文].杭州:浙江大学电气工程系,2005.

[25]尔桂花,窦日轩.运动控制系统[M].北京:清华大学出版社,2002.

致谢

首先感谢我的指导老师,本论文是在他的悉心指导和关怀下完成的。在整个课题研究期间,张老师严谨的治学态度、渊博的专业知识以及忘我的工作热情对我的一生都有着非常深远的影响,并激励我不断努力学习和工作,向着更高的人生目标奋斗!此外,课题研究期间,使我受益的不仅是张老师广博的知识,丰富的经验,更为重要的是张老师在为人,为师,以及科研中的踏踏实实严谨的态度。

在论文的撰写期间,我要感谢许多让我分享他们宝贵经验和知识的老师及朋友。与此同时,感谢给我大量指导的师兄等,他们给我提出了许多宝贵的意见,给了我不少帮助。在此表示最深的谢意。

感谢我的家人,在我的成长过程中,他们给了我无私的爱和永远的支持与鼓励,在此向他们表示衷心的感谢。

最后,对评审论文的各位专家、学者表示衷心的感谢!

附录资料:不需要的可以自行删除

C语言编程规范(仅供参考)

1.基本要求

1.1程序结构清析,简单易懂,单个函数的程序行数不得超过100行。

1.2打算干什么,要简单,直接了当,代码精简,避免垃圾程序。

1.3尽量使用标准库函数和公共函数。

1.4不要随意定义全局变量,尽量使用局部变量。

1.5使用括号以避免二义性。

2.可读性要求

2.1可读性第一,效率第二。

2.2保持注释与代码完全一致。

2.3每个源程序文件,都有文件头说明,说明规格见规范。

2.4每个函数,都有函数头说明,说明规格见规范。

2.5主要变量(结构、联合、类或对象)定义或引用时,注释能反映其含义。

2.7常量定义(DEFINE)有相应说明。

2.8处理过程的每个阶段都有相关注释说明。

2.9在典型算法前都有注释。

2.10利用缩进来显示程序的逻辑结构,缩进量一致并以Tab键为单位,定义Tab为6个

字节。

2.11循环、分支层次不要超过五层。

2.12注释可以与语句在同一行,也可以在上行。

2.13空行和空白字符也是一种特殊注释。

2.14一目了然的语句不加注释。

2.15注释的作用范围可以为:定义、引用、条件分支以及一段代码。

2.16注释行数(不包括程序头和函数头说明部份)应占总行数的1/5到1/3。

3.结构化要求

3.1禁止出现两条等价的支路。

3.2禁止GOTO语句。

3.3用IF语句来强调只执行两组语句中的一组。禁止ELSEGOTO和ELSERETURN。

3.4用CASE实现多路分支。

3.5避免从循环引出多个出口。

3.6函数只有一个出口。

3.7不使用条件赋值语句。

3.8避免不必要的分支。

3.9不要轻易用条件分支去替换逻辑表达式。

4.正确性与容错性要求

4.1程序首先是正确,其次是优美

4.2无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查。

4.3改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。

4.4所有变量在调用前必须被初始化。

4.5对所有的用户输入,必须进行合法性检查。

4.6不要比较浮点数的相等,

如:10.0*0.1==1.0,不可靠

4.7程序与环境或状态发生关系时,必须主动去处理发生的意外事件,如文件能否

逻辑锁定、打印机是否联机等。

4.8单元测试也是编程的一部份,提交联调测试的程序必须通过单元测试。

5.可重用性要求

5.1重复使用的完成相对独立功能的算法或代码应抽象为公共控件或类。

5.2公共控件或类应考虑OO思想,减少外界联系,考虑独立性或封装性。

5.3公共控件或类应建立使用模板。

附:C++编程规范,delphi作相应的参考

1适用范围

本标准适用于利用VisulC++,BorlandC++进行软件程序开发的人员.。

.2变量命名

命名必须具有一定的实际意义,形式为xAbcFgh,x由变量类型确定,Abc、Fgh表示连续意

义字符串,如果连续意义字符串仅两个,可都大写.如OK.

具体例程:

BOOL类型bEnable;

ch*charchText

c*类对象cMain(对象实例)

h*Handle(句柄)hWnd

i*int

n*无符号整型

p*指针

sz,str*字符串

wWORD

x,y坐标

Char或者TCHAR类型与WindowsAPI有直接联系的用szAppName[10]形式否则用

FileName[10]形式,单个字符也可用小写字母表示;

Int类型nCmdShow;

LONG类型lParam;

UINT类型uNotify;

DWORD类型dwStart;

PSTR类型pszTip;

LPSTR类型lpCmdLine

LPTSTR类型lpszClassName;

LPVOID类型lpReserved

WPARAM类型wParam,

LPARAM类型lParam

HWND类型hDlg;

HDC类型hDC;

HINSTANCE类型hInstance

HANDLE类型hInstance,

HICON类型hIcon;

intiTmp

floatfTmp

DWORDdw*

String,AnsiStringstr*

m_类成员变量m_nVal,m_bFlag

g_全局变量g_nMsg,g_bFlag

局部变量中可采用如下几个通用变量:nTemp,nResult,I,J(一般用于循环变量)。

其他资源句柄同上

.3常量命名和宏定义

常量和宏定义必须具有一定的实际意义;

常量和宏定义在#include和函数定义之间;

常量和宏定义必须全部以大写字母来撰写,中间可根据意义的连续性用下划线连接,每一

条定义的右侧必须有一简单的注释,说明其作用;

资源名字定义格式:

菜单:IDM_XX或者CM_XX

位图:IDB_XX

对话框:IDD_XX

字符串:IDS_XX

DLGINIT:DIALOG_XX

ICON:IDR_XX

.4函数命名

函数原型说明包括引用外来函数及内部函数,外部引用必须在右侧注明函数来源:模

块名及文件名,如是内部函数,只要注释其定义文件名;

第一个字母必须使用大写字母,要求用大小写字母组合规范函数命名,必要时可用下划线

间隔,示例如下:

voidUpdateDB_Tfgd(TRACK_NAME);file://ModuleName:r01/sdw.c

voidPrintTrackData(TRACK_NAME);file://ModuleName:r04/tern.c

voidImportantPoint(void);file://ModuleName:r01/sdw.c

voidShowChar(int,int,chtype);file://LocalModule

voidScrollUp_V(int,int);file://LocalModule

.5结构体命名

结构体类型命名必须全部用大写字母,原则上前面以下划线开始;结构体变量命名必须用

大小写字母组合,第一个字母必须使用大写字母,必要时可用下划线间隔。对于私有数

据区,必须注明其所属的进程。全局数据定义只需注意其用途。

示例如下:

typedefstruct

{

charszProductName[20];

charszAuthor[20];

charszReleaseDate[16];

charszVersion[10];

unsignedlongMaxTables;

unsignedlongUsedTables;

}DBS_DATABASE;

DBS_DATABASEGdataBase;

6控件的命名:

用小写前缀表示类别

用小写前缀表示类别:

fm窗口

cmd按钮

cobcombo,下拉式列表框

txt文本输入框

lablabal,标签

imgimage,图象

picpicture

grdGrid,网格

scr滚动条

lst列表框

frmfram

7注释

原则上注释要求使用中文;

文件开始注释内容包括:公司名称、版权、作者名称、时间、模块用途、背景介绍等,复

杂的算法需要加上流程说明;

函数注释包括:输入、输出、函数描述、流程处理、全局变量、调用样例等,复杂的函数

需要加上变量用途说明;

程序中注释包括:修改时间和作者、方便理解的注释等;

引用一:文件开头的注释模板

/******************************************************************

**文件名:

**Copyright(c)1998-1999*********公司技术开发部

**创建人:

**日期:

**修改人:

**日期:

**描述:

**

**版本:

**

******************************************************************/

引用二:函数开头的注释模板

/*****************************************************************

**函数名:

**输入:a,b,c

**a

**b

**c

**输出:x

**x为1,表示...

**x为0,表示...

**功能描述:

**全局变量:

**调用模块:

**作者:

**日期:

**修改:

**日期:

**版本

****************************************************************/

引用三:程序中的注释模板

/**/

/*注释内容*/

/**/

8程序

a.程序编码力求简洁,结构清晰,避免太多的分支结构及太过于技巧性的程序,

尽量不采用递归模式。

b.编写程序时,亦必须想好测试的方法,换句话说,”单元测试”的测试方案应

在程序编写时一并拟好。

c.注释一定要与程序一致。

d.版本封存以后的修改一定要将老语句用/**/封闭,不能自行删除或修改,并要

在文件及函数的修改记录中加以记录。

e.程序中每个block的开头”{"及"}”必须对齐,嵌套的block每进一套,

缩进一个tab,TAB为4个空格,block类型包括if、for、while、do等关键字引出的。

f.对于比较大的函数,每个block和特殊的函数调用,都必须注明其功能,举例如下

count.divisor=1193280/freq;//computethepropercount

OutByte((unsignedshort)67,(unsignedchar)182);//tell8253thata

countiscoming

OutByte((unsignedshort)66,count.c[0]);//sendlow-orderbyte

OutByte((unsignedshort)66,count.c[1]);//sendhigh-orderbyte

×××××××××××××××××××××××××××××××××××××××

bcb,delphi中的变量命名:

遵循匈牙利命名法,命

名必须有意义,制定如下规定

窗体:以大写的W开始,如About版权窗体,命名为WAbout

文件:以大写的F开始,如About版权窗体,文件命名为FAbout.cpp

按钮(Button):如退出按钮,命名为btnExit

……

基类:加base标记,如报表基类,窗体命名为:WBaseRep,文件命名为FBaseRep.cpp

转贴

>1.在.h/.cpp的开头应有一段格式统一的说明,内容包括:

>a.文件名(FileName);

>b.创建人(Creater);

>c.文件创建时间(Date);

>d.简短说明文件功能、用途(Comment)。

好习惯

>2.除非极其简单,否则对函数应有注释说明。内容包括:功能、入口/出口参数,必

>时还可有备注或补充说明。

还是好习惯

>3.每列代码的长度推荐为80列,最长不得超过120列;折行以对齐为准。

太宽了,我的限制是60列,因为文本方式下屏幕一共80列,如果你用BC这一类的编辑

器,窗口边框等又要占据一定空间,所以80列太宽

>4.循环、分支代码,判断条件与执行代码不得在同一行上。

很对

>5.指针的定义,*号既可以紧接类型,也可以在变量名之前。

>

>例:可写做:int*pnsize;

>

>也可写做:int*pnsize;

>

>但不得写做:int*pnsize;

建议采用第二种,除非附加另外一条规定:一次只声明一个变量,否则就会让人混淆,

比如:

int*a,b;

看起来b好像也是个指针,其实不是。

>6.在类的成员函数内调用非成员函数时,在非成员函数名前必须加上"::"。

这一条我倒觉得并不是必需的,我的看法是决不要让你的类成员函数和全局函数的名称

相同(或类似)

>7.函数入口参数有缺省值时,应注释说明。

>

>例:BOOLCWpsDib::PaintDIB(CDC*pDC,CRect&rc,

>intnBrightness,file://*=0*//

>BOOLbGrayScalefile://*=FALSE*//)

每个变量写一行,必要时加上/*in,out*/注释

>8.elseif必须写在一行。

应该尽量避免elseif这样的结构

>9.与‘{’、‘}’有关的各项规定:

>

>9.1‘{’、‘}’应独占一行。在该行内可有注释。

>9.2‘{’必须另起一行,‘{’之后的代码必须缩进一个Tab。‘{’与‘}’必须在

>一列上。

>9.3在循环、分支之后若只有一行代码,虽然可省略‘{’、‘}’,但不推荐这么

>做。若省略后可能引起歧义,则必须加上‘{’、‘}’。

持保留意见,因为GNU的代码规范是这样的:

if(NULL==ptr)

{

//dosomethinghere

}

或者

if(NULL==ptr){

//dosomethinghere

}

争论哪个更好并没有意义,关键是统一,如果用VC当然你的办法最方便,可是如果你用

emacs或者vi,就不是这样了。

>10.与空格有关的各项规定。

>

>10.1在所有两目、三目运算符的两边都必须有空格。在单目运算符两端不必空格。

>在‘—>’、‘::’、‘.’、‘[’、‘]’等运算符前后,及‘&’(取地址)、‘*

>’(取值)等运算符之后不得有空格。

>10.2for、while、if等关键词之后应有1个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论