找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 28040|回复: 11
打印 上一主题 下一主题
收起左侧

STM8单片机变频器设计精彩论文(控制有感 无感 无刷电机)

  [复制链接]
跳转到指定楼层
楼主
ID:342304 发表于 2018-5-31 16:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于单片机的变频器设计
摘要
变频器是从上世纪中叶发展起来的一种交流调速设备。它是为了解决传统的交流电机调速困难、传统的交变速设备不但结构复杂且效率和可靠性均不尽人意的缺点而出现的,变频器的出现使交流电机的调速范围和调速性能均大为提升。而无刷直流电机因为具有直流有刷电机的特性,同时也是频率变化的装置,所以又名直流变频,国际通用名词为 BLDC。无刷直流电机具有体积小、重量轻、维护方便、高效节能、易于控制等一系列优点,如今被大量应用。如电动自行车的主驱动电机,变频家电,如空调、冰箱等主机。控制系统是电动自行车的核心,与其控制对象——无刷直流电动机共同构成电动自行车的动力驱动系统。本文以24V,3相6极无刷直流电动机作为研究对象,建立了基于单片机的全数字化无位置传感器无刷直流电机控制系统。1概述

变频调速技术是现代电力传动技术的重要发展方向,而作为变频调速系统的核心—变频器的性能也越来越成为调速性能优劣的决定因素,除了变频器本身制造工艺的“先天”条件外,对变频器采用什么样的控制方式也是非常重要的。随着电力电子技术、微电子技术、计算机网络等高新技术的发展,变频器的控制方式今后将向数字控制变频器等方向发展。现在,变频器的控制方式用数字处理器可以实现比较复杂的运算,变频器数字化将是一个重要的发展方向。

电动自行车的驱动电机即为BLDC电机,本文以STM8S903K3单片机为核心,完成了电动自行车控制器的软硬件设计,尤其对BLDC电机的直流变频控制部分进行了重点阐述。硬件部分包括电源、MOSFET驱动、电流检测等电路的设计,画出了各电路具体工作原理图,解释了其工作原理并介绍了硬件设计注意事项。软件设计采用分模块结构,详细介绍了电子换相、欠压保护和速度控制等编程要点,画出了各模块的程序设计流程图并介绍了软件设计注意事项。

文中,着重介绍了电动自行车控制系统的基本组成和工作原理。包括无刷直流电动机的基本结构和工作原理并推导了其数学模型、电动自行车控制器的各项功能及工作原理、调速转把和制动转把的工作原理以及信号系统和照明系统的工作原理。整体上对电动自行车控制系统进行概括,为以后控制系统的软硬件设计奠定理论基础。

最后,详细阐述了以STM8S903K3单片机为核心的电动自行车控制器的软硬件设计。硬件部分包括电源、MOSFET驱动、电流检测等电路的设计,画出了各电路具体工作原理图,解释了其工作原理并介绍了硬件设计注意事项。软件设计采用分模块结构,详细介绍了电子换相、欠压保护和速度控制等编程要点,画出了各模块的程序设计流程图并介绍了软件设计注意事项。


1.2电动自行车控制系统的研究现状
电动自行车控制系统可以视为以控制器为核心,包括转把、刹把、仪表以及相关的传感器、开关按钮等器件的集成。其中,控制器决定了电动车的操控性能,因此控制器功能的提高、完善及合理发挥对于电动自行车控制系统来说尤为重要[10]。
电动自行车控制器的主要形式有:分立元件加少量集成电路构成的模拟控制、基于专用集成电路的控制系统、以微型计算机技术为核心的数模混合控制系统和全数字控制系统[11~12]。
模拟控制系统由于模拟电路中不可避免的存在参数漂移和参数不一致等问题,加上线路复杂、调试不便等因素,使电机的可靠性和性能受到影响,在电动自行车控制器中己经不采用了。
基于专用集成电路的控制系统采用无刷直流电动机专用集成电路如MC33033、MC33035、ML4428为控制核心,克服了分立元件带来的弊端,使控制电路体积小、可靠性高,但功能难以扩展,在早期的电动车控制器中应用较多。
数模混合控制系统和全数字控制系统采用数字电路、单片机以及数字信号处理器(DSP)构成硬件系统,控制规律由硬件实现转向软件实现。控制灵活、功能扩展方便且易实现较复杂的控制算法。目前的电动自行车控制器普遍采用这种控制系统[13]。
电动自行车控制器发展趋势及研究难点
1)研究难点
a.电机转矩脉动优化控制。120°六步换相控制时容易出现转矩脉动,影响无刷直流电机的平稳运行,增加噪声并降低效率。通常可通过调整PWM载波方式和重叠换相来抑制电流换相引起的转矩脉动。目前,为了减少转矩脉动,BLDC电机的控制方法的研究正在从传统的120°控制方法到180°的控制方法转换。
b.增加电机力矩。自行车在起动和爬坡时,要求电机及控制器有充分的过载能力,以提供足够的起动和爬坡力矩。通常,通过增加电流闭环控制可获得更大的起动力矩和响应速度。现状正在研究通过对电机的弱磁控制来增加电机的力矩。
c.能量再生控制及辅助电子刹车。续程性能一直是制约电动车发展的关键因素之一,提高续程的方法除了改进蓄电技术以及驱动策略外,还有就是刹车时采用先进的能量回收控制。目前已有的电动自行车能量回收方案基本上是基于电动汽车的能量回收控制理论,但大多数控制器并没有充分进行能量回收控制,只是作为ABS辅助刹车时的一个附加功能。
d.无位置传感器的BLDC控制。位置传感器的存在增加了电机的体积和成本,同时给电动自行车增加了一个故障源。统计表明,多数电动自行车的电机损坏实际上是由于位置传感器失效造成的。针对位置传感器的不利因素,人们对无位置传感器的BLDC控制技术进行了很多的研究,并在空调系统、风机等不同设计中得到广泛的应用。但在电动自行车中,由于无位置传感器控制技术无法解决平稳启动的问题,因此难以得到最终客户的认可,而一直没有得到广泛的使用。所以,该技术目前的瓶颈是如何解决平稳启动。
2)发展趋势
廉价化。对于现有的成熟设计,追求更低的成本。通过选用更低价钱的元器件以及MCU,相应地,MCU厂商会配合推出更新工艺的廉价兼容型号来降低控制器的成本。
智能化。智能化越来越成为电动自行车控制器的发展趋势。MCU必须具有自检、自维护能力,确保动作的“万无一失”。另外,防盗报警功能,电源自动识别功能,自动识别电机、智能锁功能等人性化设计都是技术上的发展方向。
集成化。集成化可以实现体积小、效率高、返修率低,因此是品牌厂家的首选。目前市场上普遍使用的控制器方案设计陈旧,外部分立元件多,任何一个元件失效都会影响到电控器质量。因此高度集中化是未来的发展方向。
定制化。由于电动自行车市场的庞大,为了进一步降低成本,一些公司开始专门为电动自行车业定制芯片。同时对于电动自行车控制器的设计部门来说,根据客户需求开发相应功能的控制器也是未来的发展方向[14]。

论文研究内容和结构
本文在前人研究的基础上,以24V,3相6极无刷直流电动机作为研究对象,研究的目的是开发出一款可供电动自行车领域的无刷直流电机无位置传感控制系统参考的控制器。
本论文首先详细介绍了本课题研究背景及意义、电动自行车的国内外发展现状和电动自行车控制器的研究难题及未来发展趋势。接着介绍了无刷直流电动机的基本结构、工作原理以及数学模型。然后介绍了电动自行车控制系统的各个组成部分并对各部分工作原理进行分析。介绍了无刷直流电机的数学模型,使用硬件电路的方法去检测反电动势过零点。最后对电动自行车控制系统软硬件部分进行分模块研究与分析,给出了系统软硬件设计框图及各模块的具体电路原理图和软件控制程序流程图。


无刷直流电机概述
无刷直流电机是随着电子技术的迅速发展而发展起来的一种新型直流电机,它是现代工业设备中重要的运动部件。无刷直流电机以法拉第的电磁感应定律为基础,而又以新兴的电力电子技术、数字电子技术和各种物理原理为后盾,具有很强的生命力。
无刷直流电机最大特点是没有换向器(曾称整流子)和电刷组成的机械接触机构。因此,无刷直流电机没有换向火花,寿命长,运行可靠,维护简便。此外,其转速不受机械换向的限制,如采用磁悬浮轴承或空气轴承等,可实现每分钟几万到几十万转的超高转速运行。
由于无刷直流电机具有上述一系列有点,因此,它的用途比有刷直流电机更加广泛,尤其适用于航空航天、电子设备、采矿、化工等特殊工业部门[47]。

无刷直流电机控制系统概况
一个多世纪以来,电动机作为机电能量转换的装置,其应用范围已遍及国民经济的各个领域以及人们的日常生活之中。电动机主要类型有同步电动机、异步电动机(感应电动机)与直流电动机三种,其容量小到几瓦,大到上万千瓦。众所周知,直流电动机具有控制简便和调速性能好等诸多优点,但传统的直流电动机均采用电刷,以机械方法进行换向,因而存在机械摩擦,由此带来了噪声、火花、无线电干扰以及寿命短等致命弱点,再加上制造成本高及维修困难等缺点,从而大大地限制了它的应用范围[15]。
随着社会生产力的发展,人们的生活水平的普遍提高,需要不断地开发各种新型电动机。科学技术的进步,新技术、新材料的不断涌现,更促进了电动机产品的不断推陈出新。针对上述传统直流电动机的弊病,早在20世纪30年代,就有人开始研制以电子换向来代替电刷机械换向的无刷直流电动机,并取得了一定成果[16]。但由于当时大功率电力电子器件仅处于发展的初级阶段,没能找到理想的电子换向的元器件,这就使得这种电动机只能停留在实验室研究阶段,无法推广使用。1955年,美国人D·哈利森等人首次申请了应用晶体管换向代替电动机机械换向器换向的专利,这就是现代无刷直流电动机的雏形[16]。但由于该电动机尚无启动转矩,因而不能产品化。而后,又经过人们多年努力,借助于霍尔元件来实现幻想的无刷直流电动机终于在1962年问世,从而开创了无刷直流电动机产品化的新纪元[16]。20世纪70年代以来,随着电力电子工业的飞速发展,许多新型的高性能大功率电力电子器件,如GTR、MOSFET、IGBT等相继出现,以及高性能永磁材料,如钐钴、钕铁硼等的问世,均为无刷直流电动机的广泛应用奠定了坚实的基础。
典型的无刷直流电动机控制系统主要由电机本体、转子位置传感器、主回路逆变器和控制逻辑单元构成,其中电机本体与转子位置传感器往往做成一体,而在本文中主回路逆变器被称作驱动电路,而控制逻辑单元则称作控制电路。
当前无刷直流电机调速系统驱动电路采用的功率器件主要是IGBT、MOSFET等全控型器件[15]。
根据获取转子位置的不同方式,无刷直流电机调速系统分为两大类:有位置传感器的无刷直流电机调速系统和无位置传感器的无刷直流电机调速系统。前者指电机上安装特殊的装置,直接获取转子位置信息的调速系统;后者指由系统变量间接确定转子位置的调速系统。无位置传感器的无刷直流电机调速系统具有体积小、结构简单、易于维护等优点,是无刷直流电机控制领域的一大研究方向[15]。
无刷直流电机本体有多种分类方式。根据定子相数的不同,可分为三相或多相无刷直流电机,其中以三相电机应用最为普遍;根据转子位置的不同,可分为内转子或外转子无刷直流电机;根据电机磁场方向的不同,可分为径向磁场或轴向磁场(盘式)无刷直流电机等[1]。
由于无刷直流电动机既具备交流电动机的结构特点、运行可靠、维护方便等一系列优点,又具备直流电动机调速性能好等诸多优点,故而在当今国民经济的各个领域,如医疗器械、仪器仪表、化工、轻纺以及家用电器等方面的应用日益普及。如计算机硬盘驱动器和软盘驱动器里的主轴电动机、DVD机中的伺服电动机,均数以百万计地运用无刷直流电动机[16]。


