资源描述
南昌航空大学学士学位论文
第一章 绪论
1.1 选题的依据及意义
随着人们生活水平的提高,产品质量、精度、性能、自动化程度、功能以及功耗、价格等已经是选择家用电器的主要因素。就电动机而言,传统的有刷直流电动机以机械方法进行换向,存在着相对的机械摩擦,由此存在噪声、火花、无线电干扰以及寿命短等致命弱点,制造成本高及维修困难等缺点,大大地限制了它的应用范围。永磁无刷直流电动机是近年随着电力电子器件及新型永磁材料发展而迅速成熟起来的一种新型机电一体化电机,既具有交流电机的结构简单、运行可靠、维护方便等优点,又具备直流电机固有的优越的启动性能和调速特性。其无机械式换向机构,现以广泛应用于各种调速驱动场合,应用前景看好,尤其从当今的环保、能源、效率等综合因素出发,水磁无刷直流电机可望在未来的电动产业占有主导地位。
就目前而言,永磁无刷直流电动机控制器结构已有多种形式,由最初复杂的模拟式到近来以单片机为核心的数字式,新型电机控制专用芯片的出现,给无刷直流电机调速装置设计带来了极大的便利,这种集成模拟控制芯片控制功能强、保护功能完善、工作性能稳定,组成的系统所需外围电路简单、抗干扰能力强、特别适用于对控制器体积、价格性能比要求较高的场合。然而专用控制芯片优点固然多,但往往价格比较昂贵,在一些控制要求精度不是很高的场合,就需要能有一种工作稳定、价格又比较低廉的控制器。本设计就是基于此市场需求,详细介绍了一种基于普通的STC89C52单片机作为主控芯片的无刷直流电动机控制器的设计。
1.2 研究概况及发展趋势
无刷直流电动机是在有刷直流电动机的基础上发展起来的,这一渊源关系从其名称中就可以看出来。有刷直流电动机从19世纪40年代出现以来,以其优良的转矩控制特性,在相当长的一段时间内一直在运动控制领域起主导作用。但是,有机械接触电刷换向器降低了系统的可靠性,使得其在很多场合中无法使用。为了取代有刷直流电动机的机械换向装置,人们进行了长期的探索。很早就有人提出了用整流管代替有刷直流电动机的机械电刷,从而诞生了无刷直流电机的基本思想。
1.2.1 无刷直流电机在国外的发展概况
1955年美国的D.Harrison等首次申请了用晶体管换相线路代替有刷直流电动机的机械电刷的专利,标志着现代无刷直流电动机的诞生。无刷直流电动机的发展在很大程度上取决于电力电子技术的进步,当时大功率开关器件仅处于初级发展阶段,可靠性差,价格昂贵,加上永磁材料和驱动控制技术水平的制约,使得无刷直流电动机自发明以后的一个相当长的时间内,性能都不理想,只能停留在实验室阶段,无法推广使用。
70年代初,随着电机技术及其相关学科的迅猛发展,无刷直流电机进入了实用阶段,在计算机外设等领域开始应用,还先后研究成功方波和正弦波无刷直流电机。近40年来,“无刷直流电机”的概念已由最初的具有电子换向器的直流电机发展到泛指一切具有传统直流电机外部特性的电子换向电机。如今的无刷直流电机集特种电机、变速机构、检测元件、控制软件与硬件于一体,形成为新一代电动调速系统,是体现着当时应用科学的许多最新成果的高科技产物,在各个领域得到了广泛的应用,无刷直流电动机系统因而得到了迅速的发展。在1978年汉诺威贸易博览会上,前联邦德国的MANNESMANN公司正式推出了 MAC无刷直流电动机及其驱动器,引起了世界各国的关注,随即在国际上掀起了研制和生产无刷直流系统的热潮,这也标志着无刷直流电动机走向实用阶段。
1986年,H.R.Bolton对无刷直流电动机作了全面系统的总结,指出了无刷直流电动机的研究领域,成为无刷直流电动机的经典文献,标志着无刷直流电动机在理论上走向成熟。
1.2.2 无刷直流电机在中国的发展概况及其应用领域
我国对无刷直流电动机的研究起步较晚。1987年,在北京举办的联邦德国金属加工设备展览会上,SIEMENS和BOSCH两公司展出了永磁自同步伺服系统和驱动器,引起了国内有关学者的广泛注意,自此国内掀起了研制开发和技术引进的热潮。经过多年的努力,国内目前已有无刷直流电动机的系列产品,形成了一定的生产规模。
我国的无刷直流电机也已在航模、医疗器械、家用电器、电动车等多个领域得到广泛应用,并在深圳、长沙、上海等地形成初具规模产业链,在技术上不断推进行业发展。但中国无刷直流电机产业的发展过程中出现了不少问题,许多情况不容乐观,如产业结构不合理、产业集中于劳动力密集型产品;技术密集型产品明显落后于发达工业国家;产业能源消耗大、产出率低、环境污染严重、对自然资源破坏力大;企业总体规模偏小、技术创新能力薄弱、管理水平落后等。
1.2.3 当今世界对无刷直流电机的研究热点
当今世界对无刷直流电机的研究热点主要集中在以下三个方面:
(l)从电机设计和控制策略等方面出发,研究无刷直流电机转矩波动抑制方法并提高其伺服精度,扩大其应用范围;
(2) 设计可靠、小巧、通用性强的集成化无刷直流电机控制器;
(3) 研究无位置传感器控制技术以提高系统的可靠性,进一步缩小电机控制系统的尺寸与重量。
1.3 主要研究内容及结构安排
1.3.1 主要研究内容
本文对无刷直流电机的原理、结构和控制方法进行了深入的分析,根据市场上现有的无刷直流电机控制器的主要特点进一步进行性能的优化,高效率,超平稳,低成本的无刷直流电机控制器。重点介绍了基于STC89C52单片机的无刷直流电机控制器系统的硬件电路的软件设计,具体为:
① 查找资料,了解无刷直流电机的工作原理、控制方式以及无刷直流电机控制器的软硬件设计方案;
② 根据控制器的主要功能,设计系统总体控制框图和控制策略,选择STC89C52作为控制器的主控芯片,硬件设计的组成部分有速度显示电路、按键电路、程序下载电路、功率驱动电路、过流保护电路等模块电路组成;
③ 软件设计则根据从硬件采集到的位置信号、正反转信号、停止信号等,通过52单片机的处理,分别作出换相、正反转、PWM调制、停止等一些相应的输出动作,以实现对无刷直流电机的控制的目的。
④ 对产品进行实验室测试,并对现象进行分析。
⑤ 最终产品方案的设计,包括原理图、PCB和源代码。
1.3.2 论文结构安排
全文包括六章,各章节内容安排如下:
第一章 为绪论部分,介绍了本课题研究目的和意义,概述无刷直流电机在国内外的发展、研究与应用状况及本文的主要研究工作。
第二章 介绍了无刷直流电机的原理及其控制方案,根据任务书确定控制方案。
第三章 介绍了简单介绍硬件部分电路。
第四章 详细介绍无刷直流电机控制器的各功能的软件设计。
第五章 分析、调试。
第六章 为结论。
后面的包括:参考文献、致谢、附录。
第二章 无刷直流电机的工作原理及控制方案
三相永磁无刷直流电机一般由电子换相电路、转子位置检测电路和电动机本体三部分组成,电子换相电路一般由控制部分和驱动部分组成,而对转子位置的检测可以通过用传感器的方法或无位置传感器技术进行确定。工作时,控制器根据测得的电机转子位置有序的触发驱动电路中的各个功率管,进行有序换流,以驱动直流电动机运行。本章将简单介绍无刷直流电机的结构和控制方案。
2.1 无刷直流电机的结构分析
2.1.1 有刷直流电机的结构
图2-1为有刷直流电机的示意图。只要在电刷A、B两端通入一定的直流电流,电机的换向器就会自动改变电机转子的磁场方向,这样,直流电机的转子就会持续的运转下去。
图2-1 直流有刷电机示意图
由图分析可知,这样的结构存在一定的缺陷:
1) 电机的长期工作使用电刷容易受到粉尘的危害,降低了工作的可靠性。
2) 电刷在换向时容易产生火花,所以在很多场所限制使用。
3) 长时间工作使电机磨损严重,需要经常更换,这样就增加了维护的成本。
2.1.2 无刷直流电机的结构
图2-2为无刷直流电机的示意图,它主要由转子(永磁体)、线圈绕组的定子和位置传感器组成。无刷电机和有刷电机在结构上有着截然不同的地方:无刷直流电机用位置传感器代替换向器和电刷,不能自动换向,因此成本提高了。
图2-2 无刷直流电机示意图
图2-2所示无刷直流电机为三相星型连接单磁极对数的无刷直流电机,而且他的定子(线圈绕组)在内,转子(永磁体)在外,电动自行车上的无刷直流电机多采用这种电机。与直流有刷电机相比,直流无刷电机具有以下优点:
① 在低速下能够输出较大的转矩,因此在电动车启动时,可以提供较大的启动转矩,缩断了速度的上升时间;
② 无刷直流电机的过载能力强,使电动车所承受的载荷大、爬坡有力;
③ 无刷电机的电制动性好,由于无刷电机的制动过程是发电过程,因此可以提供更多的电力使得电动车的续航里程更大;
④ 因为无刷直流电机没有电刷,所以它没有电刷带来的危害,可靠性高;
⑤ 无刷直流电机的驱动控制较简单 ,使得其开发周期较短。
2.1.3 霍尔位置传感器
常用的无刷直流电动机位置传感器有三种电磁式、光电式和霍尔位置传感器。本节将介绍霍尔位置传感器。
置于磁场中的导体,通以电流,如果运动方向与磁场强度方向垂直,则在垂直于电流和磁场方向会产生电动势,其大小为:式中为灵敏度系数,I为电流大小,B为磁场强度。
若磁场强度方向与导体成角时,电动势的大小变为。霍尔传感器是以霍尔效应原理为基础工作的一种磁传感器,可以检测磁场及其变化,可在各种与磁场有关的场合中使用。霍尔传感器主要有两大类:开关型器件和线性器件。 本设计中采用的是开关型霍尔传感器。
开关型霍尔传感器是在线性霍尔传感器的基础上又集成了“比较功能”的集成电路,封装与线性霍尔传感器封装一样。开关型霍尔传感器可分为三种:单极性、双极性和锁存型,作为无刷直流电动机的位置传感器开关型霍尔传感器更合适。
2.2 直流无刷电机的工作原理
(a) 霍尔无刷电机内部原理图 (b)霍尔无刷电机内部结构图
图2-3 无刷电机基本结构图
在直流无刷电机中,由位置传感器(如图(a))输出位置信号,电子换相电路(如图(b))根据位置传感器输出的位置信号驱动电枢线圈绕组对应的功率开关管,各相绕组轮流通电,在电机定子上产生跳变的旋转磁场用以驱动永磁转子旋转。随着转子的转动位置传感器输出具有周期性变化的位置信号,驱动电路以位置信号为基准改变电枢绕组的通电状态,从而某一磁极下导体中的电流方向始终保持不变,无刷直流电机的无接触换相由此而来。图 2-5 为直流无刷电机的工作原理框图。
输出
转子位置传感器
电机本体
电子换相线路
直流电源
图2-4 直流无刷电机工作原理框图
本文所有讨论的都是三相星型链接的无刷直流电机。图2-6为全桥式无刷直流电机驱动电路,图中 V1,V2,V3,V4,V5,V6 为 N 沟道 MOSFET 功率管,高电平导通,低电平截止。单片机通过检测位置传感器的三个输出的不同状态来控制这 6 个开关管的导通和截止,其控制方式采用二二导通方法。
图2-5 全桥式无刷直流电机驱动电路
二二导通方式是指每一时刻电机都有两相导通,相应的有两个MOSFET功率管导通。根据图2-6的MOSFET功率管命名关系,功率开关管的导通顺序为:V1、V6→V6、V3→V3、V2→V2、V5→V5、V4→V4、V1。共六种导通状态,因此每隔 60°电角度改变一次导通状态,每改变一次状态就改变两个功率开关管的开关状态,每个功率开关管导通的电角度为 120°。当V1、V6导通时,电流流向为:电池正极→V1→U相线圈绕组→W相线圈绕组→V6→电池负极。
与三相半桥式驱动方式相比较,三相全桥星型链接二二导通方式的合成转矩大小增加了根号三倍,每隔60°电角度的空间分布,每个功率 MOSFET导通120°电角度,每相绕组通电240°电角度,线圈绕组的利用率增加了,转矩波动减小了。求得电机的瞬时电磁转矩为:
(2.1)
公式(2.1)中:Eu、Ev、Ew为U、V、W 三相的反电动势;Iu、Iv、Iw 为三相绕组的相电流;Ω为机械角速度,可见,反电动势的大小决定了电磁转矩的大小。在给定转速下,假设电流恒定不变,则反电动式越大,转矩也越大。
2.3 无刷直流电机驱动相序分析
在没有电刷的情况下要控制无刷直流电机正常换相和转动,必须对其驱动时序分析正确,所以在编写程序之前,研究无刷直流电机的驱动时序是必不可少的步骤。
图2-6 无刷直流电机逆时针转时各霍尔状态与导通管对应关系
硬件设计选用的是IR2103芯片作为驱动芯片,这款芯片可以很好地保护功率管,短时间电流过大,可避免功率管烧坏,这给调试带来方便和安全性。其真值表如表2-1:
表2-1 Ir2103驱动芯片的真值表
输入
输出
HIN
LIN
HO
LO
0
0
0
1
1
1
1
0
0
1
0
0
HIN、LIN(输入端)接单片机P1口,HO、LO(输出端)接N沟道MOS管。软件不停查询当前霍尔状态,再根据霍尔状态值获取相应控制字赋给P1口的几个控制位。结合所找资料分析得出霍尔状态值与P1口控制字的对应关系。
表2-2 二二导通方式下换相顺序及控制字(逆时针方向转动)
Hu
Hv
Hw
hall(霍尔状态值)
导通管
单片机P1.0-P1.5
控制字
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
1
0
1
0x05
V1、V4
0
1
0
0
1
1
0x13
1
0
0
0x04
V1、V6
0
0
0
1
1
1
0x07
1
1
0
0x06
V3、V6
0
0
1
1
0
1
0x0d
0
1
0
0x02
V2、V3
0
1
1
1
0
0
0x1c
0
1
1
0x03
V2、V5
1
1
0
1
0
0
0x34
0
0
1
0x01
V4、V5
1
1
0
0
0
1
0x31
图2-7 无刷直流电机顺时针转时各霍尔状态与导通管对应关系
表2-3 二二导通方式下换相顺序及控制字(顺时针方向转动)
Hu
Hv
Hw
hall(霍尔状态值)
导通管
单片机P1.0-P1.5
控制字
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
1
0
1
0x05
V2、V3
0
1
1
1
0
0
0x1c
0
0
1
0x01
V3、V6
0
0
1
1
0
1
0x0d
0
1
1
0x03
V1、V6
0
0
0
1
1
1
0x07
0
1
0
0x02
V1、V4
0
1
0
0
1
1
0x13
1
1
0
0x06
V4、V5
1
1
0
0
0
1
0x31
1
0
0
0x04
V2、V5
1
1
0
1
0
0
0x34
2.4 无刷直流电机PWM调速方式介绍
课题要求电机运转速度是可调节的,并且需要用闭环控制程序实现调速,本设计采用PWM方式进行软件调速。在位置传感器位置确定之后,根据位置状态信号,在相应导通的功率MOSFET加以PWM波驱动,则可调节PWM占空比(脉宽)来调节加在相应相上的驱动电压,以此改变驱动电流,从而改变无刷直流电机的转速。对于三相星形联结二二导通方式的无刷直流电动机,其PWM控制的方式有5种如下:
(1) PWM_ON方式:该方式是指每个开关管在120°导通区间内,前60°进行PWM控制,后60°保持常开。这种方式的特点是上下桥臂开关管交替PWM控制,每个60°区间总有一个开关管保持常开,另一个开关管PWM控制。
(2) ON_PWM方式:该方式是指每个开关管在120°导通区间内,前60°保持常开,后60°进行PWM控制。这种方式的特点是上下桥臂开关管交替PWM控制,每个60°区间总有一个开关管保持常开,另一个开关管PWM控制。
(3) H_PWM-L_ON方式:该方式是指在120°导通区间内,上桥臂开关管进行PWM控制,下桥臂开关管保持常开。这种方式的特点是上桥臂开关管总是负责PWM控制,同时也使每个60°区间总有一个开关管保持常开,另一个开关管PWM控制。
(4) L_PWM-H_ON方式:该方式是指在120°导通区间内,下桥臂开关管进行PWM控制,上桥臂开关管保持常开。这种方式的特点是下桥臂开关管总是负责PWM控制,同时也使每个60°区间总有一个开关管保持常开,另一个开关管PWM控制
(5) H_PWM-L_PWM方式 :该方式是指在120°导通区间内,上、下桥臂的开关管同时进行PWM控制。这种方式的特点是上下桥臂开关管同时导通和关断。
下图是未使用PWM调速与经PWM调速后的三相驱动电流对比图。
图2-8 电平对应图
第三章 硬件设计
如果说软件是控制器的心脏,那么硬件则是控制器的骨架,任何软件都是基于硬件而设计出来的。硬件的稳定将决定整个系统的稳定,硬件设计主要解决的问题是抗干扰,抗干扰主要体现在滤波的效果和PCB的布局布线。本设计硬件部分主要为:按键控制电路、功率变换电路、霍尔状态检测电路、电机驱动电路、显示电路和其他功能电路。
3.1 系统组成及主要器件简介
系统原理框图如图3-1所示:
微机处理中心
单片机I/O口输出驱动电路
光耦隔离电路
功率变换电路
霍尔信号
光耦隔离电路
M
速度显示电路
按键电路
状态指示
程序下载电路
图3-1 无刷直流电机总体设计原理框图
3.2 单片机设计及接口电路
3.2.1 单片机设计原理图
如图3-2所示:
图3-2 单片机设计及接口电路
单片机P3.3、P3.4、P3.5、P3.6、P3.7接按键电路,接收用户指令,P0口低四位(P0.0-P0.3)接74ls48芯片的四个输入端,控制数码管的段选通,高三位(P0.5-P0.7)接74ls138译码器的输入端,控制数码管的位选通。P1口(P1.0-P1.5)输出电机控制字,经光耦隔离电路后到IR2103驱动芯片的输入端,控制功率管的导通。P2口低3位(P2.0-P2.2)接光耦隔离后的霍尔信号,P3.0接蜂鸣器(起高速报警作用),P3.1为PWM波的输出端。
3.2.2 显示电路
用四位一体数码管来显示,如图3-3所示:
图3-3 显示电路
3.2.3 功率驱动电路
本设计使用三个IR2103专用驱动芯片来驱动三组(共六个)mos管有序导通。
图3-4 驱动电路原理图
第四章 软件设计
4.1 系统主要应用软件简介
4.1.1 Keil c单片机开发软件简介
Keil C51是美国keil software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构上、可读性、可维护性上有明显的优势,因而易学易用。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
4.1.2 STC_ISP_V3.5单片机程序下载软件简介
STC-ISP是由智峰工作室提供的公共免费下载工具,是针对STC系列单片机而设计的,可下载STC89系列、12C2052系列和12C5410等系列的STC单片机,使用简便,下载程序只需一根串口线即可,现已被广泛使用。
4.1.3 Protues 绘制电路板仿真软件简介
Protues软件功能强大,人机界面友好,易学易用,实用该软件设计者可以容易地设计电路原理图、画元件图和电路仿真。
4.2 软件系统概述
单片机测控系统的软件设计和一般在现成系统机上设计一个应用软件有所不同,后者是在系统机器操作系统等支持下的纯软件设计,而单片机的软件设计是在裸机条件下开始的,而且随系统的不同而不同。
对于单片机软件系统的设计,不论程序的大小,在软件设计过程中采用的都是模块化思想。此系统软件设计要求中,要实现的功能有正转,反转,速度显示和停止等方面。有了基本模块思路后,针对各部分进行分割,细分成各子程序合成,最后进行整合,形成一个完整的软件控制系统。
4.3 系统程序总体设计
本设计采用C语言来编写程序,程序分模块完成,主要包括:按键查询模块、工作子程序、正反转、速度显示、中断服务程序等。本设计的主要功能是驱动无刷直流电机正反转、加速以及速度显示等功能,分析硬件原理图后,软件在主程序中主要完成的是初始化和任务的执行,初始化是对两个定时器的初值进行赋值以及个变量赋给初值。任务的调度则由周期PWM波定时器0和定时器1中断来完成。
4.3.1 主程序及其流程图
void main()
{ init();
while(1)
{ if(s1==0)
{ delay(10);
if(s1==0)flag_s=1;}
if(flag_s==1)
{ z_s=11;
fm=1;
while(flag_s)
{ if(temp==1)
{ sd=((count/12)/140)*1000;//测速 count=0;//清霍尔信号改变次数计数值
T0_count=0;//清定时次数计数值
temp=0;
}
display(z_s,sd);
AN_JIAN();
G_ZUO();
}}}}
开始
初始化子程序
N
启动键是否按下?
Y
设定启动标志位
关蜂鸣器,赋状态指示变量值
N
开始计算速度否?
Y
计算速度值,相关变量和计算速度标志位清零
显示当前状态和速度值
N
有其他键按下否?
Y
进入工作程序
图4-1 主程序流程图
分析:主程序要做的事有三件,第一,初始化子程序的功能包括各变量赋初值,状态指示变量z_s=0,速度变量sd=0,霍尔状态变量hall=0x00,霍尔状态比较变量hall_1=0x00,霍尔状态改变次数值变量count=0,定时器定时次数变量T0_count=0,作为调节高电平脉宽的变量PWMZK=0;TMOD=0x02,开定时器0和1中断,置139us定时器初值1TH1=31,TL1=128,置定时器0的278us计数初值;TH0=0x00,TL0=0x00清零显示速度,开定时器0;第二,只有当启动键按下时才能进入其他按键查询工作,电机才可能有正转、反转、加速、停止等工作状态,否则程序会一直查询启动键,直到其被按下才进入下一个操作;第三,当140MS计时完成时,接收到来自中断服务程序中的temp=1的信号,开始计算速度值sd,计算公式为sd=((count/12)/140)*1000(单位是转/秒),并且将开始计算速度标志位temp置为0,计时计数变量T0_count=0,霍尔改变次数计数变量count=0。
4.3.2 正反转程序流程图
表4-1 正转霍尔状态与控制字对应关系表
霍尔状态
101
100
110
010
011
001
hall值
0x05
0x04
0x06
0x02
0x03
0x01
控制字
0x13
0x07
0x0d
0x1c
0x34
0x31
表4-2 反转霍尔状态与控制字对应关系表
霍尔状态
101
001
011
010
110
100
hall值
0x05
0x01
0x03
0x02
0x06
0x04
控制字
0x1c
0x0d
0x07
0x13
0x31
0x34
开始
通过switch查询获得相应控制字赋给P1口
返回到主程序
图4-2 正转流程图
Z_ZHUAN()
{switch(hall)
{
case 0x05: P1=0x13; break;
case 0x04: P1=0x07; break;
case 0x06: P1=0x0d; break;
case 0x02: P1=0x1c; break;
case 0x03: P1=0x34; break;
case 0x01: P1=0x31; break;
default: P1=0x15; break;
}
}
采用手动转电机转轴的方式确定电机转动的霍尔状态变换顺序,电机在180°内霍尔状态改变六次,自定义电机逆时针转为正转,在正转子程序中,hall是代表霍尔状态的变量,电机不停地转动,霍尔状态在不断的改变,hall有0x05、0x04、0x06、0x02、0x03、0x01六个值。通过不停地查询霍尔状态得到hall当前的值,再运用switch~case语句查表获取控制字送到P1口低六位以控制功率管。这样循环操作,以达到控制电机的转动和换相。定义电机顺时针转为反转,反转原理与正转类似,只是控制字不同,具体可以参照表4-2。当有正转键按下时,置正转标志flag_z=1,有反转键按下时置flag_z=0,在工作子程序(G_ZUO())中判断若flag_z=1,转到正转子程序执行,当flag_z=0时转到反转子程序执行。
4.3.3 显示子程序流程图
P0.0-P0.3接74ls48芯片的四个输入端控制数码管的段选通,P1.0-P1.5输出电机控制字,经光耦隔离后到ir2103驱动芯片的输入端,控制功率管的导通,P2.0-P2.2接三个霍尔信号,P3.0接蜂鸣器(起报警作用),P3.1为PWM波的输出端,P0.5-P0.7接74ls138译码器的输入端,控制数码管的位选通。
Y
N
四位一体数码管显示相应的值
给控制译码器的P0口赋给相应的值
四位数据显示完成否?
定义变量i=0,将两个值进行分离分别得到个、十位
开始
返回
图4-3显示子程序流程图
表4-3 74ls48译码器真值表
十进制
输入
BI/RB0
输出
LT
RBI
DCBA
a
b
c
d
e
f
g
0
H
H
0000
H
1
1
1
1
1
1
0
1
H
X
0001
H
0
1
1
0
0
0
0
2
H
X
0010
H
1
1
0
1
1
0
1
3
H
X
0011
H
1
1
1
1
0
0
1
4
H
X
0100
H
0
1
1
0
0
1
1
5
H
X
0101
H
1
0
1
1
0
1
1
6
H
X
0110
H
0
0
1
1
1
1
1
7
H
X
0111
H
1
1
1
0
0
0
0
8
H
X
1000
H
1
1
1
1
1
1
1
9
H
X
1001
H
1
1
1
0
0
1
1
分析:四位一体数码管显示比用八段数码管显示要简单,设定前两个数码管显示状态指示值(其中11表示启动,00表示停止,01表示正转,02表示反转,03表示逐步加速,04表示获取固定速度),后两位用来显示当前速度值(速度单位是转/秒)。状态指示值和速度值通过参数的形式送来赋给形参zhi_s、sudu,tempdata[]是存放四位数据的数组,由zhi_s/10获得状态指示值的十位存放在tempdata[0]中,由(zhi_s%10)获得其位值存放在tempdata[1]中;由sudu/10获得速度值的十位存放在tempdata[2]中;由sudu%10获得个位值存放在tempdata[3]中。通过查tablewe[]表获得位码tablewe[i],查tempdata[]表获得段码tempdata[i],令P0=tempwe[i]|tempdata[i]每显示完一位(如个位)变量i就加1,以达到动态显示的效果。
图4-4 正转状态显示图
图4-5 反转状态显示图
4.3.4 中断服务程序及其流程图
从换相过程中的转矩脉动角度来看,H_PWM-L_PWM方式的转矩脉动最大,以及根据老师的建议,因此选择H_PWM-L_PWM方式进行调速控制。
定时器0中断服务程序:
void timer0( ) interrupt 1//278US 自动重装
{ PWM=1;
TR1=1;
hall=0x07&P2;
if(hall!=hall_1)
{ count++;
hall_1=hall;
}
if(T0_count<=504)T0_count++;//140ms未到
else temp=1;
}
定时器1中断服务程序:
void timer1( ) interrupt 3//初始139us
{
TR1=0;
t1=0;
if(PWMZK>=31)
{
PWMZK=0;
}
TH1=31-PWMZK;
TL1=119-PWMZK;
}
定时器中断0入口
开定时器1,PWM波输出高,读取霍尔状态值
N
霍尔状态改变否?
Y
记录霍尔状态改变次数,并将当前状态值存在霍尔比较变量中
Y
定时满140ms否?
置temp标志位为1
定时次数T0_count加1
N
返回
图4-6 定时器0中断服务程序流程图
定时器1中断入口
关定时器1,PWM波的输出为低
重新赋给定时器1计数初值
返回
图4-7 定时器1中断服务程序流程图
分析:用定时器0和1同时进行来获得周期一定(为278US)的pwm波,用定时器0作为278us的标尺,在定时器0的中断服务程序中获取霍尔信号,获取霍尔状态值的方式是P2&0x07,即取P2口的第三位,并比较其是否改变,记录改变次数存于count中;测速方式是记录一定时间(本设计为140ms)内霍尔状态改变的次数,根据电机转一圈改变霍尔状态12次的规律可测出速度值,当定时器0定时次数T0_count值达到504次(即满140ms)时令开始计算速度标志位temp=1,进入到主程序中计算速度值。定时器1的计数初值TH1=31-PWMZK,TL1=128-PWMZK;当变量PWMZK的值发生改变时,定时器1的定时时间也就发生改变,即PWM波输出高电平脉宽发生改变,这样就可以改变功率管的平均电压,从而改变其平均电流已达改变速度之效。
4.3.5 加速模块介绍
if(s4==0)
{ delay(10);
if(s4==0)PWMZK++;
}
开始
加速键按下
PWM波高电平持续时间增长
返回
图4-8 加速子程序流程图
分析:若有加速键按下,PWMZK值加1,根据定时器1赋计数初值的方式TH1=31-PWMZK,TL1=128-PWMZK可知,pwm波输出高电平时间就增长,功率管导通时间增长,140ms内霍尔信号改变的次数count值增大,速度值sd随之增大,显示值就相应改变了,根据数码管显示可知速度改变的大小。如下是加速前后的比较图
图4-9 未启动显示图 图4-10 启动后显示图
图4-11 加速后显示图 图4-12 特定速度值键按下后显示图
if(s0==0)
{ delay(10);
if((s0==0)&&(flag_z!=2))
{
PWMZK=20;
flag_j=0;
}
}
开始
PWM波脉宽增长
特定速度键按下
返回
图4-13 固定速度值程序流程图
分析:任何加速状态的前提是处在正转或反转的情况下,因此必须flag_z标志要有效。起初的加速键只能在较小程度上进行加速操作,为达到快速到一定转速的目的,本设计在按键设计部分增加了固定速度按键S0,当该按键按下时,负责调节脉宽的变量PWMZK直接变为20,定时器1就可以得到固定的计数初值,这样就能获得某个设定的转速,通过计算,可以得到此时相应的速度。
4.3.6 按键查询子程序及其流程图
独立按键查询程序比较简单,下面是一个按键的查询代码,其他键类似。
if(s2==0)
{
delay(10);
if(s2==0)flag_z=1;
}
分析:按键查询子程序流程图如图4-14,程序中,主要做的事就是判断按键是否按下,根据按下的键置相应的标志位,这样在工作子程序(G_ZUO())中根据相应的标志位转到对应的子程序中执行。本设计中,正反转标志位使用同一个flag_z,这样就避免了在反转程序中将正转标志位置0,在正转程序中将反转标志位置0,减小了出错概率。当有停止键按下时,设定停止标志位,后进入相应的工作子程序。
开始
N
正转键s2按下否?
Y
设定正转标志位,置加速标志位无效
N
反转键s3按下否?
设定反转标志位,置加速标志位无效
Y
N
固定速度值键s0按下否?
Y
置相应标志位
N
电机转时加速键s3按下否?
Y
PWM波脉宽增加,置状态指示值
N
停止键s4按下否?
Y
设定停止标志位
返回
图4-14 按键查询子程序流程图
4.3.7 工作子程序及其流程图
查询按键之后,进入到工作子程序,根据按键程序中所获的标志位进行相应的操作,下面是模块代码的展示。
if(flag_z==1)
{
z_s=1;//指示正转
Z_ZHUAN();
}
if(flag_j==1)
{
z_s=3;//指示加速
if(PWMZK>=31)
{
P
展开阅读全文