无刷直流电机的结构与工作原理无刷直流电机的结构
无刷直流电动机的主要组成部分有电动机本体、位置传感器与电子开关等3部分,如图2.1所示。电动机本体在结构上与永磁同步电动机相似,但没有笼形绕组和其他起动装置。定子绕组一般制成多相(三、四、五相不等),转子由永久磁铁按一定的极对数(2p = 2,4,…)组成,电子开关一般是由功率电子器件和它的控制电路以及转子位置传感器等组成。图1所示的电动机本体为2极三相。定子A、B、C相绕组分别与电力开关元件V1、V2、V3相接。位置传感器的跟踪转子与电动机转轴相链接。
图2.1 无刷直流电动机的组成原理图
定子绕组的某一相通电时,该电流与转子永久磁铁的磁极产生的磁场相互作用,从而产生转矩,驱动转子旋转;再由位置传感器将转子磁极位置信号变换成电信号,去控制电子开关线路,从而使定子各相绕组按一定顺序导通,定子相电流随转子位置的变化而按一定的顺序换相。由于电子开关线路的导通次序是与转子转角同步的,因而起到了机械换向器的换向作用。
因此,所谓的无刷直流电动机,就其基本结构而言,可以认为是一台由电子开关线路、永磁同步电动机本体以及转子磁极位置传感器三者共同组成的“电子电动机系统”。其原理框图如图2.2所示。
图2.2 无刷直流电动机的原理框图
无刷直流电动机中的电子开关线路是用来控制电动机定子各相绕组的通电顺序和时间的,主要由功率逻辑开关单元和位置传感器信号处理单元两部分组成。功率逻辑开关单元是控制电路的核心,其功能是将电源的功率以一定的逻辑关系分配给电动机定子的各相绕组,以使电动机产生持续不断的转矩。而各相绕组的导通顺序和时间主要取决于来自转子位置传感器的信号。但位置传感器产生的信号要经过一定的逻辑处理后去控制功率开关。综上所述,组成无刷直流电动机的主要部件如图2.3所示[17]。
图2.3 无刷直流电动机的组成框图
基本工作原理
直流电动机的结构历来都是电枢为转子,磁铁为定子,在气隙中产生励磁磁场,其电枢通电后产生感应磁场。由于电刷的换向作用,在直流电动机的运行过程中,这两个磁场的方向始终保持垂直,从而产生最大电磁转矩,驱动电动机不停运转。同时,由于这两个磁场间互为正交,理论上没有耦合作用,可以独立对电枢电流进行控制来调节电动机的运动速度,这是十分方便的。
在无刷直流电动机的情况下,为了实现无刷换向,首先要做的是把一般直流电动机的电枢绕组安放在定子上,把永久磁铁安放在转子上,这恰好与传统的直流电动机机构相反。但是仅仅这样做还是不行的,因为用一般的直流电源给定子上的各相绕组供电,只能产生固定磁场,它不能与运动中的转子磁铁产生的永久磁场相互作用,以产生单一方向的转矩驱动转子转动。所以,无刷直流电动机除了由定子和转子组成的电机本体之外,还要有位置传感器、控制电路以及功率逻辑开关共同组成的换相装置,使得无刷直流电动机在运行过程中,定子绕组所产生的磁场和在转动中转子磁铁所产生的永久磁场,在空间始终保持在90°左右的电角度[17]。
一般的永磁式直流电动机的定子由永久磁钢组成,其主要作用是在电动机气隙中建立磁场,其电枢绕组通电后产生电枢反应磁场,由于电力电子逆变器供给电枢绕组的电流并不是正弦波,而是120°的方波,因而三相合成磁动势不是恒速旋转的,而是跳跃式的步进磁动势,它和恒速旋转的转子磁动势产生的转矩除了平均转矩之外,还有脉动分量[18]。由于电力电子逆变器的换向作用,使得这两个磁场的方向在电动机运动的过程中始终保持一定的角度,从而产生最大平均转矩而驱动电动机不停地运转,与直流有刷电动机不同,无刷直流电动机的电枢转一圈,定子绕组只换相6次,每个极换相三次,相当于只有三个换向片的直流电动机。
电子换向逆变器主电路如图2.4所示,从AA’,BB’,CC’代表无刷直流电动机的三相定子绕组,采用Y型连结,逆变器为两两通电方式,120°导电型。首先假设转子处于图2.5(a)的位置,若此时使V3,V4导通,则电流从B端流入,A端流出,定子磁动势为Fa,如图2.5所示,在Fa的作用下,转子将顺时针旋转,转到图2.5(b)的位置时,如果使V4,V5导通,则电流由C端流入,A端流出,定子磁动势为Fb,在Fb的作用下,转子将继续顺时针旋转,依次类推,如果每隔60个电角度顺序使V5和V6,V1和V6,V1和V2,V3和V2两两导通,即可使定子磁动势分别如图2.5(c)、图2.5(d)、图2.5(e)图2.5(f)所示,从而形成旋转磁动势,在这个磁动势的作用下,转子也会随之旋转,如果让开关管反复按上述规律导通,即可使转子持续旋转下去,且定子磁动势总是超前于转子磁极轴线角度60°-120°之间。其各相绕组导通示意图如图2.6所示。
图2.4 逆变器主电路
图2.5 无刷直流电动机的运行原理图

图2.6 各相绕组导通示意图
由上述的分析可见,要使无刷直流电动机正确的换相运行,必须知道图2.5所示的六个转子关键位置,六个转子关键位置即对应着无刷直流电动机的反电动势的过零点后的30个电角度处。如果是有位置传感器无刷直流电动机,则可以通过传感器来直接获得转子的六个转子关键位置的信息。目前在无刷直流电动机中常用的位置传感器主要有以下几种:①霍尔效应的磁敏式开关元件;②发光二极管和光敏晶体管的光电变换开关元件;③电磁感应式位置传感元件。[17]如果是无位置传感器无刷直流电动机,则需要通过其他方法,例如利用无刷直流电动机的三相定子绕组的反电势,直接或间接的获得转子位置信息[19]。

无刷直流电机的控制原理有位置传感器BLDCM控制原理
有位置传感器的无刷直流电机的电流换向主要是通过位置传感器测得转子位置,确定功率开关器件的导通或关闭,其结构原理图如图2.7所示,位置传感器是由六只光电器件P1,P1’,P2,P2’,P3,P3’组成,位置各相差60°,均匀分布在电机的一端,借助安装在电机轴上的旋转遮光板或称截光器的作用,使得从光源依次照射在各个光电器上,并依照某光电器是否被照射到光线来判断转子的位置。当某光电器被光照射到时,它所连接的功率开关器件就导通,当某光电器没有被光照射到时,它所连接的功率开关器件就关闭。
如图2.7中旋转遮光板所在位置,光电器P2,P1被光照射到,它所连接的V3,V4导通,其所对应的转子位置和绕组产生的磁动势Fa如图2.5(a)所示;当电机按顺时针方向运转,光电器依次是P1’,P3,P3,P2’,P2’,P1,P1,P3’,P2被光照射到使得它们所对应连接的功率开关器件V4,V5,V5,V6,V6,V1,V1,V2,V2,V3依次导通,其所对应的转子位置和绕组产生的磁动势Fa分别如图2.5(b),图2.5(c),图2.5(d),图2.5(e),图2.5(f),所示,从而实现无刷直流电机的换向。
图2.7 有位置传感器无刷电机的原理图
无位置传感器BLDCM控制原理
有位置传感器的无刷直流电机的换向主要靠位置传感器检测转子的位置,确定功率开关器件的导通顺序来实现的,由于安装位置传感器增大了电机的体积,同时安装位置传感器的位置精度要求比较高,带来安装的难度因此人们在研究过程中发现,可利用电子线路替代位置传感器检测电机在运行过程中产生的反电势来确定电机转子的位置,实现换向。从而出现了无位置传感器的无刷直流电机,其原理框图如图2.8所示。
由图2.5无刷直流电动机的运行原理图可知,当电机在运行过程中,总有一相绕组没有导通,此时可以在该相绕组的端口检测到该绕组产生的反电势,该反电势在60°的电角度是连续的,由于电机的规格、制造工艺的差异,导致相同电角度的反电势值是不同,若要通过检测反电势的数值来确定转子的位置,难度极大,因此必须找到该反电势与转子位置的关系,就能确定转子的位置。从图2.9中可以看出,反电势在的电角度过程中总有一次经过坐标轴(过零点),而此点的电角度和下一次换向点的电角度正好相差30°,故可以通过检测反电势过零点,再延时30个电角度换向。
以图2.5为例,假设转子在图2.5(a)所示的位置为0°电角度,V3,V4导通,A-A’相、B-B’相有外加电压,C-C’相的产生的反电势如图2.9所示;转子旋转30个电角度后和磁动势Fa相垂直,C-C’相产生的反电势正好过零点;当转子再旋转30个电角度时(即检测到反电势过零点再延时30个电角度),到图2.5(b)所示的位置,此时使V4,V5导通,V3关闭,让A-A’相、C-C’相有外加电压,B-B’相没有外加电压,可以检测B-B’相产生的反电势过过零点再延时30个电角度,让V5,V6导通,V4关闭,依此类推,可以实现无位置传感器无刷直流电机的换向。
图2.8 无位置传感器的无刷直流电机原理框图
图2.9 电机运行时各相产生的反电势示意图
无刷直流电机控制技术研究现状
近年来,国内外学者对无位置传感器无刷直流电机控制技术的研究主要集中在以下几个方面:
无位置传感器无刷直流电机的起动
无刷直流电机在静止或低速时反电动势为零或很小,很难用来判断电机转子磁极的位置,因此必须利用其它方法对电机转子进行定位和起动控制。
1) 三段式起动方法 最常用的起动方法是“三段式”起动方法 [20~23],它分为“转子定位”、“他控同步加速运行”、“自控同步运行”三个阶段。这种方法的关键在于“他控同步”阶段到“自控同步”阶段的切换,这关系到无刷直流电机起动的成败。针对这一问题,文献[24~25]提出了“自寻最佳点切换法”。三段式起动过程的成功实现,受电机负载转矩、外施电压、加速曲线及转动惯量等诸多因素影响,具体表现为:在轻载、小惯量负载条件下,三段式起动过程一般能成功实现,但在切换阶段往往运行不平稳;当电机重载运行时,切换阶段往往会发生失步而导致起动失败;当“反电动势信号”与外同步信号相位差过大时,三段式起动可导致电机失步,即使能避免失步,也必然导致切换时电机转矩较小,易受干扰;通过优化加速曲线,三段式起动能保证电机顺利起动,但是对不同电机、不同负载,所对应的优化加速曲线不一样,这样导致通用性不强,控制过程也比较繁琐,涉及到的数据多,实现起来很不方便。
2) 预定位起动法 预定位起动方法也分为“转子定位”、“他控同步加速运行”、“自控同步运行”三个阶段。在起动阶段,按照所需的转向依次改变逆变器功率器件的触发组合状态,同时用“端电压法”检测各触发组合状态所对应的开路相的反电势过零点,并通过提高PWM占空比逐渐提高电机的外施电压。各触发组合状态的持续时间最大值保持不变,设为T0,与自控式状态一样,用计数器进行计时,换流时刻固定在T0/ 2 处。换流后对开路相的反电动势过零点进行检测,只要检测到开路相的反电动势过零点,计数器就重新复位,到T0/ 2 后再换流,这样依次进行,最后,如果连续N次检测到开路相的反电动势过零点,就切换到自控式状态。这种方法的优点是:绕组中具有时序固定不变的反电动势信号,从而可以保证电机有一个确定的转向,实现电机的正确起动,并且起动可靠,实现简单、方便,对于任意转子初始位置角,电机都能可靠实现预定位,保证电机从零速度起动并快速切换到无传感器闭环方式运行。缺点是:调试中T0和PWM的占空比的选择,以及对加速过程中占空比的变化速度的控制比较复杂,另外对切换时间要求较严,当电机惯量不同或带一定负载起动时切换时间需要调整,否则可能造成起动失败或电机反转现象,因此一般适用于电机空载起动[23]。
3) 脉冲检测起动法 这是一种采用检测脉冲进行转子定位的起动方法。尽管它也分为转子定位、加速与切换三个过程,但定位与加速阶段与三段式起动的方法是不同。转子定位时给电机的定子绕组按一定的规则施加6个短时检测脉冲,然后成对比较相应的脉冲电流峰值,通过检查预先定义的转子位置代码表,得出转子位置及随后加速时将要通电的相序。加速过程中,每次当加速脉冲结束后,再一次发出6个检测脉冲确定转子的位置,然后再确定将要通电的相序,不断重复检测—加速—检测—加速的过程,直到电机转速高到可以用反电动势法确定转子的位置时为止。这种起动方式的优点是转子定位时能保证在起动时不会产生振荡,加速时控制简单、易于实现。缺点是这种起动方法是建立在铁心电感磁饱和基础之上的,如果无刷直流电机的定子绕组不是铁心线圈,比如是空心线圈或电机转子本身是一个标准的圆柱状永磁体,则该方法的可靠性将降低。因为使用这种方法很难准确地区分出6个电流脉冲峰值的大小,从而无法实现转子的定位,也无从实现电机的可靠起动[23~26]。
4) 外部硬件电路起动方法 文献[27]提出了一种硬件电路起动的方法,这是一种升频升压的起动方式。起动时也能获得预定的起动效果,但附加的外部起动电路加大了电机的尺寸,对于较多应用于微型电机中的无刷直流电机是个不小的障碍。
无位置传感器无刷直流电机转子位置的检测
无位置传感器的无刷直流电机的位置估计方法可以从5个方面来论述:反电动势法、电流法、状态观测器法、人工智能法和磁链法。前3种方法的研究相对比较成熟,且都已得到一定程度的应用,而用人工智能方法和磁链函数法获得转子位置的研究则刚刚处于起步阶段[28]。
1) 反电动势法 检测反电动势过零点或利用反电动势直接检测换相点的方法是最常用的位置检测方法。其实现拓扑电路多采用“端电压法”和“相电压法”,即在一定的调制方式下利用无刷直流电机的端电压或相电压检测反电动势过零点或换相点来实施换相控制。反电动势过零点方法又分为直接反电动势法、反电动势积分法和定子三次谐波法等几种。直接反电动势法是通过测量三相绕组的端点电位及与中性点间的电压来实现的,当某端点电位与中性点电位相等时,则认为此刻该相反电动势过零,再延时30个电角度去触发功率开关管进行换向。反电动势积分法是根据不导通相反电动势的积分信号来获取转子位置信息的。它是从不导通相反电动势过零时开始积分,对应于换向瞬时设置一个门限,用来截止积分信号。反电动势和转速之间存在线性关系,反电动势沿斜线变化的斜率和转子速度密切相关,在整个速度运行范围内,积分器的门限值应保持不变,一旦达到积分门限,复位信号立即将积分器置零,为了避免积分器由电机启动开始积分,复位信号应保持足够长的时间来保证在电流降为零之后起动积分器。这种方法对于开关噪声不敏感,积分门限可以根据转速信号自动调节。无刷直流电机的反电动势波形为梯形波,它包含了3次谐波分量。对此分量进行积分便得到转子磁通的3次谐波信号,而转子磁链的3次谐波分量的过零点就对应着无刷直流电机的换向时刻,因此可以根据这个过零点信号进行换向控制[29~30]。
2) 电流法 由于端电压检测受速度变化、电机换向、低通滤波以及定子电阻电感存在的干扰,使得依赖端电压的测量来估算转子位置信号的准确性和精确性都受到不同程度的影响。而这些因素对电流的影响相对较小,与之对应出现了根据电机相电流信号来估计转子位置信息,进而控制无刷直流电机的换向方法,如直接电流检测法、电流变化率检测法和续流二级管法等。这种控制方法的精确性受处理器速度和功率管开关频率的限制,容易造成电流和反电动势不同相位运行,导致电机故障[31]。
3) 状态观测器法 用卡尔曼滤波器估计转子位置和转子速度的方法最早是由 M.Schroedl于1988年提出的。根据卡尔曼状态方程,应用电机测量电压和测量电流就可得到转子位置的初步估测。根据这种方法来预测转子位置和转子速度时,其运行范围主要受电压、电流传感器的测量精度来确定。
4) 人工智能方法 人工智能技术具备一定的智能行为,能够产生合适的求解问题的响应。随着人工智能技术的蓬勃发展和研究的深入,很多学者已经尝试着将人工智能的方法应用于电机控制中,神经网络是人工智能控制的一个方向,它具有很强的自适应性和自学习能力,因此将神经网络技术引入到无刷直流电机控制中进行转速估算和位置估算是很自然的一步。用这种方法预测转子位置时,运行范围主要受电压和电流的检测精度影响。
5) 磁链法 文献[32]提出建立不依赖于转子速度但是和转子磁链直接相关的磁链函数来获得转子位置的信号。该函数在每个周期内对应6个峰值,通过检测峰值来获得转子的换相信号,可保证电机在 470~35000r/min范围内有效运行。文献[33]又介绍了一种新的检测转子位置的方法,它是在永磁转子的表面粘贴一些非磁性材料,利用定子绕组高频开关工作时非磁性材料的涡流效应,使开路相电压的大小随转子位置角发生变化,从而可通过检测开路相电压来判断转子位置。这种方法完全排除了使用反电势,因而能保证起动和低速运行时可靠地工作。
无刷直流电机转矩脉动抑制
对方波型无刷直流电动机换相转矩脉动的研究,主要集中在控制换相期间三相电流的变化规律。针对无刷直流电机转矩脉动的问题,国内外学者也都纷纷提出了不同的抑制措施。文献[34]介绍的重叠换相法和PWM斩波控制法是通过改变换相时刻绕组的导通规律来调整电流的上升和下降斜率,从而达到转矩脉动抑制的目的。文献[35~38]研究了4倍的反电动势电压和母线电压的比值与转矩脉动的规律,研究结果显示,在换相时采用的占空比为反电动势电压和母线电压比值的4倍时就可以保证非换相的电流保持不变,从而减少转矩脉动,但是这种方法对占空比的要求比较严格,难以保证在整个调速范围内维持这种关系。为此,文献[39]提出了一种新的换相电流预测控制方法,该方法是通过使用前一次的电流值和占空比来预测下一时刻的电流值,再采用合适的方法调节电流达到减少转矩纹波的目的,但是这种方法计算繁琐,给软件设计工作带来不便。对于换相后不导通相的电流波动规律,文献[40]则做了详细地分析并给出了仿真波形加以验证,但并没有给出实测波形,也提出电流波动抑制的措施。
无刷直流电机的控制策略问题
永磁无刷直流电动机是典型的机电一体化产品。传统的控制策略是采用经典的 PID 控制,而采用先进的控制策略则可以进一步提高系统的整体性能。对此,国内外文献中也提出了一系列新的控制策略,如模糊 PID 控制策略[41],自适应的模糊神经控制策略[42],模型参考自适应控制策略[43~44],单神经元控制策略[45~46]。总之,先进的控制策略主要集中在非线性建模、自学习方法的选择及局部控制等方面,其实现必然要通过微机或高性能的浮点处理器,成本比较高。

无刷直流电机的运行特性
无刷直流电机的运行特性是指电机在起动、正常工作和调速等情况下,电机外部各可测物理量之间的关系。
电机是一种输入电功率、输出机械功率的原动机械。因此,我们最关心的是它的转矩、转速,以及转矩和转速随输入电压、电流、负载变化而变化的规律。据此,电机的运行特性可分为起动特性、工作特性、机械特性和调速特性。
讨论各种电机的运行特性时,一般都从转速公式、电动势平衡方程式、转矩公式和转矩平衡方程式出发。
对于无刷直流电机,其电动势平衡方程式为
                                           (2.1)
式中,是电源电压(V);是电枢绕组反电动势(V);是平均电枢电流(A);是电枢绕组的平均电阻(Ω);是功率晶体管饱和管压降(V);对于桥式换相线路为
对于不同的电枢绕组形式和换相线路形式,电枢绕组反电动势有不同的等效表达式,但不论哪一种绕组和线路结构,均可表示为
                                                     (2.2)
式中,是电机转速(r/min);是反电动势系数(V/r/min)。
由式(2.1)、式(2.2)可知:
                                       (2.3)
在转速不变时,转矩平衡方程式为
                                                 (2.4)
式中,是输出转矩(N·m),是摩擦转矩(N·m),是电磁转矩(N·m)。这里,
                                                    (2.5)
为转矩系数(N·m/A)。
在转速变化的情况下,则
                                           (2.6)
式中,是转动部分(包括电机本体转子及负载)的转动惯量(kg·m2);是转子的机械角速度(rad/s)。
下面从这些基本公式出发,来讨论无刷直流电机的各种运行特性。
起动特性
由式(2.1)~式(2.6)可知,电机在起动时,由于反电动势为零,因此电枢电流(即起动电流)为
                                                 (2.7)
其值可为正常工作电枢电流的几倍到十几倍,所以起动电磁转矩很大,电机可以很快起动,并能带负载直接起动。随着转子的加速,反电动势增加,电磁转矩降低,加速转矩也减小,最后进入正常工作状态。在空载起动时,电枢电流和转速的变化如图2.10所示。





图2.10 空载起动时电枢电流和转速的变化
需要指出的是,无刷直流电机的起动转矩,除了与起动电流有关外,还与转子相对于电枢绕组的位置有关。转子位置不同时,起动转矩是不同的,这是因为上面所讨论的关系式都是平均值间的关系。而实际上,由于电枢绕组产生的磁场是跳跃的,当转子所处位置不同时,转子磁场与电枢磁场之间的夹角在变化,因此所产生的电磁转矩也是变化的。这个变化量要比有刷直流电机因电刷接触压降和电刷所短路元件数的变化而造成的起动转矩的变化大得多。
工作特性
在无刷直流电机中,工作特性主要包括如下几方面的关系:电枢电流和电机效率与输出转矩之间的关系。
1)电枢电流和输出转矩的关系  由式(2.5)可知,电枢电流随着输出转矩的增加而增加,如图2.11所示。
2)电机效率和输出转矩之间的关系  这里只考察电机部分的效率与输出转矩的关系。电机效率
                                                  (2.8)
式中,为电机的总损耗;为电机的输入功率,为输出功率,
,即没有输出转矩时,电机的效率为零。随着输出转矩的增加,电机的效率增加。当电机的可变损耗等于不变损耗时,电机效率达到最大值。随后,效率又开始下降,如图2.10所示。




图2.11 负载和效率特性曲线
机械特性和调速特性
机械特性是指外加电源电压恒定时,电机转速和电磁转矩之间的关系。由式(2.1)~式(2.3)可知
                                                 (2.9)
                                      (2.10)
当不计的变化和电枢反应的影响时,式(2.9)等号右边的第一项是常数,所以电磁转矩随转速的减小而线性增加,如图2.12所示。
当转速为零时,即为起动电磁转矩。当式(2.10)等号右边两项相等时,电磁转矩为零,此时的转速即为理想空载转速。实际上,由于电机损耗中可变部分及电枢反应的影响,输出转矩会偏离直线变化。
由式(2.10)可知,在同一转速下改变电源电压,可以容易地改变输出转矩或在同一负载下改变转速。所以,无刷直流电机的调速性能很好,可以通过改变电源电压实习平滑调速,但此时电子换相线路及其他控制线路的电源电压仍应保持不变。总之,无刷直流电机的运行特性与有刷直流电机极为相似,有着良好的伺服控制性能[47]。
图2.12 机械特性曲线
无刷直流电动机的数学模型
永磁无刷直流电动机,定子三相交流绕组,转子磁钢布置采用径向结构,钕铁硼永磁体安装在转子表面,这种稀土永磁材料其相对导磁率近于空气,在这种表面安装磁极的转子结构中,永磁体可以看作气隙的一部分,无凸极效应的影响。在电机模型的建立时,认为电机的气隙是均匀的[48]。
假设:
1)磁路不饱和。
2)忽略高次空间磁势谐波的影响。
3)忽略磁滞、涡流的影响。
记两种导通模式总的持续时间即 1/6周期为1个导通区间,取转子磁场在1个导通区间内的中心位置为的位置。
切换角定义为:通电线圈的几何中心线与坐标轴之间的夹角。
永磁体的磁通链在BLDCM的运行中可以当作常数,定子磁链方程为:
                   (2.11)
定子电压方程式为:
                                             (2.12)
据假定有:
式中,为定子三相磁通链,为定子电流,为定子绕组自感,为定子绕组互感,为转子永磁体磁通链,为转子位置角,即转子轴和A相轴线的夹角。注意到任何时候都有:
把电流对时间的导数转换为电流对角度的导数,即可得电压方程式:
                  (2.13)
记:
                                     (2.14)
电磁转矩为:
                                         (2.15)
为直流电源电压,为电源输出电流,则电机输入功率为;电磁功率
利用电机中电参量的单相半波对称性和三相的对称性,可以把无刷直流电动机的稳态运行求解过程归结到一个导通区间内求解,现只考虑区间内的情况。假定在时,电机C,B两相导通,换相为A,B两相导通。
在BLDCM的逆变器线路中,每个开关元件实际上都并有续流二极管(如图2.4所示),在换相时,线圈中的磁场能量通过二极管释放。由于续流二极管的接入,使得换相并不是在瞬间完成,导致了换流重叠角的存在,这也就是换流重叠角产生的原因。在从C、B两相通电转换为A、B两相通电的瞬间,C相内尚有一点的电流,它必然要经过线圈C、线圈B、T6、VD2释放,直到流过二极管的电流为零,此时
在第一种导通模式,由于二极管的续流作用,此时A、B、C三相绕组都有电流通过(如图2.13所示),此时电机端部约束条件是:
图2.13 换流模式
又因为,所以有:
求得数学模型一为
               (2.16)
在第二种导通模式(如图2.14所示),只是A、B两相通电时,电机端部约束条件:
图2.14 单流模式
求得数学模型二为
              (2.17)





1



西京学院本科毕业论文(设计)


电动自行车控制器方案设计
电动自行车控制系统的核心是电动自行车控制器,它不仅要完成外部信号的处理,无刷直流电动机驱动信号的给定,更重要的是完成整个控制系统的控制策略。
一个完备的电动自行车控制系统,应主要报告电源系统、转把、刹把、安全系统、照明系统、信号系统、动力系统等。电源系统主要满足整个系统对能量的需求,转把、刹把是用户与控制器交流的桥梁,安全系统实现了电动自行车的防盗功能,照明系统在可见度较低时给整个电动自行车照明,信号系统一方面实现了用户与控制器的交流,另一方面也给电动自行车的安全提供了保障,动力系统为电动自行车的能量转换部分,它将电能转换为机械能,为电动自行车提供了动力。控制系统的原理框图如图3.1所示。
图3.1 控制系统原理框图

各功能系统工作原理介绍调速转把和制动刹把工作原理
1) 调速转把工作原理
调速转把是控制电动自行车车速的基本器件,是控制器的调速指令信号输入部件。控制器收到来自调速转把得输入信号后,根据输入信号的参数控制电机的输出功率,从而实现电动自行车的调速功能。调速转把实物图如下图图3.2所示。
霍尔调速转把输出电压的大小取决于霍尔元件周围的磁场强度和极性。霍尔元件固定安装在右把手座中,在可转动的转柄中固定安装永磁钢,转动转把时,手柄上的磁铁会跟着转动,这样霍尔元件周围的磁场强度和极性就发生了改变,霍尔元件输出的电压随着磁场的改变而发生改变。目前市场上大部分转把输出的电压信号为1.0-4.2V之间。
图3.2 调速转把实物图
2)制动刹把工作原理
制动刹把在实施车辆制动时,首先给控制器一个制动信号,停止向电机提供驱动力。制动信号由机械触点开关或霍尔开关电路产生。当操作刹车制动手柄时,手柄动作后制动信号送到控制器中,控制器检测到刹车信号后,无论调速转把处于什么状态都会自动断开电机电源,使电机停止动力输出。
电子式转动刹把安装在把座上的位置传感器是一个霍尔元件,刹车手柄正对霍尔元件处有一块小磁钢。正常骑行时,磁钢靠近元件,霍尔元件无输出。当捏刹把手柄时,手柄移位,小磁钢远离霍尔元件,霍尔元件将磁钢位置变化的转换信号传给控制器,切断电机电源供给,达到电机制动目的。
信号系统工作原理
电动自行车的信号系统是电动自行车状态的指示部件,是反应车辆运动状态、保证车辆安全行驶的主要装置。它使骑行者能正确、有效地对车辆行驶适时地进行控制,提高了电动自行车的安全使用性能,起到提醒、提示骑行者、行人及其他车辆的作用,保证了骑行者及他人的安全。信号系统主要包括喇叭、闪光器、转向灯、制动灯和仪表及控制开关等。
  • 喇叭工作原理
喇叭的作用是发出声音,以引起行人和其他行驶车辆的注意,确保行车安全。它是将电能转化为声能的装置。其工作原理是:打开电源开关,按下喇叭按钮时,电流经蓄电池正极流向电源开关,先经过喇叭,再经过喇叭按钮到达蓄电池负极,构成闭合回路,使喇叭发出声响;松开喇叭按钮后,按钮接触点在回位弹簧的作用下弹回,电路中断,喇叭停止工作。喇叭电路原理图如图3.3所示。
图3.3 喇叭控制电路
  • 闪光器工作原理
闪光器也叫闪烁器,串联在转向灯电路中,当有负载电流通过时,闪光器内部的RC振荡电路开始控制,使蓄电池供电回路中的电流时大时小,而使转向灯发出醒目的明暗相间的闪光信号,引起周围的车辆和行人的注意。
图3.4为电子式闪光器的电路图。闪光器标有字母L的接线端子与转向灯相连、标有字母B的接线端子与电源端相连。在线路连接好的情况下,当转向开关接通左转向灯或右转向灯时,电流经电阻R1向电容C反方向充电,使a、b两端电压逐渐上升。当a端具有一定的正向电压时,三极管VT1导通,VT2也因得到一定的负压而开始工作。其电流流向为蓄电池正极→电源开关→闪光器B端→VT2发射极→VT1集电极→闪光器L端→转向开关→转向灯→蓄电池负极。由于电流较大,所以转向灯发出较亮的光。此时VT2导通,电容C开始放电,使a端电压下降,当降低到一定电位时,VT1截止,VT2不导通,这时转向灯熄灭,又回到起始状态。如此反复,转向灯的电流时大时小,就使转向灯发出一明一暗的闪光。
图3.4 电子式闪光器电路图
  • 转向灯工作原理
转向灯电路由闪光器、转向开关、转向灯和仪表的转向指示灯等组成,其工作原理如图3.5所示。
图3.5转向信号系统工作原理图
打开电源开关,当转向开关处于下面位置,闪光器触点闭合时,电流由蓄电池正极到电源开关,闪光器,再到转向开关,分流到前左转向灯、后左转向灯和仪表左转指示灯后,再经负极连线流回蓄电池构成闭合回路,使左侧转向灯闪亮。
当转向开关处于中间位置时,整个转向灯电路因开关断路而停止工作。
当转向灯开关处于上面位置时,工作原理与转向开关处于下面位置时相同,使右侧转向灯闪亮。
照明系统工作原理
照明系统为电动自行车夜间行驶提供路面和仪表照明灯光,保证夜间骑行安全。照明系统主要由前照灯、尾灯和仪表照明灯及控制开关等组成。
明系统由蓄电池供电、通过电源开关、照明开关接通前照灯、后尾灯和仪表灯,有些电动自行车还带有示廓灯等。其电路原理图如图3.6所示。
图3.6 照明电路原理图
照明系统的工作原理是:打开电源开关和照明开关,前照灯、仪表灯和后尾灯接通电源被点亮;关闭电源开关或照明开关,前照灯、仪表灯和后尾灯熄灭[49~52]。

电动自行车控制器的功能要求
1)调速功能。控制器根据输入的调速信号,对电机的转速进行平稳、可靠的调节,使电动自行车实现无极调速。
2)零启动。启动时不用脚踩。
3)堵转保护。当电机出现堵转超过一定时间之后,控制器会自动停止工作。
4)制动断电功能。在输入控制器的刹车信号电位变化时,开关电源能迅速反应,切断输入电流,改变电机的通电工作状态,实现整车的顺利制动。
5)过电压和欠电压保护功能。当外界输入电压高于或低于控制器的工作电压时,控制器会发出报警,停上进行工作,保护控制器。
6)过电流保护功能。当工作电流达到系统设定的最大值时,控制器将限制系统电流的继续增大令其维持不变,以保护蓄电池、电机和控制器本身不受到损伤。
7)防飞车保护功能。当调速转把信号与电源线路出现短路或调速转把负极线断路时,就会误给控制器输入调速信号,使控制器给电机加电造成飞车,控制器防飞车功能可以避免飞车事故的发生。
8)欠压回升保护功能。当系统进入欠压保护、停止工作后,蓄电池的端电压会迅速回升到高于欠压点。此时控制器并不立即退出欠压保护状态开始工作,而是电源电压必须高于欠压点一定幅度后,控制器才能恢复正,退出保护状态。
9)巡航定速功能。转动转把进行调速时,当转把固定在某个位置超过一定的时间,电动自行车便会以这个速度进行匀速行驶,直到再次转动转把,消除此次巡航。
10)脚踏助力功能。通过测量人脚踏信号和电系统信号的变化,来提供相应电助力的一种脚踏助力方案。这样为用户提供了一种省电骑行模式。
11)柔性EABS刹车功能。柔性EABS刹车是相对于机械刹车来说的,它是通过给控制器电信号实现刹车功能。
12)反充电与反充电指示功能。这是一种能量回收功能,在刹车制动时将原由通过制定器消耗的功能,以电机发电的形式经过控制器构成回路给蓄电池充电,以电能的形式最大限度地回收,并对工作状态进行显示。
13)限速功能。根据国家对电动自行车最高车速不大于20km/h的要求,限速功能是通过限速电位器的调节,使电动自行车不超过此速度。
电动自行车控制器总统方案设计
电动自行车控制器是电动自行车四大部件之一的驱动控制部件,它是电动自行车的大脑,是神经中枢,遇到各种情况会“作出反应”,是电动自行车能量管理与各种控制信号处理的核心部件。它控制着电机的转速、具有欠压、限流或过流保护和制动断电等基本功能,对整车的电气系统进行有效的保护,是电动自行车电气系统的核心。智能型控制器还具有多种骑行模式和电气控制部分自检、故障代码显示等功能。
一个完备的电动自行车控制器系统,其硬件主要包括:电源电路,MOSFET驱动电路,电流检测及保护电路,调速转把输入信号电路,转子位置判断信号采集电路,低、高电平刹车电路以及单片机和外围电路等。
电动自行车控制器的工作原理是利用电子设备替代了传统电刷控制电机线圈的电流方向,同时根据电机内传感器发出的信号,确定换向的时间和顺序,来改变点电机的转速和方向。图3.7为电动自行车控制器的原理框图。
图3.7电动自行车控制器原理框图
电动自行车控制器的控制电路主要有:1内部稳压电路;2位置信号检测电路电路;3刹车电路;4 A、B、C三相预驱动电路;5三相桥式功率场效应晶体开关电路;6欠压保护电路;7限流保护电路等。
内部稳压电源电路提供控制器内部电子元器件的工作电压。
位置信号检测放大电路首先对无刷直流电机霍尔位置传感器产生的位置信号进行放大、整形、形成具有一定时序的三相逻辑信号。当改变三相信号时序时,就可以改变电机转向。放大、整形后的位置信号分别送到三相上臂驱动信号生成电路和三相下臂驱动信号生成电路中,产生三相桥式上臂驱动信号和三相桥式下臂驱动信号。
微处理器根据位置信号检测放大电路提供的无刷直流电机霍尔信号,对上3路和下3路的MOS管驱动电路给出有选择的打开与关闭信号,以完成对电机的换相。同时,根据调速转把输入电压的大小,将相应脉冲宽度的载波信号与下3路MOS管导通信号混合,以达到控制电机速度的目的。
MOS管驱动电路将PWM信号整形放大、电平移动,达到上、下臂MOS管输出所需的驱动电平,并提供给MOS管,同时也减少MOS管输出电路对控制电路的影响。另外,对于上3路的3个MOS管来说,它们的驱动要求高于蓄电池供电电压,因此,MOS管驱动电路还要具有升压功能,将上3路的MOS管导通信号变成高于蓄电池电压的超高方波信号。三相MOS管输出电路由6只MOS管接成三相桥式全控电子开关,构成逆变输出电路,完成电子换相。
刹车断电电路是通过将制动刹把产生的刹车信号送到控制器中,加到停止引脚上,通过逻辑电路处理,关断上、下臂逻辑信号输出,实现刹车断电功能。
欠压保护电路在蓄电池电压降低到控制设定值后,停止PWM信号输出,以保护蓄电池不在低电压的情况下放电损伤。
限流保护电路是对控制器输出的最大电流进行限制,以保护蓄电池、控制器、电机等不会出现超出允许范围的大电流。
控制器介绍及选择
2009年3月4日,意法半导体发布了针对工业应用和消费电子开发的微控制器STM8S系列产品。
STM8S平台打造8位微控制器的全新世代,高达20 MIPS的CPU性能和2.95-5.5V 的电压范围,有助于现有的8位系统向电压更低的电源过渡。新产品嵌入的130nm非易失性存储器是当前8位微控制器中最先进的存储技术之一,并提供真正的EEPROM数据写入操作,可达30万次擦写极限。在家用电器、加热通风空调系统、工业自动化、电动工具、个人护理设备和电源控制管理系统等各种产品设备中,新产品配备的丰富外设可支持精确控制和监视功能。功能包括10位模数转换器,最多有16条通道,转换用时小于3微秒;先进的16位控制定时器可用于马达控制、捕获/比较和PWM功能。其它外设包括一个CAN2.0B接口、两个U(S)ART接口、一个I2C端口、一个SPI端口。
STM8S平台的外设定义与STM32系列32位微控制器相同。外设共用性有助于提高不同产品间的兼容性,让设计灵活有弹性。应用代码可移植到STM32平台上,获得更高的性能。除设计灵活外,STM8S的组件和封装在引脚上完全兼容,让开发人员得到更大的自由空间,以便优化引脚数量和外设性能。引脚兼容还有益于平台化设计决策,产品平台化可节省上市时间,简化产品升级过程。
①STM8S主要特点
1)速度达20 MIPS的高性能内核
2)抗干扰能力强,品质安全可靠
3)领先的130纳米制造工艺,优异的性价比
4)程序空间从4K到128K, 芯片选择从20脚到80脚,宽范围产品系列
  • 系统成本低,内嵌EEPROM和高精度RC振荡器
6)开发容易,拥有本地化工具支持
②STM8S主要应用
1)汽车电子:传感器、致动器、安全系统微控制器、DC马达、车身控制、汽车收音机、LIN节点、加热/通风空调
   2)工业应用:家电、家庭自动化、马达控制、空调、感应、计量仪表、不间断电源、安全
3)消费电子:电源、小家电、音响、玩具、销售点终端机、前面板、电视、监视设备
4)医疗设备:个人护理产品、健身器材、便携护理设备、医院护理设备、血压测量、血糖测量、监控、紧急求助
STM8S903K3作为一款功能齐全、接口丰富,性价比高的处理器,为许多嵌入式控制应用提供了灵活而低成本的方案。而且STM8903K3自动6路互补PWM输出端口,在电机控制中不需要外接PWM波形发射器,减小了外围电路的元器件个数,增加了系统的可靠性,降低了控制器的成本,非常适合电动自行车控制器的开发。
逆变电路功率器件介绍及选择
首先系统中逆变电路的开关频率很高,功率开关元件不宜采用晶闸管,而双极型大功率晶体管虽然在大电流导通时其导通电阻很小,但却要求较大的驱动功率,其开关速度也要比MOSFET、IGBT低。MOSFET是一种多数载流子器件,无少数载流子的存储效应,因此开关速度快,而且MOSFET是一种理想的电压控制器件,驱动电路较为简单。MOSFET没有二次击穿现象,工作安全区大,因此MOSFET特别适于高频变流装置,只是在高压大电流的情况下导通电阻较大,器件发热稍大。所以,MOSFET适合在本文涉及的低功率高频率能量变换装置中使用。
因为MOSFET特别适于高频变流装置,而且对IGBT和IPM而言价格相对较低,所以本系统的逆变电路功率器件选择MOSFET。
但是MOSFET作为功率器件使用时,它的栅极驱动必须满足:
1)栅极电压高于漏极电压10-15V,作为高压侧开关,栅极电压高于母线电压,且为系统最高电压;
2)栅极电压具有浮动能力,随源极电位的变化而变化;
3)驱动电路造成的功率损耗在总的功率中所占比重不大。
所以在硬件设计的时候必须考虑到MOSFET电机转动引入的MOSFET源极电位浮动的问题,保证MOSFET的准确动作。
无刷直流电机选择
本系统使用的无刷直流电机为深圳深圳市鼎拓达机电有限公司生产的型号为42BL65-240的无刷直流电机,产品参数如下:
表3.1 42BL65-240电机参数
电机型号
额定功率(W)
额定电压(VDC)
额定转速(rpm)
额定扭矩(kg.cm)
轴径(mm)
机身长A(mm)
极数
42BL65-240
30
24
4000
0.8
5
65
4


控制器策略选择
系统控制策略的选择影响着整个系统的运行,选择一个好的控制策略对系统的稳定性、可靠性等特性至关重要。下面就从无刷直流电机无感起动策略、调压策略、换相策略及调速算法来介绍本系统的策略选择。   
无感起动策略
针对实现无刷直流电机无位置传感器零初始速度起动的问题,人们提出了各
种方案,主要有:三段式起动法、升频升压同步起动法和检测脉冲转子定位起动
法等。因“三段式”起动法比较简单,所以控制器的无感起动策略就选择“三段式”起动法。下面就对“三段式”起动法进行简单介绍与分析。
   “三段式”起动法按照“他控变频”式同步电动机从静止开始加速旋转,直至转速足够大,再切换至无刷电动机“自控变频”式运行状态,以实现电机起动。
这个过程包括转子预定位、加速和运行状态切换三个阶段。在起动初始阶段,使电机有一个确定的通电状态,转子旋转到一个确定的初始位置,然后改变电机的通电状态,在电磁力矩的作用下转子向下一个确定位置转动,在转动加速的过程中把电机切换到无位置传感器的运行状态,进而利用反电势法检测转子位置,实现“自控变频”运行。
该方法简单可靠,对于任意转子初始位置角,都能可靠实现预定位,保证电机从“零速度”起动并快速切换到无位置传感器闭环方式运行。但是此法的成功实现,受电机负载转矩、外施电压、加速曲线及转动惯量等诸多因素影响。在轻载、小惯量条件下,三段式起动过程一般能成功实现;当电机处于重载状态时,外同步信号与产生的反电势信号相位差过大,可能导致电机失步,起动失败。
通过优化加速曲线能保证电机顺利起动,但是对不同电机、不同负载,所对应的
优化加速曲线不一样,这样导致该方案通用性不强,控制过程比较繁琐,涉及数据多等缺点。尤其是在调试中 PWM 的占空比的选择,以及对加速过程中占空比的变化速度的控制比较复杂,很难达到理想效果 [53]。
转子位置检测策略
本系统所使用无刷直流电机自带位置传感器,所以可以通过位置传感器直接获得转子位置信号。但是考虑到位置传感器的使用寿命问题,本系统还采用了一种无传感的方式检测策略。
本系统所采用的无刷直流电机的无传感转子位置检测方法为反电动势端电压检测法。其实质是通过检测定子开路相的感应电动势过零点来间接得到转子位置信号。然而,由于定子绕组的感应电动势难以直接测量,所以实际上一般使用的是该方法的变通形式“端电压法”。对于本系统采用的二相导通六状态控制方式,通过检测端电压就能检测到反电动势过零点。因为逆变器每一时刻都只有两相导通,另一相处于断开状态,此时该断开相绕组的相电压就是反电动势。在本系统的反电动势过零点检测电路中,重构了一个电机星点,其电压和电机星点电压近似。通过比较器不停地比较星点电压和绕组端电压,就可以得到一个电平的跳变信号,此跳变信号便是绕组反电动势的过零信号。当检测到绕组反电动势的过零信号后,再延迟30个电角度,便可触发电机换相。
无刷直流电机的换相控制策略
由图2.9可知,无刷直流电机反电势为正负半波皆有120个电角度平台的梯形波,三相间相差为120个电角度;3个位置传感器(电角度间距120个电角度传感器)相差为120个电角度,其上升或下降沿位置即对应定子电枢绕组导通时刻。如此,通过对传感器信号检测,经由功率MOSFET功率开关器件构成的电子换相实现换相,使电枢绕组依次通电,从而在定子上产生跳跃式的旋转磁场,驱动永磁转子旋转。随着转子的旋转,位置传感器不断输出信号,电枢绕组的通电状态随之改变,使得在某一磁极下导体的电流方向始终保持不变,这就是无刷直流电机的无接触换相过程。
如使用二二导通方式是每次使2个开关管同时导通。依据图2.4所示开关管命名,其导通顺序有:T1、T4→T1、T6→T3、T6→T3、T2→T5、T2→T5、T4,共有6种导通状态,每隔60个电角度改变一次导通状态,每360个电角度需要换相6次,每次改变仅切换一个开关管,每个开关管连续导通120个电角度。所以,本系统采用6步换相的方式(即两相六状态方式)控制电机旋转。
无刷直流电机的调压策略
对于无刷电机,其电动势的平衡方程为:
                                          (3.1)
式中,为逆变电压(V);E为电枢绕组的反电势(V);为绕组电阻(Ω);流过绕组电流(A);开关管饱和管压降。
电枢绕组反电势和转速的关系为:
                                                    (3.2)
式中,为电机转速(rpm);为反电动势系数(V/rpm)。
由式(3.1)、(3.2)可知:

                                      (3.3)

可见,无刷直流电机与直流电机类似的调速特性,其调速方法有:a调压调速;b弱磁调速两种。
由于调压调速和普通直流电机调速方法相似,而且相对比较容易实现,所以本系统选择调压调速的策略控制电机转速。
无刷直流电机调压调速方案有:
1)采用晶闸管移相或DC-DC变换电路调节实现调速;
2)采用PWM技术通过占空比调节三相全控桥输出电压实现,PWM方式具有电路简单、元件数量少等优点,但转矩脉动较大,见图3.8。
在无刷直流电机PWM调速中,为形成幅值恒定的旋转磁场,要求电枢绕组电流恒定,其调制波为一直流电平,出于降低开关损耗的目的,可采取一个开关管工作于PWM状态进行调压,而另一个处于常通状态,如图3.9所示。
图3.8  DC-DC和PWM模式对比
图3.9 BLDCM几种PWM调压方法
图中,a)和b)为上桥臂或下桥臂3个开关管进行PWM调制,另一个配对导通的开关管处于导通状态。以0~60°区间T1、T4导通为例,在HPWM-LON中,T1进行PWM调制(即调压),T4为常通,而HON-LPWM中T1、T4的工作模式刚好与此相反,T1常通,T4执行PWM调压。此模式下逆变器输出电压MA波形见图3.10 a)。
PWM-ON-PWM模式中,0~360°区间,任意时刻仅一个开关管执行PWM调压;以0~120°区间为例,T1先进入30°的PWM模式,此时T4导通;其后60°T1则处于导通状态,期间T4、T6先后进入PWM模式;最后30°T1再次进入PWM模式,T6处于导通状态。PWM-ON-PWM模式6个开关管的工作模式一致,功耗相同,系统可靠性提高,同时转矩波动较小。此模式下逆变器输出电压MA波形见图3.10 b)。
图3.10 逆变器输出电压
本系统中采用PWM方式控制电机转速,其PWM控制方法采用HPWM-LON的方式。
无刷直流电机的速度计算策略
为了实现无刷直流电机的转速闭环控制,必须对无刷直流电机的转速进行实时测量,本系统采样通过计数20ms内换相步数的方法,来实现转速的计算。
因为电机每转过360个电角度控制器需要产生6步换相信号,又因为系统使用电机极对数为4极,所以每360个机械角度为1440个电角度,即需要24步换相。假设20ms内电机换相CNT步,那么,电机转速为: ,单位为RPM。
无刷直流电机的速度算法
    由电机的运动方程可知,加速度与电机的转矩成正比,而转矩又与电机的电流成正比,因而如果要实现高精度和高动态性能控制就需要同时对电机的速度和电流进行控制。根据反馈原理,要维持哪一物理量基本不变,就应该引入那个物理量的负反馈。为了减小或消除静态转速降落,就要引入转速负反馈,组成转速负反馈闭环系统。为了兼顾调速系统的静态性能和动态性能,本系统采用速度单闭环控制,如图3.11所示。

图3.11 无刷直流电机单闭环调速结构图
    将偏差的比例(P)、积分(I)和微分(D)通过线形组合构成新的控制量,用这一控制量对被控对象进行控制,这样的控制器称为PID控制器。数字PID是将原来由硬件实现的PID算法,现在将其移植到计算机控制系统中形成的用软件来实现的PID算法。PID控制器是控制系统中技术比较成熟,而且应用最广泛的一种控制器。它的结构比较简单,参数容易调整,不一定需要系统的确切数学模型,因此在工业的各个领域中都有应用。所以本系统中转速的闭环控制采用PID控制算法。

1



重庆科技学院本科生毕业设计

电动自行车控制器硬件设计
    以往的无刷直流电机多由单片机附加许多接口设备构成控制系统,导致系统复杂,并且运算速度也受到限制,不容易实现速度环的全数字化控制,也不方便扩展。而应用STM8实现的无刷直流电机控制系统可以只用一片STM8S903K3就可以代替普通单片机和各种接口。再加上STM8芯片具有快速运算能力,可以实现更复杂、更智能化的算法,实现速度环的全数字化控制。
本系统硬件组成如图4.1所示,控制核心是ST公司的STM8S903K3单片机,主要外围电路包括位置传感器信号处理电路、驱动控制信号预处理电路、功率驱动电路、电机电流检测电路、电源电压检测电路以及刹车、起动电路等。
图4.1 硬件系统框图
当系统处在运行状态时,通过转把和刹把向控制器发送运行指令(如起动、停车、转速等),并且载入运行参数。根据外部检测到的电机的位置信号以及电机所处的运行状态来改变控制器输出的控制信号从而调整电机的运行状态。电平转换电路主要是为逆变电路提供动作信息,逆变电路为电机提供正常运行所需的合适的电源。电源电压检测环节主要是实现电机运行时的保护(如过压、欠压、以及防止电源过度放电等)。电流检测环节主要是实现过流保护,从外部检测到的电流信号经过采样后,送到单片机控制单元,控制单元根据检测电流的大小来决定是否采取保护措施。
单片机最小系统
图4.2为本系统中STM8S903K3单片机的最小系统图。该单片机使用片内自带的16M晶振提供时钟基准。PD2、PD3、PD4分别为A、B、C相霍尔信号采集端口,PB7、PB6、PB5分别为A、B、C相过零点信号输入端口,PC2、PC1、PE5分别为A、B、C相下桥臂驱动信号输出端口,PC3、PC7、PC6分别为A、B、C相上桥臂驱动信号输出端口,PD7为LED指示灯控制端口,PD6为比较器保护端口,PA3、PF4为通讯端口,PD1为单线调试端口,PB0为相电流检测端口,PB1为平均相电流检测端口,PB2为电源电源检测端口,PB3为转把信号输入端口,PC5为刹车信号输入端口。由于本系统所使用控制芯片为内部自带16M晶振的STM8S903K3,所以系统可使用芯片自带晶振提供时钟基准,NRST引脚为复位信号的输入端口。
图4.2单片机最小系统图

稳压电源电路
    电源电路主要给板子其他工作电压元器件提供工作电压。该部分主要稳出+15V、+5V电压。其中+15V主要供比较器和放大器使用,并提供MOSFET的开启电压;+5V主要供STM8S903K3及霍尔传感器工作。其原理图如图4.3所示。
图4.3 稳压电源电路图
    如上图所示,VK+经一个防反击二极管D5加在稳压芯片LM317的输入端,LM317的输出端输出一个+15V的稳定电压;同时该+15V的电压加在78L05的输入端,78L05的输出端为+5V的稳定电压。其中,D2的作用是防止+5Vout的电压反击,R2、R3的作用为提供一个反馈电压,电容的作用为减小电源到地的阻抗,抑制电源噪声的干扰。

电源电压监测电路
    该电路主要是将电源电压分压后送到单片机,供单片机AD采集并处理,达到监测电源电压,对电机进行过压保护,防止电源过度放电的目的。其原理图如图4.4所示。
图4.4 电源电压监测电路图

高、低电平刹车电路
    目前市场上的电动自行车有低电平刹车和高电平刹车两种类型,本课题设计的电路兼具低电平和高电平两种刹车电路。
如图4.5所示,当为低电平刹车时,低电平信号通过隔离二极管将R16端电平拉低后直接送入到单片机刹车I/O口,实现刹车;当为高电平刹车时,电阻R17、R18和Q1构成一个电平取反电路,把高电平转换为低电平。当软件检测到I/O口为低电平时,便认为是刹车信号。
图4.5高、低电平刹车电路图

霍尔信号检测电路
霍尔式位置传感器输出为三路脉宽180°的霍尔信号H_a、H_b、H_c,三路信号互差120°相位差,所以在360°电角度内,H_a、H_b、H_c信号变化规律为100—110—010—011—001—101,这六种状态分别持续60个电角度。霍尔式位置传感器信号处理电路如图4.6所示。
图4.6 霍尔信号检测电路图
霍尔式位置传感器安装在电机内部,有5 根信号线(电源线、地线、3根霍尔信号线)。由于采用开路输出,所以外部必须加上拉电阻,并对H_a、H_b、H_c进行阻容滤波以抗干扰。
霍尔信号H_a、H_b、H_c送到PD2、PD3、PD4 口,采用外部触发的方式读取H_a、H_b、H_c 状态。单片机根据H_a、H_b、H_c 的状态控制三相星形全桥驱动电路中上下桥功率管的导通和关断。

反电动势过零点检测电路
    反电动势过零点检测电路主要用于提供电机绕组的反电动势的过零信号。当电机工作在无传感模式下,要想正确换相,就必须知道当前转子的位置。该电路可以准确地给单片机提供电机的反电动势“过零点”。该设计方法在外部电路中重构了一个电机星点,其电位和电机星点电位相近,然后通过3个比较器,将A、B、C三相的相电压与星点电压比较,找到三相反电动势的过零点。使用过零信号触发外部中断,控制换相。当过零点到来时,比较器输出电平翻转,触发单片机的外部中断。其电路原理图如图4.7所示。
图4.7 反电动势过零点检测电路原理图
如上图所示,比较器的6、8、10引脚电压约为电机星点电压,当绕组端电压大于星点电压时,比较器输出高电平;当绕组端电压低于星点电压时,比较器输出一个低电平。这样,我们就可以得到一个和霍尔信号相近的方波信号。再通过一定的逻辑,我们可以判断出当前转子的位置,从而控制换相。

电机电流检测电路
在电动机转速控制系统中,为了对主电路电流进行监控,需要对主电路电流信号进行采样反馈,电流检测电路就是用来对电动机三相绕组中的电流进行实时检测以便对电机达到更好地控制。电机电流检测电路如图4.8所示,CSEN端信号为采样电阻上的压降,通过对这个信号进行处理,就可以知道当前的母线电流。
图4.8 电机电路检测电路图
   如上图所示,电流检测是通过单片机采样采样电阻上的压降实现的。采样电阻上的压降先经过一个低通滤波器,再由放大器输入单片机的AD采样接口,其电压放大倍数由R33和R32决定。

功率驱动电路
MOSFET驱动电路是控制器与电机直接相连的部分,具有功率放大、自举升压等功能。其根据控制器发出的逻辑信号控制上下桥MOS管的导通与截止实现无刷直流电机的开与关并通过改变PWM占空比大小来调节MOS管的开关频率进而实现电机的调速。本系统中使用的功率驱动电路原理图如图4.9所示。
图4.9 功率驱动电路
如上图所示,以A 相上下桥的功率管驱动电路为例。功率管采用N 沟道增强型MOSFET。
由于功率管MOSFET用作高压侧开关时,栅极电压要比源极电压高10~15V,才能保证功率管完全导通。这样在上桥功率管MOSFET导通时,源极电压为电源电压VB+,栅极电压就必须要大于电源电压VB+10~15V。为了获得比电源电压还高的栅极电压,采用一种被称为“高压浮栅型驱动电路”来驱动上桥。电容C1A在功率管导通之前已充电至+12V(相对于源极),导通时,便能保证功率管MOSFET的栅极电压比源极电压(电源电压VB+)高出12V。At为高电平时,Q1A导通,Q0A导通,Q2A截止,功率管MOSFET由截止变为导通;At为低电平时,Q1A截止,Q0A截止,Q2A导通,功率管MOSFET由导通变为截止。
下桥功率管的MOSFET的源极通过康铜丝R0(5毫欧)连接到地,无论MOSFET是否导通,源极电压基本接近为零,所以栅极电压维持在12V左右就可以保证MOSFET完全导通了。!Ab为高电平时,Q4A截止,Q3A截止,Q5A导通,功率管MOSFET由导通变为截止,!Ab为低电平时,Q4A导通,Q4A导通,Q5A截止,功率管MOSFET由截止变为导通。

转把电压输入电路
手把电压输入电路是将手把输出的模拟信号送到单片机的AD转换口转换为数字信号的电路,控制程序根据此数字信号从而来调节电机的转速。其原理图如图4.10所示。
图4.10 转把电压输入电路原理图
如上图所示,3为转把电源线,与+5V相连,2与转把信号输入线相连,其输入的是0~5V的模拟电压,1为转把接地线,当转把松开或者卸掉时,保证输入AD口的电压为0V。C8为滤波电容,滤除转把信号中的高频杂波。

硬件的可靠性设计
控制系统中,各种干扰是客观存在的主要有来自系统内部和外部的各种电气干扰。如果缺乏对这些干扰的认识和重视,就会导致控制系统误差加大严重时会使系统失灵,甚至造成巨大的损失。电机调速系统存在比较大的干扰:一方面,电动机本身会产生电磁千扰;另一方面,逆变器中的电力电子器件是以开关方式工作的,工作中会产生大量高频谐波。这些干扰信号通过“场”或“路”的方式传递到控制电路中,如果不采取有效措施加以避免,就可能使电路或程序工作紊乱。
在本系统的硬件设计过程中,主要考虑采用以下方法来防止干扰:
1)电源噪声干扰的抑制。一般来说,这种干扰是无法完全克服的,只能尽量降低进入干扰脉冲的幅度。一般做法在VCC与GND之间跨接10~100uf的电解电容,同时并一个滤去高频的小电容;在低频信号的传输通路中加入RC低通滤波器,可以大大减弱各类高频干抚信号。
2)由于干扰抑制受到设备的体积、成本等多种因素的影响和限制,是不可能完全抑制的,只能尽量减小。因此,在控制系统电路的内部设计上必须采取相应的措施,保证系统运行的可靠性。通常的做法有:
a.尽可能使用单片机的内部程序存储器和内部数据存储器而不使用外部总线;由于STM8S903高性能单片机具有丰富的内部资源,这一点可以轻易得到满足;
b.在进行系统扩展时,特别在一些模块化设计多插板系统中,数据总线、控制总线形成板与板的连接时,应加总线驱动器。如果在总线上加有光电隔离电路时,必须选用高速光耦。
3)控制部分的PCB板整板敷铜,在电路各部分中配置去耦电容。PCB上的器件要合理布局,减轻各级之间的电磁辐合。将强、弱电严格分开,引线尽可能短;在有互感的线路中间置一根地线,起隔离作用,并要保证相互之间有一定的距离。电源线的走向尽量与数据传输方向一致,接地线尽量加粗。
4)对一些器件,如逻辑CPLD器件,未使用到的端口应该设置成输出状态,以防止由于外界干扰而产生错误的逻辑输出。
5)外部噪声源干扰的抑制。传感器及其信号连线应尽量远离高电平大功率的导线和元器件,以减少噪声和电磁场的干扰。为了实现物理隔离,即使在同一设备内部,也应该把这两类信号导线分开走线。远距离走线时,更应该注意把信号电缆和功率电缆分开,并保持一定的距离。
6)空间的场干扰的抑制。系统采取的措施主要有:
a.选择较高等级的电子元器件,提高器件的抗干扰能力;
b.正确的接地方法,将数字地,模拟地及功率地分开,最后只在一点相连。
1



重庆科技学院本科生毕业设计

电动自行车控制器软件设计
一个完备的控制系统,不仅需要有硬件电路作为支撑,还需要有软件部分的配合与支持才能正常工作。软件作为系统的“大脑中枢”,实时控制着微处理器执行各项任务,对系统的功能和性能有至关重要的影响。相对于硬件设计来说,软件设计具有更大的灵活性,这也给系统的设计带来了很大的便利。

STM8集成开发环境简介
本课题以C语言作为系统软件设计语言,在STVD中外挂COSMIC C编译器,进行软件开发。
ST TOOLSET
ST TOOLSET是ST提供的微控制器开发套件。ST TOOLSET包括两部分软件:ST Visual Develop (STVD)和ST Visual Programmer (STVP)。支持STM8全系列的开发。
ST Visual Develop (STVD)是ST微控制器的集成开发环境。主要是面向ST的8位微控制器产品。STVD可以创建,调试以及烧录ST微控制器。STVD提供了一个免费的汇编编译器。用户可使用汇编语言直接在此环境中(STVD)编写汇编程序。
ST Visual Programmer (STVP)是ST提供的用于生产或批量的专用烧录软件。
ST TOOLSET在下载后,运行其安装程序,如图5.1 a)所示;
在软件安装完成之后,可从开始菜单来启动,“开始>ST Visual Develop”,如图5.1 b)所示;
              ST TOOLSET 启动后,其界面如图5.1 c)所示。
COSMIC介绍
Cosmic 公司(Cosmic Software Inc.)的Cosmic C编译器(Cosmic C compiler)及全套嵌入开发工具支持STM8系列产品的开发。Cosmic产品包括C 交叉编译器、汇编、连接器、ANSI库、仿真器、硬件调试器和易于使用的集成开发环境(IDEA)。编译界面如图5.1 d)所示。
a)
b)
c)

d)
图5.1 软件安装及调试界面
系统主程序设计
系统主程序主要完成STM8单片机各寄存器以及各变量的初始化和电机各状态的转换及其他信息处理等,流程图如5.2所示。单片机寄存器初始化包括I/O口的输入输出初始化,定时器计数器的初始化,ADC寄存器的初始化等。电机具有工作和暂停两种工作模式。
系统初始化完成后,主函数会不停的判断下面应该做的事,而这个判断的依据来自于定时器以及其他程序模块。当判断到应该做的事情时,主函数马上执行该动作,执行完毕后返回,继续判断,以此循环往复。当系统判定系统出现故障(比如过压、过流、欠压)时,系统会马上停车,当故障排除后,系统检测到电机起动信号,系统会重新起动电机。
图5.2 系统主程序流程图
系统主函数程序代码如下所示:
void main(void)
{            
              PID_SP.p = 20;
              PID_SP.i = 100;
              PID_SP.d = 0;
              CK_Init();
              IO_Init();
              Tim1_Init();
              Tim5_Init();
              Tim6_Init();
              enableInterrupts();
              LED_ON;            
              ADC_Init();
              ADC1_StartConversion();            
              UART_Init();
              while(1)
              {
                            if(Mode_Changed)/******MODE_CHANGE*****/            
                                          Mode_Changed();
                            if(Trs_Flag)/****TRANSLATION*****/                           
                            {
                                          Trs_Flag = 0;
                                          UART1_ITConfig(UART1_IT_TXE,ENABLE);
                            }
                            if(Rec_Com)/***RECEIVE_complete******/
                                          Receive_Com();
                            if(Contrl_Flag)/****SPEED_CONTROL***/
                            {
                                          Contrl_Flag = 0;            
                                          Speed_Compute();
                                          if(Mot_St)            
                                                        PWM_Ctl();
                            }
                            ADC();/****AD转换及数据处理*******/            
                            Protect();/***系统保护***/
              }
}
定时器程序设计
    TIM6是一个8位的低级定时器,主要用于实现定时功能,给系统其它模块提供执行命令。每隔20ms,给速度控制函数提供一个启动命令,并切换AD的采样通道。每隔1s给通讯函数一个启动命令。其流程如图5.3所示。
图5.3 定时器程序流程图
定时器程序代码如下:
void TIM6_UPD_OVF_TRG_IRQHandler(void) interrupt 23
{
              static u8 i=0,com=0;
              i++;
  TIM6_ClearITPendingBit(TIM6_IT_UPDATE);
              if(i==10)   // 20ms
              {
                            i = 0;
                            Contrl_Flag = 1;
                            com++;
                            if(com==50)
                            {
                                          com = 0;
                                          Trs_Flag = 1;                                         
                            }
                            ADC_Switch = com % 3;
                            ADC_Init();
                            ADC1_StartConversion();
              }
}

无传感换相信号检测程序设计
该函数其实质为一个外部中断函数,当比较器输出电平翻转时,触发该外部中断,进而进行转子位置判断,匹配换相逻辑,配置TIM5,延时30个电角度时间后由TIM5调用换相函数。其流程如图5.4所示。
无传感换相信号检测程序代码如下:
void EXTI_PORTB_IRQHandler(void) interrupt 4
{            
              u8 State,Trigger;
              EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_RISE_FALL);
              State = GPIO_ReadInputData(GPIOB);
              Trigger = (u8)(State & 0xE0);//PB7|8|9            
              if(Trigger != 0)
              {
                            Counter = TIM5_GetCounter();
                            TIM5_SetCounter(0);
                            TIM5_OC1Init(TIM5_OCMODE_PWM1,
TIM5_OUTPUTSTATE_DISABLE,(u16)(Counter/2),TIM5_OCPOLARITY_HIGH);
                  switch(Trigger)
                              {
                                          case 0xa0:Motor_Step = 1;break;//next->AC
                                          case 0x80:Motor_Step = 2;break;//next->BC
                                          case 0xc0:Motor_Step = 3;break;//next->BA
                                          case 0x40:Motor_Step = 4;break;//next->CA
                                          case 0x60:Motor_Step = 5;break;//next->CB
                                          case 0x20:Motor_Step = 0;break;//next->AB            
                              }
              }
}
图5.4 无传感换相信号检测程序流程图

霍尔模式换相信号检测程序设计
该函数和无传感换相信号检测子程序一样,其实质为一个外部中断函数。但其端口输入信号为霍尔信号,当霍尔信号发生变化时,触发该中断,然后进行转子位置判断,匹配换相逻辑,最后调用换相函数。其流程如图5.5所示。
图5.5 霍尔模式换相信号检测程序流程图
霍尔模式换相信号检测程序代码如下:
void EXTI_PORTD_IRQHandler(void) interrupt 6
{            
              u8 State,Trigger;
              State = GPIO_ReadInputData(GPIOD);
              Trigger = (u8)(State & 0x1c);//PD2|3|4
              GPIO_Init(GPIOD,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4,GPIO_MODE_IN_FL_IT);
              EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD,EXTI_SENSITIVITY_RISE_FALL);//hall_mode
if(Trigger != 0)
              {
                            Counter = TIM5_GetCounter();
                            TIM5_SetCounter(0);
                            switch(Trigger)
                            {
                                          case 0x04:Motor_Step = 1;break;//next->AC
case 0x0c:Motor_Step = 2;break;//next->BC
                                          case 0x08:Motor_Step = 3;break;//next->BA
                                          case 0x18:Motor_Step = 4;break;//next->CA
                                          case 0x10:Motor_Step = 5;break;//next->CB
case 0x14:Motor_Step = 0;break;//next->AB
                                          case 0x00:
                                          case 0x1c:if(Auto_Flag)
                                                        {
                                                                      Hall_Flag = 0;Sen_Flag = 1;Hall_Fault = 1;Mode_Changed = 1;
                                                        }break; }
              if(Mot_St)
                            Commutation(Motor_Step,Duty_Cycle);            
              }
}

换相函数设计
该函数在转子转到固定位置(换相准确位置)时被系统调用,其主要作用是配置TIM1的寄存器,让TIM1产生预期的PWM波形输出。其流程如图5.6所示。
换相程序代码如下:
void Commutation(u8 Step,u16 PWM_Commutation)
  {            
                            Step_Count++;
                            PWM_Commutation*=100;
                            TIM1_CtrlPWMOutputs(DISABLE);
                            OUT_Disable();
                            CD_OFF;   //关闭ABC三相下桥臂
                            BD_OFF;
                            AD_OFF;
                            switch(Step)
                {
                                          //step 0: AB;
                                          case 0:
                                          TIM1_OC3Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE, PWM_Commutation, TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET);
                                          BD_ON;//开启B管下桥臂
                                          break;//step 1:AC;
                                          case 1:             TIM1_OC3Init(TIM1_OCMODE_PWM2,TIM1_OUTPUTSTATE_ENABLE,TIM1_OUTPUTNSTATE_DISABLE,PWM_Commutation,TIM1_OCPOLARITY_LOW,TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET);
                                          CD_ON;break;//step 2:BC;
                                          case 2:
TIM1_OC2Init(TIM1_OCMODE_PWM2,TIM1_OUTPUTSTATE_ENABLE,TIM1_OUTPUTNSTATE_DISABLE,PWM_Commutation,TIM1_OCPOLARITY_LOW,TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET);
                                          CD_ON;break;//step 3:BA;
                                          case 3:
TIM1_OC2Init(TIM1_OCMODE_PWM2,TIM1_OUTPUTSTATE_ENABLE,TIM1_OUTPUTNSTATE_DISABLE,PWM_Commutation,TIM1_OCPOLARITY_LOW,TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET);
                                          AD_ON;break;//step 4:CA;
                                          case 4:
TIM1_OC1Init(TIM1_OCMODE_PWM2,TIM1_OUTPUTSTATE_ENABLE,TIM1_OUTPUTNSTATE_DISABLE,PWM_Commutation,TIM1_OCPOLARITY_LOW,TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET);
                                          AD_ON;break;//step 5:CB;
                                          case 5:
                                         TIM1_OC1Init(TIM1_OCMODE_PWM2,TIM1_OUTPUTSTATE_ENABLE,TIM1_OUTPUTNSTATE_DISABLE,PWM_Commutation,TIM1_OCPOLARITY_LOW,TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET);
                                          BD_ON;break;
                            }
                            TIM1_CtrlPWMOutputs(ENABLE);
}
图5.6 换相程序流程图

工作模式切换程序设计
当系统判定工作模式发生改变时,该函数被调用。该函数主要负责模式切换的具体工作,比如寄存器配置,改写标志等。其流程如图5.7所示。
工作模式切换程序代码如下:
void Mode_Changed(void)
{
              Mode_Changed = 0;
              if(Sen_Flag) //sensorless_mode
              {
              GPIO_Init(GPIOD,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4,GPIO_MODE_IN_FL_NO_IT);
图5.7 工作模式切换程序流程图
//close hall_chanel
//defineEXTI PORTB_PIN5,6,7.PIN_5->PHASE_C;PIN_6->PHASE_B;PIN_7->PHASE_A
GPIO_Init(GPIOB,GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_MODE_IN_FL_IT);            
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB,EXTI_SENSITIVITY_RISE_FALL);
                            TIM5_ITConfig(TIM5_IT_CC1, ENABLE);
                            Trs_Data[10] = 0;
                            Hall_Flag = 0;
              }
              if(Hall_Flag)              //hall_mode
              {
                            GPIO_Init(GPIOB, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_MODE_IN_FL_NO_IT);
                            GPIO_Init(GPIOD, GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4, GPIO_MODE_IN_FL_IT);//PD2->HA,PD3->HB,PD4->HC
                            EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD, EXTI_SENSITIVITY_RISE_FALL);//hall_mode

                            TIM5_ITConfig(TIM5_IT_CC1, DISABLE);
                            Trs_Data[10] = 1;
                            Hall_Fault = 0;
              }

              if(Hall_Fault)
              {
                            Trs_Data[10] = 2;
              }            
}

速度控制程序设计
    每隔20ms,该函数被主函数调用,用于根据电机当前转速与设定转速之差,改变PWM输出,来达到电机速度基本保持恒定的目的。其流程图如图5.8所示。
图5.8 速度控制程序流程图
速度控制程序代码如下:
if(Contrl_Flag)/****SPEED_CONTROL***/
              {
                            Contrl_Flag = 0;            
                            Speed_Compute();
                            if(Mot_St)            
                                          PWM_Ctl();
              }

AD采样程序设计
    AD采样程序主要负责系统的母线电流、母线电压以及转把电压的采集与初步处理。系统每次进行一路AD转换,每隔20ms切换一个通道,开始一次AD转换。其流程如图5.9所示。
图5.9 AD采样程序流程图
AD采样程序代码如下:
void ADC(void)
{
              EOC_Flag = ADC1_GetFlagStatus(ADC1_FLAG_EOC);
              if(EOC_Flag)
              {
                            ADC1_ClearFlag(ADC1_FLAG_EOC);
                            EOC_Flag = 0;
                            switch(ADC_Switch)
                            {
                                          case 0: Conversion_Val = ADC1_GetConversionValue();
bus_cur=((float)Temp-195.05)*(5000/2048);//(Temp-5*1/21*4*1024/5)*5/1024/0.5/4*1000//放大1000倍
                                                                                                  Bus_Cur = (u16)bus_cur;
                                                                                                  break;
                                          case 1: Conversion_Val = ADC1_GetConversionValue();
                                                                                                  bus_vol = (float)Conversion_Val*5/1024*32.2/2.2*1000;
                                                                                                  Bus_Vol = (u16)bus_vol;
                                                                                                  break;
                                          case 2:              Conversion_Val = ADC1_GetConversionValue();
                                                                                                  Speed_Set = (u16)(Conversion_Val*3+1000);
                                                                                                  if(Speed_Set<1000)Speed_Set = 1000;if(Speed_Set>3800)Speed_Set = 3800;break;
                                          default: break;
                            }
                            ADC1_DeInit();
                            Trs_Data[2] = (u8)(Bus_Vol/256);
                            Trs_Data[3] = (u8)(Bus_Vol%256);
                            Trs_Data[4] = (u8)(Bus_Cur/256);
                            Trs_Data[5] = (u8)(Bus_Cur%256);
                            Trs_Data[6] = (u8)(Speed_Set/256);
                            Trs_Data[7] = (u8)(Speed_Set%256);
              }
}

系统保护程序设计
系统保护程序实现了电机的过压、欠压、过流保护,保护了电机和电源。当系统检测到过压、欠压、过流信号后,马上停车,并做一些后续工作后返回。其流程如图5.10所示。
系统保护程序代码如下:
图5.10 系统保护程序流程图
void Protect(void)
{
              if((Mot_St==1)&&Speed_Measure>=1000)
              {
                            if(Bus_Cur >= CUR_MAX)
                            {
                                          TIM1_Cmd(DISABLE);
                                          CD_OFF;
                                          BD_OFF;
                                          AD_OFF;
                                          Mot_St = 0;
                                          OUT_Disable();
                            }            
                            if(Bus_Vol >= VOL_MAX)
                            {
                                          TIM1_Cmd(DISABLE);
                                          CD_OFF;
                                          BD_OFF;
                                          AD_OFF;
                                          Mot_St = 0;
                                          OUT_Disable();
                            }            
                            if(Speed_Measure >= 1000)
                                          if(Bus_Vol <= VOL_MIN)
                                          {
                                                        TIM1_Cmd(DISABLE);
                                                        CD_OFF;
                                                        BD_OFF;
                                                        AD_OFF;
                                                        Mot_St = 0;
                                                        OUT_Disable();
                                          }            
              }                                         
}
1



西京学院本科毕业论文(设计)

测试程序设计
电动自行车控制器设计完成后,由于该控制器为一个针对电动自行车具体应用的系控制系统,所以相对于其他控制器来说,人机界面相对较差。为弥补这个不足,给后面的系统调试及最终成果演示提供一个良好的信息交互平台,在本系统设计中加入了下位机与上位机通讯的功能。

测试系统功能设计
    为形成一个良好的人机交互平台,本系统的上位机使用borland公司的C++ Builder软件进行开发,Borland C++ Builder 具有强大的界面功能。最终要求上位机能和下位机保持实时通讯,实时更新下位机的母线电流、母线电压、设定转速及测得转速等信息,并有电流及速度趋势曲线。上位机还应具有PID参数整定模块,用于电机速度闭环调试时候的参数整定;电机起停控制模块,用于控制电机的起动、停止;电机工作模式选择模块,可以控制电机的工作模式选择;串口选择、控制模块,选择和下位机通讯的串口号及控制串口的工作状态;电机运行状况显示模块,用于显示电机当前的工作状况。

通讯协议
    系统中,上位机和下位机的通讯功能使用实现。使用MSComm控件可以轻松地实现上位机与下位机的数据交换。但是,本系统中上位机与下位机交换的数据较多,而且还涉及许多电机控制命令。所以为了让上位机和下位机准确地执行数据操作,在系统设计中加入了众多通讯协议。上位机接收到用户的请求时,便向下位机传送数据。当用户的请求为改变PID参数时,上位机便向下位机传送4个字节的数据;当用户的请求为改变电机运行状态的命令请求时,上位机向下位机传送3个字节的数据。具体协议信息,请参考表6.1、表6.2。
    1)当用户改变PID参数时,上位机将向下位机连续传送宽度为4个字节的数据串:数据串的第一个字节标志着PID三个Edit控件中哪个控件的值发生了改变,即用户修改了PID参数中的哪一个。数据起值为0xe1,表面用户改变的是P参数;0xe2,表面用户改变的是I参数;0xe3表面用户改变的是D参数。数据串的第二个字节为本次传送数据的数据宽度,方便下位机的数据接收判断。当然,在用户改变PID参数时,该字节内装入的是4。数据串的第三第四个字节装的是当前的参数(P、I或D),第三个字节为数据的高位,第四个字节为数据的低位。
    2)当用户需要改变电机的运行状态时,上位机将向下位机连续传送宽度为3个字节的数据串:数据串的第一个字节用于存储当前的数据串为命令信号。数据串的第二个字节用于存储数据串的数据宽度,同样也是用于下位机判断数据接收完成与否。数据串的第三个字节存储信息为当前的用户命令,下位机需要通过判断此字节的数据,来完成相应的动作。数值0代表用户设定电机工作在霍尔模式;数值1表示用户设定电机工作在无传感模式;数值2表示用户设定电机工作在自动切换模式;数值3表示用户需要起动电机;数值4表示用户需要让电机停止工作。
3)当然,下位机向上位机传送的数据也需要加入通讯协议。下位机每隔1s向上位机发送一次数据,该数据串宽度为11个字节。上位机通过一定的协议去读取接收到的数据。数据串的第一个字节为数据起始代码,其数值为0xbb,第二个字节为数据串宽度代码,其数值为0x0b。数据串的第三、第四个字节分别存放的是母线电压的高八位和低八位,第五、第六个字节分别存放母线电流的高八位和低八位,第七、第八个字节分别存放设定转速的高八位和低八位,第九、第十个字节分别存放的是测得转速的高八位和低八位,第十一字节存放的是当前工作模式的信息,数值0表示电机当前工作在无传感模式下,数值1表示电机当前工作在霍尔模式下,数值2表示电机霍尔传感器出现故障,系统需要切换到自动切换模式下工作。
表6.1 上位机向下位机发送数据

1
2
3
4
含义
1
0xe1
4
数据高位
数据低位
用户需要修改P参数
2
0xe2
4
数据高位
数据低位
用户需要修改I参数
3
0xe3
4
数据高位
数据低位
用户需要修改D参数
4
0xbc
3
0x00
--
电机工作模式为霍尔模式
5
0xbc
3
0x01
--
电机工作模式为无感模式
6
0xbc
3
0x02
--
电机工作模式为自动切换模式
7
0xbc
3
0x03
--
电机起动
8
0xbc
3
0x04
--
电机停车

表6.2 下位机向上位机发送数据
字节号
1
2
3
4
5
6
数据
0xbb
0x0b
数据高位
数据低位
数据高位
数据低位
含义
数据开始
数据个数
母线电压
母线电流
字节号
7
8
9
10
11
数据
数据高位
数据低位
数据高位
数据低位
0
1
2
含义
设定转速
实时转速
霍尔模式
无感模式
霍尔故障


下位机程序设计
    下位机程序设计包含了单字节数据传送、接收程序设计和数据接收完成后的数据处理部分的程序设计。单字节数据的传送、接收程序其实质为一个数据传送、接收中断函数,无太多的逻辑在里面。
数据传送中断程序设计
下位机每隔1s向上位机发送实时数据,包括母线电压、母线电流、设定转速、测得转速、霍尔传感器状态、当前工作模式。通讯数据传送中断程序主要负责下位机向上位机发送固定格式的数据,每当发送完成一个字节,系统产生该中断,继续发送需传送数据的下一字节。其流程如图6.1所示。
图6.1 数据传送中断程序流程图
数据传送中断程序代码如下:
void UART1_TX_IRQHandler(void) interrupt 17
{
              static u8 i=0;
              UART1_SendData8(Trs_Data);
              UART1_ClearITPendingBit(UART1_IT_TXE);
              i++;
              if(i==11)
              {
                            i=0;
                            UART1_ITConfig(UART1_IT_TXE,DISABLE);
              }            
}
数据接收中断程序设计
数据接收中断程序主要负责下位机接收上位机发送下来的固定格式的数据,每当接收完成一个字节,系统产生该中断,继续等待上位机传送数据的下一字节。其流程如图6.2所示。
图6.2 数据接收中断程序流程图
数据接收中断程序代码如下:
void UART1_RX_IRQHandler(void) interrupt 18
{
                  static u8 number=0;
                  number++;
                  Rec_Data[number-1] = UART1_ReceiveData8();
                            if(number > 2)
                            if(number == Rec_Data[1])
                            {
                                          number = 0;
                                          Rec_Com = 1;
                            }
}
数据接收完成程序设计
数据接收完成程序在主函数中被调用,当主函数判定数据接收完成后,调用该子程序。该子程序主要对接收到的数据进行处理,并进行命令响应。主要响应的命令有电机起动、电机停车、工作模式选择等。其流程如图6.3所示。
图6.3 数据接收完成程序流程图
    数据接收完成程序代码如下:
void Receive_Com(void)
{
              u16 receive_val;
              Rec_Com = 0;
              if(((Rec_Data[0]&0xf0)==0xb0)||((Rec_Data[0]&0xf0)==0xe0))
              if((Rec_Data[1]==3)||(Rec_Data[1]==4))
              {
              switch(Rec_Data[1])
              {
                            case 3: receive_val = Rec_Data[2];break;

                            case 4: receive_val = Rec_Data[2]<<8;receive_val += Rec_Data[3];break;
              }
switch(Rec_Data[2])
{
              case 2: Auto_Flag = 1;Hall_Flag = 1;Sen_Flag = 0;Mode_Changed = 1;break;

              case 0: Auto_Flag = 0;Hall_Flag = 1;Sen_Flag = 0;Mode_Changed = 1;break;

              case 1: Auto_Flag = 0;Hall_Flag = 0;Sen_Flag = 1;Mode_Changed = 1;break;

              case 3: TIM1_Cmd(ENABLE);Commutation(Motor_Step,15);Mot_St = 1;break;

              case 4: TIM1_Cmd(DISABLE);CD_OFF;BD_OFF;AD_OFF;Mot_St = 0;OUT_Disable();break;
}            
              switch(Rec_Data[0])
              {
              case 0xe1: PID_SP.p = receive_val; break;                                                      
              case 0xe2: PID_SP.i = receive_val; break;
              case 0xe3: PID_SP.d = receive_val; break;            
              }
}            
}

上位机程序设计
    上位机主要实现了用户对电机的启停控制、速度闭环PID参数整定及电机运行状态的实时监控。上位机是用户与单片机交流的窗口,当用户有请求时,可通过上位机将请求传送至单片机,单片机会通过上位机,将系统的运行状况反馈给用户。上位机接收到下位机传送的数据后会更新画面显示,好让用户知道当前电机的工作状况;上位机在接收到用户的请求时也会向下位机传送控制命令及数据更新值,让下位机按用户的意图动作。其流程如图6.4所示,其详细代码见附录4.4。
图6.4 上位机程序流程图

测试结果
本研究课题经过理论分析,硬件电路设计、软件的编写和调试,最终完成了电动自行车控制器的样品设计。该控制器以ST系列单片机中性价比较高的STM8S903K3为控制核心,充分利用片内多种资源,设计出的控制器具有体积小的特点和较低的成本优势,具有一定的市场竞争力。
控制器样品设计完成后,我们对控制器进行了一系列关键点的波形测试,测试结果分别如下图所示。
图6.5 A相的端电压与霍尔信号波形
图6.6 B相反电动势过零信号与C相霍尔信号波形
  • 霍尔模式
  • 无传感模式
  • 自动切换模式(霍尔出现故障)
  • 从故障中恢复
图6.7 上位机监控画面
如图6.5所示,相电压为一个梯形波。在MOSFET导通时,绕组端电压在24V左右;而在MOSFET关断后一段时间内,绕组端电压迅速降到-1V左右,那是因为续流二极管的钳位作用,降绕组的感应电压释放掉。
如图6.6所示,霍尔信号的跳变与反电动势的跳变有一定的延迟,这个延迟大约为30个电角度。因为在硬件电路中加入了低通滤波器,引入了一定的相位延迟,所以B相的过零信号并不是超前B相霍尔信号30个电角度,在换相逻辑匹配之前一定要慎重判断转子位置,防止发生换相错误。
如图6.7 a)所示,系统在霍尔模式下启动,工作,运行状况良好;图6.7 b)所示,系统在无传感模式下启动,工作,运行状况良好;图6.7 c)所示,系统在自动切换模式下出现霍尔故障,系统自动切换到无传感模式下;图6.7 d)所示,当霍尔修复后,系统又可切换回霍尔模式下工作。


系统调试
1)在霍尔模式下,转速计算不准确。用示波器观察霍尔信号输入引脚,发现系统在某3个位置可能不停地在进外部中断,在不停地换相。因为本系统中转速的计算是通过计数换相步数来实现的,所以转速会出现很大的偏差。后来发现是ADC采样的影响,将ADC采样频率降低,并且在霍尔模式下换相前加入逻辑判断后,问题解决。
2)在定时器的调试环节,配置好定时器后,发现怎么都进不了中断,检查程序,一切配置合理,后来在老师的指导下,发现是中断向量表的问题。重新配置中断向量表,问题解决。
3)在调试霍尔换相的时候,发现很多子程序跳不进去,貌似程序一直在外边中断中循环执行。在老师的指导下,进了外边中断后重新配置一遍外部中断,问题解决。原来SMT8S903K3没有清除外部中断标志位的函数,重新配置外部中断,可以清除中断标志位。
4)ADC不能正常工作,每次都只能转换一次,转换完成后进入中断处理数据,然后再启动,但后面ADC根本就启动不了。后来把数据处理放在主函数中,通过在主函数中判断转换完成标志位的方式来控制ADC的启停,问题解决。
5)在ADC能够准确地工作后,写了一串让ADC以单次扫描模式工作的代码,让其依次采集母线电压、母线电流以及转把电压,发现ADC并不能很好地工作,使能了缓冲区后,读出来的值始终只有一个,按理说应该是三个,因为我配置了三个模拟量输入通道,而且ADC的工作模式已配置为单次扫描模式。读出的缓冲区的数据始终是在配置通道时的最后一个通道。修改配置方法,改为只配一个通道(三个通道中,通道号最大那个通道),转换出来的值依然不对。无奈,只好修改代码,让ADC工作在单次转换的模式下,分时段去采样母线电压、母线电流及转把输入电压。
6)在无传感模式的起动代码的调试过程中,发现电机在加入起动代码后,在最初的延时换相阶段能够正常转动,但在从异步模式切换到同步模式后,电机停止转动。在老师的提示下发现可能是异步起动时转速不够,缩短异步起动延时时间,问题解决。但在引入负载后,延时换相起动再次失效。后来索性去掉延时换相起动部分,在无传感的工作模式下,直接定位转子位置(和霍尔模式的电机起动差不多),发现电机也能正常起动,但起动成功的概率降低。最终,代码中虽然做了起动策略,但考虑到其通用性不强,没有调用延时换相起动函数,而直接采取了霍尔式的“单步起动法”。
7)在无传感模式下,换相不正确,电流偏大,而且总莫名其妙地大幅度抖动。用示波器观察反电动势过零信号和霍尔信号,发现反电动势信号和霍尔信号与理论上的30个电角度的延迟有较大偏差,在外部中断触发后,判断转子位置的逻辑和理论上不匹配,使用示波器,逐步定位,判断转子位置,重新建立换相逻辑后,问题解决。
8)在与上位机的单字节通讯程序调试过程中,发现下位机可以接收上位机传下来的数据,但是上位机不能接收下位机传出的数据。用示波器观察通讯脉冲,发现可能是硬件故障,排除硬件故障后,问题解决。
9)在单字节通讯调通后,按着单字节传送的原理,写多字节的通讯。发现在一定的通讯次数后,下位机传送到上位机的数据和上位机传下去的数据一样,但程序里面并不是实现的这个功能。后来在下位机的通讯代码中加入判断条件,当系统判定数据传送完成是时屏蔽数据传送中断,问题解决。
10)编程过程中,出现代码过长,超出存储区域的问题。在网上找了很多解决办法,试过自己配置连接文件,试过修改存储区域地址,试过使用保留存储区,试过编译方式等,都无效。后来删除了一部分编译了但没用到的库文件,问题解决。
11)在系统保护部分的调试过程中,发现加入保护代码后电机很难起动成功,即便是在霍尔工作模式下也是如此。后来才发现可能是起动的时候电流过大或者电压过低,系统直接进入保护状态,停掉电机。在系统保护代码之前加入电机起动判断,让电机起动再判断是否需要采取保护措施,问题解决。
12)在写完转速闭环控制代码后调试,发现系统在启动的时候会有很大一个超调,而且不管怎么调PID参数都解决不了。后来发现是PID控制函数的调用问题,原来在上位机向下位机发送起动信号之前,下位机以及就现有的速度(0 RPM),和设定转速做了多次PID运算,当下位机接收到上位机的起动命令,此时输出PWM以及被速度控制算法改为了最大值(默认最大值为80%)。在调用速度闭环控制函数之前,加入了电机起动判断后,电机起动时超调量大大减小。
    总之,在整个毕业设计期间,由于对软件使用的不熟悉所引起的错误操作导致的问题不占少数,在此就不一一列举。还有其他许多小问题,在此也不详述。


小结
本文对电动自行车控制系统在设计中遇到的关键问题进行了较为全面的研究与分析,介绍了控制系统四大组成部分的工作原理,重点阐述了无刷直流电机的工作原理与控制策略,分析了选用STM8S903K3单片机作为控制核心的优势,分模块详述了系统软硬件设计原理。
但是本系统的设计还有颇多不足,比如无传感模式的起动问题,不能保证系统的通用性,而且起动有可能不成功。由于时间的问题,在系统的闭环控制方面,本应该采用速度、电流串级控制,而最终舍弃了电流闭环,只做了一个速度闭环控制,而且速度控制的精度并不算高。在系统保护功能方面,欠压保护的阀值设定的较低,在电机起动时还是会突然拉低母线电压,而且会持续一段时间,至今没找到问题所在。所以为了不影响电机的正常起动,将欠压保护的阀值改小。在电机的起动中,按理说应该由转把发出起动命令,但在本系统中,却采用了上位机发出起动命令的方式。在系统中,刹车功能、上电自检功能没有添加。
虽然,本系统存在诸多不足与缺陷,但系统的硬件设计是经过了时间考验的,是值得借鉴的。软件方面缺陷虽多,但可由日后升级弥补,升级后将是相当具竞争力的产品,可用于商业,批量生产。最终,本系统作为一个商业用途的电动自行车控制器,还需改进;但作为一个无刷直流电机初学者的入门教程和电动自行车的工作原理教程还是不错的。

1



西京学院本科毕业论文(设计)
                                      附录2 上位机界面

附录2 上位机界面

.系统实物图



完整的Word格式文档51黑下载地址(内附源程序):
基于单片机的变频器设计.doc (4.69 MB, 下载次数: 230)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏11 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:225956 发表于 2018-6-2 11:29 | 只看该作者
有配套资料吗?
回复

使用道具 举报

板凳
ID:241189 发表于 2018-11-4 22:11 | 只看该作者
晕死,居然扣了我两次黑币!
回复

使用道具 举报

地板
ID:27517 发表于 2019-3-18 20:03 | 只看该作者
谢谢,对初学者有用
回复

使用道具 举报

5#
ID:203971 发表于 2019-8-8 23:32 | 只看该作者
很详细,学习了。
回复

使用道具 举报

6#
ID:203971 发表于 2019-8-8 23:39 | 只看该作者
谢谢,很详细的设计,相当有用。
回复

使用道具 举报

7#
ID:441868 发表于 2019-8-14 15:49 | 只看该作者
果然是长文,慢慢看
回复

使用道具 举报

8#
ID:267435 发表于 2019-9-26 10:24 | 只看该作者
有配套的资料吗
回复

使用道具 举报

9#
ID:592524 发表于 2019-9-26 21:44 | 只看该作者
学习中,感谢分享。
回复

使用道具 举报

10#
ID:826691 发表于 2022-4-2 14:08 | 只看该作者
对帖主顶礼膜拜
回复

使用道具 举报

11#
ID:64019 发表于 2023-1-20 13:12 | 只看该作者

谢谢,很详细的设计,相当有用
回复

使用道具 举报

12#
ID:72951 发表于 2023-2-22 19:19 | 只看该作者
很详细!顶礼膜拜
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表