DSP无刷直流电动机驱动控制程序
基于DSP的无刷直流电动机控制方法研究
The Re e r h o s a c fBLDCM ie Drv r Con r le s d n DSP t o lr Ba e o
Q U W i bn , U H n I e — i O og—x n ig a ( . T ru o ,Ld , h nzo 10 1 C ia 2 i guU i r t,h ni g 1 0 3 C ia 1 K K G o pC . t. C a gh u2 3 1 , hn ;.J n s nv sy Z ej n 2 1 , hn ) a ei a 2
w sc o e i h c Ic nr l rw sa o t d i h p e n h u r n o p T o v h rb e h tBL M a a h s n, w i h a P o t l a d p e n t e s e d a d t e c re t o . o s l e te p o l m t a DC h d n oe l hg oq e r pe a d b d p r r n e i o p e te u u lc mmuai n me h d t a ali tr p e u r ui e h n h tr u i l n a ef ma c n l w s e d. s a o p o h tt t o t l n e r td s b o t sw e o h c u n te r i g a d fl n d e f h h e al f c e s r q i p d o h trwa b n o e a d a n w me h d t a h i n n al g e g so e t re h l —ef t n o se up e n t e mo o sa a d n d, n e t o h t s i t e s
基于TI2812DSP的无刷直流电动机控制软件设计
三江学院本科毕业设计(论文)题目基于TI2812 DSP的无刷直流电动机控制软件设计电气与自动化工程学院院电气工程及其自动化专业学号B05071006学生邢小强指导教师熊田忠起讫日期2009年2月23日至2009年5月25日设计地点L422摘要无刷直流电机既具有直流电机结构简单、运行可靠、维护方便等一系列优点,还具备交流电机运行效率高、无励磁损耗及调速性能好等诸多优点,现已广泛应用于工业控制的各个领域。
本文在对无刷直流电动机调速系统的发展及应用综述的基础上,介绍了采用DSP芯片对无刷直流电动机进行换向与转速控制的微机控制系统。
文中给出了系统的总体设计方案,分析了无刷直流电机的工作原理、控制电路、驱动电路,提出了软件控制无刷电机的策略。
阐述了软件框架的基本结构以及各个模块的具体设计方法。
文中还对DSP芯片(TMS320F2812)进行了一些介绍。
最后运用实际的硬件平台以及上位机软件(LabVIEW)对无刷直流电动机进行监控,证明了该系统工作良好,达到了预期目标。
关键词:无刷直流电动机,DSP芯片,软件控制AbstractBrushless DC motor with a DC motor is simple in structure, reliable operation, easy maintenance, such as a series of advantages, also has high efficiency AC motor run, no excitation loss and good speed, and many other advantages, has been widely used in various industrial controlfield.This article in the brushless DC motor speed control system overview of the development and application on the basis of the paper introduces the DSP chip on the exchange of brushless DC motor and speed control to the Microputer Control System. In this paper, the overall design of the system program, analysis of the brushless DC motor working principle, control circuit, driver circuit, a software strategy for brushless motor control. Framework set out the basic structure of software modules, as well as the specific design methods. The article also DSP Core (TMS320F2812) to introduce a number.Finally, the use of the actual hardware platform, as well as PC software (LabVIEW) for brushless DC motor control, show that the system is good, reaching the target.Keywords: brushless DC motor, DSP chips, Control Software目录第一章绪论- 1 -1.1 无刷直流电动机的发展现状- 1 -1.2 DSP与无刷直流电动机的联系- 2 -1.3 本文研究的容- 3 -第二章无刷电动机的结构及工作原理- 3 -2.1无刷直流电动机的结构- 3 -2.2无刷直流电动机的工作原理- 4 -第三章电机控制中的DSP的特点和选择- 6 -3.1 TMS320F2812的简介- 6 -3.2电机控制中的DSP的特点- 8 -3.3 DSP软件设计特点- 10 -3.3.1 DSP开发环境CCS2000- 10 -3.3.2 C语言与汇编语言的分析比较- 10 - 第四章电机控制中的DSP软件设计- 11 -4.1 各模块的程序及说明- 11 -4.1.1系统时钟的初始化模块- 11 -4.1.2 事件管理器EV的初始化模块- 12 -4.1.3 串行通讯SCI的初始化模块- 15 -4.1.4 输入捕捉(CAP)中断- 16 -4.1.5定时器T1- 19 -4.1.6 DSP与上位串口通信协议- 19 -4.2 DSP程序的总体框架- 21 -第五章结论及展望- 21 -5.1 结论- 21 -5.2 展望- 22 -参考文献- 22 -致- 23 -第一章绪论1.1 无刷直流电动机的发展现状直流电动机具有很多优点,如优秀的线性机械特性、宽的调速围、大的起动转矩、简单的控制电路等,长期以来一直广泛地应用在各种驱动装置和伺服系统中。
基于DSP的无刷直流电动机控制系统的研究与设计
转矩来驱动 电动机连续运转 。无刷直流 电动机为 了实现无 电 刷换 向,首先要把直流 电动机的 电枢绕组放在定子上 ,把永 久磁钢放在转子上 ,这与传统直流 电动机 的结构恰好相反 。
【 收稿 日期 】2 1— 9 3 0 20 — 0 【 作者简介 】王宪磊 ( 9 3 ) 1 8 一 ,男,陕西子 洲人 ,塔 里木大学机械 电气化 工程 学院讲师 ,太原理 工大学电气与动力工程 学 院在读硕士 ,研 究方 向为电力系统及其 自动化 ;王淑红 ( 9 5 ) 1 6 一 ,女 ,山西万荣人 ,太原理工大学电气与动力工程学院教授 , 博士 ,副 院长 ,研 究方向为直线 电动机和特种 电动机。
长期 以来 ,电动机作为机 电能量转换装置 ,其应用范围 己遍及 国民经济 的各个领域及人们 的 日常生活之 中。传统直 流 电机采用机械机构 即电刷进行换 向,存在机械摩擦 ,并 由
检测 电动机转 子所 处的位置 ,并根据转子检测 到的位置信 号 来控 制开关电路 中开关 管的导通和截止 ,从而 自动控制 电动 机 中,某些绕组通 电,某些绕组 断电,实现 了电子换 向。
研 究 与设计
王宪磊 王淑红
(. 1 太原理 工大学 ,山西 太原 0 0 2 ; 3 0 4
2 塔里木 大学机械 电气4 .程 学院,新疆 阿拉 尔 8 3 0 ) .  ̄z - 430
【 摘 要 】介 绍了无刷 直流电动机 的基本 结构、工作原理和运行特性 ,简述 了基 于 D P的无刷直流 电动机的控制策略 ,对 S
【 中图分类号】T 7 M6
【 文献标识码 】A
【 文章编号 】1 0- 1 1 2 1 )0 0 l - 2 0 8 15 (0 2 i— 1 10
基于DSP的高性能无刷直流电动机数字控制系统
及人们 的 日常生活 之 中。特别 是 以无 刷直 流 电动机 为运动源 的电动机 伺服系 统 ,越 来越 多地应 用 于精
密 自动控 制 、半导体 制造 等领域 ,并 成 为一个不 断
进步 与创 新 的工业领 域 。因此 ,研究 并开发 高精 度
伺服 系统 在技 术 进步 和 经济 发 展 上具 有重 要 意 义 。 目前 国外 大学和 公 司投 入 了大量人 力 、财力 对其加
的运 算 能力 、改进 的并行 结构和 有 效的成本 等众 多
优 点 ,所 以它 已成 为很 多信号 处理及 控制系 统 的理
想选择 。
以研 究 ,在 2 0世 纪 8 年 代 已推 出 了一 系列 商品化 0 的伺服 控制 系统 ,我 国也 有很 多单位 在研 究 、开发 和 引进 高精度 的 电机 伺服 系统 的技术 、元 器件和 装 备 。为进一 步提高 伺服 控制 系统 的性能 ,文 中利
f a u e . a c mb n to f d g t lsgn lp o e s r a e a e n l g c r ui i i lc n r lo o o o t r c to s s c e su l e t r s Vi o i a i n o i i i a r c s o nd r lt d a a o ic t g t o to fm t r f r mo o on r l i u c s f l a ,d a y
0 引言
随着社 会生产 力 的发展 , 电动 机作 为机 电能量
转换 装置 ,其应用 范 围 已遍及 国民经济 的各 个领域
利用DSP控制直流无刷电机
利用DSP控制直流无刷电机直流无刷电机(Brushless DC Motor,简称BLDC)由于其高效、高转速、大扭矩和低噪音等特性而被广泛应用于各种领域。
要控制BLDC进行转速调节、位置控制等,需要使用数字信号处理器(Digital Signal Processor,简称DSP)来实现。
本文将详细介绍如何利用DSP控制直流无刷电机。
一、直流无刷电机介绍直流无刷电机由转子和定子组成,电机可通过电子调速控制技术实现闭环控制,即通过检测电流、电压、角度等参数来实现控制。
相较于传统的可调电阻电调速和功率电子器件调速,无刷电机控制方式更为精确,可控性更高,并且在减小电气噪声的同时大大提高了效率。
二、直流无刷电机的控制方式直流无刷电机的控制方式可以分为三种:感应式、霍尔传感器控制、反电动势检测控制。
其中,感应式控制方式较为简单,但其准确性和鲁棒性较差;霍尔传感器控制方式使用霍尔元件检测转子位置,可以获得更高的准确性和鲁棒性;反电动势检测控制方式通过检测转子的反电动势来确定位置,具有简化硬件和准确性高等优点。
三、DSP控制直流无刷电机利用DSP控制直流无刷电机需要进行以下几个步骤:1. 设置DSP的GPIO口并输入代码:用GPIO口连接电机,可根据需要设置GPIO管脚的中断、状态和其他属性,并输入代码到DSP中。
2. 制作电机转速控制器:通过编写参考电路和硬件控制程序来制作电机转速控制器,代码需要根据控制方式进行适当的修改。
3. 编写电机控制程序:根据转速调节、位置控制等的需求,编写相关的电机控制程序。
基本步骤包括:初始化电机控制器、设定控制参数、检测电机状态、执行电机控制指令等。
4. 测试和优化:根据测试结果优化电机控制程序,以达到最佳效果。
在测试过程中可以使用示波器、逻辑分析仪等工具进行分析。
四、DSP控制直流无刷电机的优点1. 高精度DSP能够提供高精度的控制,可在微秒级的时间内执行多种运算,实现高速、高精度的控制。
基于DSP的直流电机控制系统设计本科毕业论文
基于D S P的直流电机控制系统设计摘要:直流电机由于励磁磁场和电枢磁场完全解耦,可以独立控制,因此具备良好的调速性能,出力大、调速范围宽和易于控制,广泛应用于电力拖动系统中;而随着对电机控制要求的不断提高,普通的单片机越来越不能满足对电机控制的要求,DSP技术的发展正好为先进控制理论以及复杂控制算法的实现提供了有力的支持;本设计采用美国TI公司专门为电机数字化控制设计的16位定点DSP 控制器TMS320LF2407作为微控制器;该芯片集DSP信号高速处理能力及适用于电机控制优化的外围电路于一体,可以为高性能传动控制技术提供可靠高效的信号处理与控制硬件;电机的控制系统是由检测装置、主控制器、功率驱动器以及上位机组成,其中DSP控制器是电机控制系统的关键部分,负责对电机的反馈信号进行处理并输出控制信号来控制电机的转动;关键词:直流电机; DSP; PID控制器; PWMThe Design of DC Motor Control System Based on DSP Abstract:The DC motor armature magnetic field and the excitation completely decoupled, it can be independently controlled, so it has a good speed performance, contribute to a large power, widely speed range, and easy to control, so it is widely used in electric drive systems. With the motor control required for continuous improvement, common single MCU can't meet requirements of the motor control well, DSP technology just for the advanced control theory and complex control algorithm implementation provides a strong support.This design uses the American TI company specially for motor control design of digital 16 fixed-point DSP controller TMS320LF2407 as the controller. The chip set DSP signal the high processing capacity and used in motor control optimization the periphery of the circuit in a body, high performance driving control technology to provide reliable and efficient signal processing and control hardware. Motor control system is composed of detection devices, the main controller, power driver and PC componen ts, whichDSP controller is a key part of the motor control system , responsible for the motor feedback signal processing and output control sig n al to control the rotation of the motor.Keywords:DC motor, DSP, PID controller, PWM目录第1章绪论课题概述课题研究的背景电气传动是以电动机的转矩和转速为控制对象,按生产机械工艺要求进行电动机转速控制的自动化系统;根据电动机的不同,工程上通常把电气传动分为直流电气传动和交流电气传动两大类;纵观电气传动的发展过程,交流与直流两大电气传动并存于各个时期的各大工业领域内,虽然它们所处的地位和作用不同,但它们始终随着工业技术而发展的;特别是随着电力电子技术和微电子学的发展,在相互竞争中完善着自身,发生着变更;由于直流电机具有良好的线性调速特性,简单的控制性能,因此在工业场合应用广泛;近代,随着生产技术的发展,对电气传动在起制动、正反转以及调速能力、静态特性和动态响应方面都提出了更高的要求,所以计算机控制电力拖动控制系统已成为计算机应用的一个重要内容;直流调速系统在工农业生产中有着更为广泛的应用;随着计算机技术和电力电子技术的飞速发展,两者的有机结合使电力拖动控制技术产生了新的变化;电力电子技术、计算机技术和直流拖动技术的组合是技术领域的交叉,具有广泛的应用前景;有不少的研究者己经在用DSP作为控制器进行研究;直流调速控制系统的控制方法经历了机械式的、双机组式的、分立元件电路式的、集成电路式的、单片机式的发展过程;随着数字信号处理器DSP的出现,给直流调速控制提供了新的手段和方法;将计算机技术的最新发展成果运用在直流调速系统中,在经典控制的基础之上探讨一种新的控制方法,为计算机技术在电力拖动控制系统中的应用做些研究性的工作;用计算机技术实现直流调速控制系统,计算机的选型很多;经过选择,选取DSP芯片作为控制器;直流调速系统的内容十分丰富,有开环控制系统,有闭环控制系统;有单闭环控制系统,有双闭环控制系统和多闭环控制系统;有可逆调速系统,有不可逆调速系统等9;开展本课题研究的控制对象是闭环直流调速系统;研究的目的是利用计算机硬件和软件发展的最新成果,对控制系统升级进行研究;研究工作是在对控制对象全面回顾总结的基础上,重点对控制部分展开研究,它包括对实现控制所需要的硬件和软件环境的探讨,控制策略和控制算法的探讨等内容;目前,对于控制对象的研究和讨论很多,有比较成熟的理论,但实现控制的方法和手段随着技术的发展,特别是计算机技术的发展,不断地进行技术升级;这个过程经历了从分立元件控制,集成电路控制和单片计算机控制等过程;每一次的技术升级都是控制系统的性能有较大地提高和改进;随着新的控制芯片的出现,给技术升级提供了新的可能;电机控制是DSP应用的主要领域,随着社会的发展以及对电机控制要求的日益提高,DSP将在电机控制领域中发挥越来越重要的作用;课题研究的目的及意义长期以来,直流电机一直占据着速度控制和位置控制的统治地位;由于它具有良好的线性调速特性,简单的控制性能,高质高效的平滑运转的特性,尽管近年来不断受到其它电动机的挑战,但到目前为止,就其性能来说仍无其它电动机可比;在控制系统的构成上,本课题对硬件电路进行了设计,而这个硬件系统具有一定的通用性,也即可以将它作为一个硬件平台,在其它过程控制中应用;另外,由DSP的特点量身订做,可以在其它的控制系统中根据不同的要求进行外围电路的设计,进而来构成硬件系统,这样既便于设计思想的物化,又使得设计系统更加紧凑,不浪费资源;本直流电机控制系统采用经典的数字增量式PID控制算法,在本文中对数字增量式PID控制的理论、设计和实现进行了较为详细的论述; 课题研究的现状近些年来,随着现代电力电子技术、控制技术和计算机技术的发展,电机的应用技术也得到了进一步的发展,新产品、新技术层出不穷;除了人们己经熟悉的普通电机外,许多不同用途的特种电机也不断问世,如广泛应用于办公设备的无刷直流电机和高精度的步进电机、用于照相机的超声波电机、用于心脏血液循环系统的微型电机等等;另一方面,由于应用了电力电子技术,电机的控制技术变得更加灵活,效率也更高,如变频器控制的异步电机及伺服系统即是典型的例子1;在实际中,电机应用已由过去简单的起停控制、提供动力为目的应用,上升到对其速度、位置、转矩等进行精确的控制,使被驱动的机械运动符合预想的要求;例如在工业自动化、办公室自动化和家庭住宅自动化方面使用大量的电机,几乎都采用功率器件进行控制,将预定的控制方案、规划指令转变成期望的机械运动;这种新型控制技术己经不是传统的“电机控制”或“电气传动”而是“运动控制”;运动控制使被控机械实现精确的位置控制、速度控制、加速度控制、转矩或力的控制,以及这些被控机械量的综合控制;因此现代电机控制技术离不开功率器件和电机控制器的发展5;电机的控制器经历了从模拟控制器到数字控制器的发展;由于模拟器件的一些参数受外界因素影响较大,并且它的精度也差;所有这些都使得模拟控制器的可重复性比较差,控制效果不理想,因此调速电机的控制器逐渐朝数字化方向发展;数字控制器与模拟控制器相比较,具有可靠性高、参数调整方便、更改控制策略灵活、控制精度高、对环境因素不敏感等优点;随着现有的工业电气传动、自动控制和家电领域对电机控制产品需求的增加用户也不断提高对电机控制技术的要求5;总是希望能在驱动系统中集成更多的功能,达到更高的性能;许多设备试图使用8位或是准16位的微处理器实现电机的闭环控制,然而它们的内部体系结构和计算功能都阻碍了这一要求的实现;例如,在很多领域如工业、家电和汽车,用户希望使用效率高且去掉霍尔效应传感器的电机;这种电机的控制可以通过使用先进的电机控制理论、采用高效的控制算法来实现;但是这可能超出上述微处理器的计算能力;使用高性能的数字信号处理器DSP来解决电机控制器不断增加的计算量和速度需求是目前较为普遍的做法;将一系列外围设备如模数转换器A/D、脉宽调制发生器PWM和数字信号处理器DSP集成在一起,就获得一个既功能强大又非常经济的电机控制专用的DSP芯片;近年来,各种集成化的一单片DSP的性能得到很大的改善,软件和开发工具越来越多,越来越好,价格却大幅度降低;低端产品的价格已接近单片机的价格水平,但却比单片机具有更高的性能价格比;越来越多的单片机用户开始选用DSP器件来提高产品性能,DSP器件取代高档单片机的时机己成熟13;首先,与单片机相比,DSP器件具有较高的集成度;DSP具有更快的CPU,更大容量的存储器,内置有波特率发生器和FIFO缓冲器,提供高速、同步串口和标准异步串口;有的片内集成了A/D和采样/保持电路,可提供PWM输出;更为不同的是,DSP器件为精简指令器件,大多数指令都能在一个周期内完成,并且通过并行处理技术,使一个指令周期内可完成多条指令;同时DSP采用改进的哈佛结构,具有独立的程序和数据空间,允许同时存取程序和数据;又配有内置高速硬件乘法器、多级流水线,使DSP 器件具有高速的数据计算能力;而单片机为复杂指令系统计算机CISC,多数指令要2-3个指令周期来完成;单片机采用冯.诺依曼结构,程序和数据在同一空间存取,同一时刻只能单独访问指令和数据、ALU只能做加法,乘法需要由软件来实现,因此占用较多的指令周期,也就是说速度比较慢;所以,结构上的差异使DSP器件比准16位单片机单指令执行时间快8-10倍,完成一次乘法运算快16-30倍;DSP器件还提供了高度专业化的指令集,提供了FFT快速傅立叶变换和滤波器的运算;此外,DSP器件提供了JTAG Joint Test Action Group接口,具有更先进的开发手段,批量生产测试更方便;其次,基于DSP芯片制造的电机控制器可以降低对传感器等外围器件的要求;通过复杂的算法达到同样的控制性能,降低成本,可靠性高,有利于专利技术的保密;现在各大DSP生产厂家都推出自己的内嵌式DSP电机控制专用集成电路;如占DSP市场份额45%的美国德州仪器公司,凭借自己的实力,推出了电机控制器专用DSP--TMS320C24x;新的TMS320C24x DSP采用TI公司TMS320C2xLP16位定点DSP核,并集成了一个电机事件管理器,后者的特点是可以最佳方式实现对电机的控制;该器件利用TI的可重用DSP核心技术,显示出TI的特殊能力一通过在单一芯片上集成一个DSP和混合信号外设件,制造出面向各种应用的DSP方案;TMS320C24x作为第一个数字电机控制器的专用DSP系列,可支持用于电机控制的指令产生、控制算法处理、数据交流和系统监控等功能;集成的DSP核、最佳化电机控制器事件管理器和单片式A/D设计等诸多功能块加在一起,就可以提供一个单芯片式数字电机控制方案;系列中的TMS320LF2407包括一个30MIPSDSP核、两个事件管理器、32位的中央算术逻辑单元、多达16通道的IO位A/D转换器、64K的I/0空间和一个32K字的闪速存储器,它利用TMS320的定点DSP软件开发工具和JTAG仿真支持,可使电机控制领域的研发人员方便地调试控制器和脱机使用;第三,DSP运算速度快,控制策略中可以使用先进的实时算法,如自适应控制、卡尔曼滤波、状态预估等,大大提高控制系统的品质;而且DSP 控制软件可用C语言或汇编语言编写或者二者嵌套使用;因此采用DSP 芯片制造的电机控制器便于用户的调试和应用;最后,在越来越多的场合,如电动汽车、纺织行业、水泵变频调速系统等,他们往往是规模比较大,时序、组合逻辑都很复杂的情况,这时如果同时运用DSP芯片和一些其它的可编程逻辑器件可以大大减小系统的体积、提高系统运算能力,实现复杂的实时控制;课题研究的内容本文主要研究基于DSP的直流电机控制系统,通过控制算法和调速方法的分析,利用电机调速、DSP芯片控制、上位机通信、按键模块等的基本原理及相关知识,实现对电机的速度控制;整个系统的基本思想就是利用DSP内部资源产生可控制的脉冲控制整流电压,改变串入主回路中的直流电动机的电磁转矩,实现电动机的转速调节;研究内容包括如下:1电机控制系统功能实现的分析;2控制算法与调速方法的分析与设计;3电机驱动、电源模块、按键模块、测速、显示模块的硬件设计与实现;4系统主程序、按键扫描、控制算法、测速、电机速度控制等程序的分析、设计与实现;5电机控制系统整机测试与实现;第2章系统总体设计系统的组成由图2-1可知,该设计包含DSP控制单元、功率驱动单元、检测单元、显示单元、通信单元五个部分;DSP控制单元:对来自上位机的给定信号和来自传感器的反馈信号按一定的算法进行处理,输出相应的PWM波,经过光电隔离部分,送给功率驱动单元;功率驱动单元:对来自DSP控制器的PWM信号进行功率放大后送给直流电动机的电枢两端,驱动电机与负载;速度检测单元:采集电机的速度信息,并送给主控制器;显示单元:将采集到的电机转速信息予以显示;通信单元:负责主控制器与上位机及外设的信息交换;图2-1 系统总体框图2. 2 DSP芯片选择直流电机的调速控制系统一般采用电机专用微处理器,其种类主要包括复杂指令集CISC处理器如工NTEL196MX系列单片微控制器,精简指令集RISC如日立公司SH704x系列单片微控制器,哈佛结构DSP处理器如TI公司T145320F24X系列DSP;一般用于直流电机控制的徽处理器性能要满足以下几个方面:1指令执行速度;2片上程序存储器、数据存储器的容量及程序存储器的类型;3乘除法、积和运算和坐标变换、向量计算等控制计算功能;4中断功能和中断通道的数目;5用于PWM生成硬件单元和可实现的调制范围以及死区调节单元;6用于输入模拟信号的A/D转换器;7价格及开发环境;DSP一般采用哈佛或者改进的哈佛结构,程序空间和数据空间分离,程序的数据总线和地址总线分离,数据的数据总线和地址总线分离;这种结构允许同时访问程序指令和数据,在同一机器周期里完成读和写,并行支持在单机器时钟内同时执行算术、逻辑和位处理操作,极大地提高了执行速度,并且电机控制专用DSP具备丰富的设备和接口资源;TI公司的TMS320系列DSP芯片是目前最有影响、最为成功的数字信号处理器,其产品销量一直处于国际领先地位,是公认的世界DSP霸主;本论文选择了TI公司的TMS320LF2407DSP作为直流电机控制系统的微处理器;TMS320LF2407 DSP 控制器介绍TMS320LF2407 DSP是专为数字电机控制和其它控制系统而设计的;是当前集成度最高、性能最强的运动控制芯片;不但有高性能的C2XX CPU 内核,配置有高速数字信号处理的结构,且有控制电机的外设;它将数字信号处理的高速运算功能,与面向电机的强大控制功能结合在一起,成为传统的多微处理器单元和多片系统的理想替代品12;TMS320LF2407的片内外设模块包括:事件管理模块EV、数字输入/输出模块I/O、模数转换模块ADC、串行外设模块SPI、串行通信模块SCI、局域网控制器模块CAN;1事件管理器EVA和EVBTMS320LF2407提供两个事件管理器EVA和EVB模块,每个模块包含两个通用GP定时器、3个全比较/PWM单元、3个捕获单元和一个正交编码脉冲电路;事件管理器位用户提供了众多的功能和特点,在运动控制和电机控制中特别有用;通用定时器:LF2407共有4个通用定时器,每个定时器包括:一个16位的定时器增/减计数的计数器TxCNT;一个16位的定时器比较寄存器TxCMPR;一个16位的定时器周期寄存器TxPR;一个16位的定时器控制寄存器TxCON;可选择的内部或外部输入时钟;各个GP定时器之间可以彼此独立工作或相互同步工作;与其有关的比较寄存器可用作比较功能或PWM波形发生;每个GP定时器的内部或外部的输入时钟都可进行可编程的预定标,它还向事件管理器的子模块提供时毕;每个通用定时器有4种可选择的操作模式:停止/保持模式、连续增计数模式、定向增/减计数模式、逢续增/减计数模式;当计数器值和比较寄存器值相等时,比较匹配发生,从而在定时器的PWM输出引脚TxPWM/TxCMP上产生CMP/PWM 脉冲,可设置控制寄存器GPTCON中的相应位,选择下溢、比较匹配或周期匹配时自动启动片内A/D转换器;比较单元:LF2407有6个比较单元,每个EV模块有3个;每个比较单元又有两个相关的PWM输出,比较单元的时基由通用定时器1 EVA模块和通用定时器3 EVB模块提供;每个比较单元和通用定时器1或通用定时器3,死区单元及输出逻辑可在两个特定的器件引脚上产生一对具有可编程死区以及输出极性可控的PWM输出;在每个EV模块中有6个这种与比较单元相关的PWM输出引脚,这6个特定的PWM输出引脚可用于控制三相交流感应电机和直流无刷电机;由比较方式控制寄存器所控制的多种输出方式能轻易地控制应用广泛的开关磁阻电机和同步磁阻电机;捕获单元:捕获单元被用于高速I/O的自动管理器,它监视输入引脚上信号的变化,记录输入事件发生时的计数器值,即记录下所发生事件的时刻;该部件的工作由内部定时器同步,不用CPU干预;LF2407共有6个捕获单元,CAP1,CAP2,CAP3可选择通用定时器1或2作为它们的时基,但CAP1和CAP2一定要选择相同的定时器作为它们的时基;CAP4,CAP5,CAP6可选择通用定时器3或4作为它们的时基,同样CAP4和CAP5也一定要选择相同的定时器作为它们的时基;每个单元各有一个两级的FIFO缓冲堆栈;当捕获发生时,相应的中断标志被置位,并向CPU发中断请求;若中断标志己被置位,捕获单元还将启动片内A/D转换器;正交编码脉冲QEP单元:常用的位置反馈检测元件为光电编码器或光栅尺,它直接将电机角度和位移的模拟信号转换为数字信号,其输出一般有相位差为90°的A、B两路信号和同步脉冲信号C;A、B两路脉冲可直接作为LF2407的CAP1/QEP1和CAP2/QEP2引脚的输入;正交编码脉冲电路的时基由通用定时器2或通用定时器4提供,但通用定时器必须设置成定向增/减计数模式,并以正交编码脉冲电路作为时钟源;2数字输入/输出模块I/ODSP器件的数子输入/输出引脚均为功能复用引脚;即这些引脚既可作为通用I/O功能双向数据输入/输出引脚,也可作特殊功能PWM输出、捕获输入、串行输入输出等引脚;数子I/O模块负责对这些引脚进行控制和设置;两种功能的选择由I/O复用控制寄存器MCRx,x=A,B,C来控制;当引脚作为通用I/O时,由数据和方向控制寄存器PxDATDIR,x=A,B,C,D,E,F指出各I/O引脚的数据方向输入还是输出和当前引脚对应的电平高或低;读通用I/O引脚的电平或向引脚输出电平,实际上是对相应的寄存器PxDATDIR进行读写操作;3模数转换器ADC模块在自动控制系统中,被控制或被检测的对象,如温度、压力、流量、速度等都是连续变化的物理量,通过适当的传感器如温度传感器、压力传感器、光电传感器等将他们转换为连续变化的电压或电流即模拟量;模数转换器ADC就是用来讲这些模拟电压或电流转换成计算机能够识别的数字量的模块;TMS320LF2407期间内部有一个10为的模数转换器ADC;该模块能够对16个模拟输入信号进行采样/保持和A/D转换,通道的转换顺序可以编程选择;4串行通信接口SCI模块2407器件的串行通信接口SCI模块是一个标准的通信异步接收/发送UART可编程串行通信接口;SCI支持CPU与其他异步串口采用标准不返回零NRZ模块进行异步串行数字通信;SCI有空闲线和地址位两种多处理器通信方式;两个输入/输出引脚:SCIRXDSCI接收数据引脚和SCITXDSCI发送数据引脚;SCI通过一个16位的波特率选择寄存器,可编程选择64K种不同速率的波特率;SCI支持半双工和全双工操作,发送器和接收器的操作可以通过中断或转换状态标志来完成;5串行外设接口SPI模块串行外设接口SPI模块是一个高速同步串行输入/输出I/O口,它能使可编程长度1—16位的串行位流以可编程的位传输速率输入或输出器件;SPI可作为一种串行总线标准,以同步方式实现两个设备之间的信息交换,即两个设备在同一时钟下工作;SPI通常用于DSP控制器与外部设备或其他控制器之间的通信,用SPI可以构成多机通信系统,SPI还可以作为移位寄存器、显示驱动器和模数转换器ADC等器件的外设扩展口;6CAN控制器模块LF24xx系列DSP控制器作为第一个具有片上CAN控制模块的DSP芯片,给用户提供一个设计分布式或网络化运动控制系统的无限可能;CAN总线是一种多主总线,通信介质可以是绞线、同轴电缆或光导纤维,通信速率可达1 Mbps,通信距离可达10km;CAN协议的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块进行编码,使网络内的节点个数在理论上不受限制;由于CAN 总线具有较强的纠错能力,支持差分收发,因而适合高干扰环境,并具有较远的传输距离;2407的CAN控制器模块是一个16位的外设模块,支持CAN2. 0B协议;CAN模块有6个邮箱MBOX0—MBOX5;有用于0,1,2和3号的邮箱的本地屏蔽寄存器和15个控制/状态寄存器;CAN模块既有可编程的位速率、中断方式和CAN总线唤醒功能;自动回复远程请求;自动再发送功能在发送时出错或仲裁是丢失数据的情况下;总线出错诊断和自测模式; 硬件方案论证测速传感器的选择方案一:使用测速发电机,输出电动势E和转速n成线性关系,即E=kn,其中k是常数;改变旋转方向时,输出电动势的极性即相应改变;方案二:采用霍尔传感器,霍尔元件是磁敏元件,在被测的旋转体上装一磁体,旋转时,每当磁体经过霍尔元件,霍尔元件就发出一个信号,经放大整形得到脉冲信号,送运算;方案三:在电机的转轴上套一码盘,利用光电对管测脉冲,每转一圈OUT端输出若干个脉冲;本设计中码盘每转一圈,输出4个脉冲经比较,方案一中的测速放电机安装不如方案二中霍尔元件安装方便,并且准确率也没方案二的高,并且方案二不需A/D转换,直接可以被DSP接收;但方案二的霍尔传感器的采购不是很方便,故采用方案三,它具有方案二的几乎所有的优点;方案三中可以采用定时的方法:是通过定时器记录脉冲的周期T,这样每分钟的转速:M=60/4T=15/T;0也可以采用。
基于DSP的无刷直流电动机控制系统
i p e e t d Ha d r de i n n c n r s r t g f DC mo o S rs ne r wa e sg a d o t ol ta e y or t r
等 方面的研究 :杨 春 。女 。北京 市石 景山 区业余 大学讲 师。硕 士研 究生毕 业。从 事计 算机检测与控制 、智 能仪 器等方 面的研 究。
作者声 明: 自 愿将本文稿酬捐为 “ 器仪表用户 杂志爱心助 学基金” 仪
基 于 D P的无刷直流 电动机控制 系统 S
尤 文 ,马文瑞 ,李
【】刘 富强 . 3 数字视 频监控系 统开发及应 用 [ . M】北京 :机 械工业 出版
社 . 20 . 0 3
作者 简介:刘志刚 ( 90) 男,在读研 究生 ,现从事计算机检 测与控制方面 18- 。 的研 究:邬拳学 ,男,教授 .从 事计 算机检 测与控 制.智 能仪 嚣.人工智能
远可 以达到 20 公里,而且传输的图象清晰无 马赛 克现象 。并且 00 本系统有很强的扩展性 ,可 以根据以后的需 要方便地增加接 点。
3 应 用及 分 析 随着 网络的不断成熟和发展 。网络视频将在各种领域应用,例
如现在 的网络会议 、网络可 视 电话,还 可 以应用 在各种远程监 控
圈 2 ■ 十啊 培幕坑 圉
中,比如水库大坝 、水 闸、银行 、电力系统等 的远程监控。 我们在长江 公路大桥监控 管理实践中成功地应用 了这一系统。 可对大桥 的路面车辆情况 ,收 费站 的现场情况等各种可能出现突发 事件 的地方实现现场视频监控 。由于整 个网络 是通过光纤作 为传送 媒介 ,基 于光纤具有大容量传输 能力 ,我们还 可以通过该网络把对 大桥 的其 他监控 数据在上 面传 输,比如对 中心变 电站采 集的电流 、 电压 数据 ,各种报 警信 息等 ,各种需要 的数据 都能在该 网络 中传 输 ,这样就大大地节约 了其他传输 的开销 。本 系统可 以根据 实际的 需要 ,可 以很方便 的与 wA 网连接 ,方便大范围的管理使用 。我 N 们通 过大 量的实验对本系 统的实时性 、准确 性、安全性、可靠性 、 稳 定性进行 了验证 ,结果 与我们 预期 的结果基 本符合 ,所以本视频
永磁无刷直流电动机的DSP控制方案设计
出 信 号 控 制 开 关 管 的 导 通 与 截 止 ,当某 一 开 关 管 导 通
时 ,相应 的定子 绕组 中 ,就 有 电流 通过 并 产生 磁 场 ,该 磁 场与 永磁 转 子磁 极相 互 作用 便产 生 力矩 ,使 电 动机 转 子旋 转 ,由于位 置传 感 器转 子 与 电动机 同 轴相 连 ,因此 它 的转 子也 跟 着转 动并 依 次地 向开关 管发 出信号 ,控 制 其 导通 与截止 ,从 而 电枢 绕组 中的 电流 随着 转子 位 置 的
te n m b rofte mansra ft oors e n t ut e n hspa e ,t P2 0 r c so sc nto hi,w t her c n r h u e h i tem o he m t pe d i he f ur.I ti p r he DS 4 7 p o es r a o r lc p i h t i o tol
mot o or c mm ut t r ot OI 3 0 r s e sm o o p e on r lf aur s ut as v r ome t e b u h a d c m m u a o i g f u t.Tha s a o ,b h C T 1 n b u hl s 1 f t r s e d c t o e t e ,b lo o e c h r s n o t t r brn a ls ti
电刷 和换 向器 ,易 产生 火花 ,引起 干扰 ,噪 声大 。针 对 其不 足之处 ,近年来 逐 渐推 广 的无刷 直 流 电机 ,使用 电 子开关 电路 和位 置传 感器 ,代 替传 统 电机 中的 电刷 和换 向器 ,使之 既有 普通 有 刷 电机 的调 速与启 动 特性 ,又克
直流电动机的DSP控制
直流电动机数字控制的基础 。而在直流调速控制中通常选择 IP ) 控制,由于 D P S S 控制具有 高速运行 }能,因 生 此可实现诸如模糊控制等复杂的控制算法。此外,还可以 自己产生有死 区的 PM 出,可使外 围硬件最少。 w输
本 文 重点将 围绕 DP 制技 术对 直 流 电动机如何 实现 控制 进行研 究 。 S控
【 关键 词 】 直 流 电动机 D P控 制 S
0 绪 论
当前 ,随着 自动 化科 技 水平 的飞速 发展 ,工 业 企 业 电气 自动 化 技术 已成 为 电力企 业 自动 化控 制 技 术 的的基 础 ,为 电力 企业 尤其 是 发 电建 设 提供 了核
1 直流 电动机控 制基本原理
1 1 直流 电动机转速控制方法及本课题研究方向 .
机 、步进电动机 的技术挑战。直流 电动机结构和控
制方式都需要迅速进行技术提升。
0 2 项 目的目的与意义 . 电动机 的数字控制是电动机控制的发展趋势, 为 了进一 步提高直流 电动机技术 水平和运 行可靠
全 数字控 制 ,从而 省去 了外 围的 PD调节 电路和 比 I 较 电路 。 因此 ,使 用 DP控 制直流 电动机 可 以获得 S
高性 能和 低成本 。
保持 电枢电流不变 ,即保持电动机的输 出转矩不变 , 可以得到具有恒转矩特性的大调速范围,因此大多
数 应 用场 合 都使用 电枢 电压控 制 法 。本 课题 主 要研 究 电枢 电压控 制法 的 D P控 制 。 S 12 直流 电动机驱 动 方式 . 直 流 电动 机 的驱 动 离不 开 半 导体 功 率器 件 。在 对 直 流 电动机 电枢 电压 的控 制 和 驱动 中 ,对 半 导体 功 率 器件 的使 用上 可 分 为两 种 方 式 :线 性放 大驱 动 方 式和 开关驱动 方式 。 线 性放 大 驱动 方式 是 半 导 体功 率 器 工作 在 线性
基于DSP的无刷直流电动机控制系统
l
直流无刷电动机却与前者相反, 它具有旋转 的磁场和固 f
定 的电枢 。这 样, 子换 向线 路 中 的功率 开 关元 件, 晶 I 电 如
体 管 或 可 控 硅 等 可 直 接 与 电枢 绕 组 连 接 。在 电动 机 内,
— —
2 无刷 直 流 电动 机 控 制 系 统 的 软 硬 件 设 计
绕组 通 电 的顺 序 和 时间 ,主要 由功 率 逻辑 开关 单 元 和位
11 直 流 无刷 电动 机 的结构 . f 元 是 控 制 电路 的核 心 .其 功 能是 将 电源 的功率 以一 定 的 众所周知, 有刷直流电动机具有旋转的电枢和固定 j 逻辑 关 系 分配 给 无刷 直 流 电机 定子 上 各 绕组 .以便 使 电
速 性 能好 等诸 多优 点 ,故 其应 用越 来 越广 泛 。 : 当定 子绕 组 的某 一 相通 电时 ,该 电 流与 转 子永 久 磁 随着应 用 的深 入 ,对 无 刷 直流 电 动机 的 数字 控 制不 I 钢 的磁 极 所产 生 的磁 场 互 相作 用 而产 生 转矩 ,驱动 转 子 但要求控制器有强大 的 I / 0控制功能 ,又要求控制器有 } 旋 转 。再 由位 置 传 感 器 将 转 子 磁钢 位 置 变 换 成 电信 号 ,
机 的高控制 能力相 结合 开 发 出 了电动机 控 制 的专用 f 相 。 由 于 电 子 开 关 线 路 的 导 通 次 序 是 与 转 子 转 角 同 步
DP S 。这种 D P集成了电动机控制所必须的可增加死区 j 的 ,因而 起 到 了机 械换 向器 的换 向作 用 。 因此 ,所 谓 无 S
维普资讯
第2 1卷 第 5期
2 8 年 9 月 00
基于DSP的无刷直流电动机控制系统
1 I技术在电动机控制系统 中的应用 PD
在 绝 大 多数 工 业控 制 中 ,使 用 最 多 的控 制 方 法一 般 是PD控 制算 法 。虽 然 当前控 制 理论 和控 制 I 技 术在 信 息技 术 、集 成 电 路技 术 的 高速 发 展 的 推 动 下 有 了很 大 的发 展 ,但是PD控 制作 为一 种稳 定 I 的 、可 靠 的 、实 现 简 单 的算 法 仍 然得 到 了广 泛 的 应用 。随 着计 算机 技 术 的发展 ,在 传 统 的模拟 PD I 控 制基 础上 ,出现 了很 多 改进 的数 字P D算法 ,如 I 微 分 先 行P D控 制 、积 分 分 离P D控 制 等 。对 于数 I I 字PD控 制算 法 又可 分为 位 置式 P D控 制 算法 和 增 I I
弱 。在P D控制 的 三种 作用 中, 比例 作 用可对 系统 I 的 偏 差 做 出 及时 响 应 ;积 分 作 用 主要 用 来 消 除 系
统 静 差 ,改善 系统 的静 态 特 性 ,体 现 了 系统 的静 态 性 能 指 标 ;微 分 作 用 主 要用 来 减少 动 态 超 调 , 克 服 系统 振 荡 ,加 快 系 统 的动 态 响应 ,改 善 系统
量式PD控 制算 法 。 I
l+ T f + K
i
d t
( 1 )
1 )式 中K 比例 增 益 系 数 ,起 比例 调 整 作 为 用 ;T是 积 分 时 间常 数 ,它 决 定 了积 分 作 用 的 强 i 弱 ;T 是 微 分 时 间 常 数 ,它 决 定 了微 分 作 用 的 强
直 流 电 动 机 得 到 了长 足 的发 展 。许 多小 型 无刷 直 流 电 动 机 ,在 应用 时 往 往 需 要 精 确 的 速 度控 制 , 尤 其 在 高 速运 行场 合 ,对 信 号 反 馈 控 制 灵敏 度 的
基于DSP的无刷直流电动机控制系统设计
- — —
图 2 电枢 磁 场矢 量 图
转子 位 置 检 测 器 发 出 的信 号 控 制 功 率 管 的切 换 ,保证 电枢磁 场不 断步 进 ,使转 子跟 随 电枢磁 场 持续旋 转 ,不 会 出现 普通 同步 电机 的失 步现 象 。
相 绕组 通 电 。其 电 枢 磁 场 如 图 2所 示 。设 功 率 管
T 和 T 导通 ,电机 A、B相 通 电 ,产 生 的电 枢磁
场 为 Tb ;而 后 T 截 止 ,T 导 通 ,此 时 电机 A、 C相 通 电 ,电枢磁 场 为 T 。 比较 T 和 T 后 者 顺 时 针前 进 了 6 。 O 电角 度 ,前 进 是 跃 进 式 的。 由此
W ANG i r ng. LOU . — i n M n— o Shun ta
( e to i gn ei g。Xiin U nv r iy Xi n 7 0 7 Elcr ncEn i e rn da ie st , ’ 1 0 1, Chn ) a ia
ABS RACT: Th r s l s o o s u e d l e a s ft er s mp e s r c u e a d g o T e b u h e sDC m t ri s d wi e y b c u e o h i i l t u t r n o d p ro ma c . Th t rc n r l y t m e i n d b s d o o c s P c i s C3 F2 1 efr n e e mo o o t o s e i d s g e a e n a l w o tDS h p d PI 0 0 0 s s
维普资讯
基于DSP控制的无刷直流电动机系统
在直流无刷 电动机 中, 何 时刻 三相 中只 有两 相被 激 任 励 。例如 : A相 中电流在 0 ~10和 10 ~3 0期 间流动 , 。 2。 8。 0。 而在 10 ~1 0和 30 -3 0期 间 , 2 。 8。 0 。 6 。 A相 不通 电。每一 相的 反 电动势是梯形 的 , 有两 个稳定 电压的 1 0区间 , 2。 不通 电相 的反 电动势 可 以被测 出 , 间接 得到转 子位 置 。基 于转 子位 置, 建立 三相 逆变桥的功率 器件的换相 顺序 , 功率 器件被 每
2 2 反 电动势法检测转子位置 原理 . 三相无刷直流 电动机在工作时 , 每相绕组都产生感应 电 动势 , 电动机 每转 6 。 0就需要换相一次 , 每转一转需要换相六
片作为控制器 。该 芯片将 D P的高运算 速度 与面 向电机的 S 高效控制能力集 于一体 , 具有低成本 , 功耗等特点 , 有 电 低 具 机控制方面无 法 比拟的优点 , 电机 的数字化控 制作用 非常 对
T S2 L 20 集 高速 处理 能力及使 用于电机 控制 、 M 30 F 47 优
收稿 日期 :0 6 5 9 修 回 日期 :0 6—0 2 0 —0 一l 20 6—2 3
ห้องสมุดไป่ตู้
第一 作者 肖俊 武
男 6 教授 0岁
维普资讯
第5 期
肖俊武 , 基于 D P控制的无刷直流电动机 系统 等: S
化的外 围电路 于一体 , 为高性能传 动控制 提供 可靠 高效的信
号处理与控制硬件 。
2 系统控 制原 理
2 1 无位 置传感器无刷直流电动机 的工 作原理 .
制 。其应用从 最初 的军 事工 业 , 向航空 航天 、 医疗 、 息 、 信 家
浅谈DSP在无刷直流电机控制系统中的应用
1 无刷 直 流 电机 的 原理
开关管前 6 。 O 恒通. 6 o 后 0采用 P WM 调制 功率开关管工作在二二导 通方式 . 每个通电周期六种导通状态 . 每个状态六 十度 电角度 。 逆变器 功率开关管可采用 功率 M S E O F T或 IB . 功率 电机 的控制 中. G T 在大 可 选择 MC 。 T 21 I 2 3 . R 10的应用及其与逆变器和 DS P的接口 I 2 3 是 三相逆变器专用驱动集成电路 , R 10 是一种采用高压 、 速 高 功率 M S IT和 I B O FE G T的驱动器 I 2 3 同时驱动三相桥式逆变 R 10可 器 中六个功率开关管 . 且仅需要一个输入级 电源 。 采用 I 2 3 芯 片驱 R 10 动逆变器功率管时, 其基本 主电路结构不需要改变 R 3和 R 组成过 4 流检测 电路, 中 R 其 3是过流取样 电阻 4 R 是作为分压用 的可调 电阻 I23 R 10的 HN ~ I3LN ~ I3作 为功 率管 的输入 驱 动 信号 与 I 1H N 、I 1LN D P相连 接, S 由于 D P控制 产生 P S WM 控制信 号 的输入 . A L F u T与 DP S 外部 中断引脚连接, D P中断程序来处理故 障 理地选择 浮 由 S 合 充 电容, 驱动电路工作便 十分 可靠, 它不仅 使电路结构 简单。 可靠性 提 高, 而且可以可靠地实现短路 、过流、欠压 和过压等 电路 的故 障保
【 e od]S ;r h s D o rP K yw rsD PBu l s CM t ;WM se o
0 概 述 无刷直流电动机具有体积小 、 重量轻 、 启动力矩大等特点。 基于先 进 电力 电子技术和 D P控制技术开发的调速系统结构简单 、工作可 S 靠、 调速性能好 , 已广 泛应用于数控机床 、 空航天 、 现 航 计算机外 围设 备等高科技领域中 . 本文 采用 Ⅱ 公 司推 出的 2 需要很少的系统元件 。 M 3 0 2 0 T S 2 F 4 X是美 国 T 公司推出的高性能 l I 6位数字信号处理 器 f s 1是专 门为 电机 D P. 的数字化控制而设计的 这种 D P包括一个定点 D P内核及一系列 S S 微控制器外 围电路, 将数字信号处理的运算 能力 与面向电机的高效控 制 能力集 于一体 , 以实现用软件取代模拟器件 , 可 方便地 修改控制策 略, 修正控制参数, 兼具故障检测 、 自诊断和与上位机通信等功能。
基于DSP全数字多相无刷直流电动机控制系统
感器, S D P上 的 C PQE A / P单元与 光 电传感 器 的输 出 相 连 ,用 来 捕 捉 转子 磁 极 位置 。光 电传 感 器 输 出对应 于 转 子 位 置 的编 码 信 号 , DS 通过 检测位 置编码 信 号和 电枢 电流信 P 号 ,来 控 制 电枢 电流 的换 相 时 刻 3 3 速 度 检 测 . 从转子位置检测可知 ,电机转子 每转一 周从传 感器 中就可得 到 1 8个换相信 号。 由 于速 度 信 号可 以 写成 v=A0/ AT ,而 且 光 电传感 器位 置 相 对于 电动 机 的定 子是 固定 不变 的,即两 个换相信 号之 间 的机械角度 差 A0是常数 ,因此测 出两 个检测信 号之 间的 时差 △T就可 以计算 出速 度 。 3 4 P M输 出和 功 率驱 动 . W
圈 1 lS 2F4 ' 3 0 2 0结 构 图 M
2 I 3 0 2 0的结 构 与特 点  ̄¥ 2 F 4
T 3 0 2 0结 构如 图 1 示 。 MS 2 F 4 所 主要 由 C U、片 内 R P AM 和 可 编程 R M 或 Fah O ls 存 储器 、事 件 管理器 、片 内周边接 口等部 分 组 成 。 T 3 0 2 0由于 采 用 哈佛 结构 ,流 MS 2 F 4
事 件管 理器对 运 动控制 提供 了非常有 用 的一系列 功 能 : ()遥 用定 时器 :三个 1 1 6位 的遥用 定 时器可用 于产生采样周期 , 为 比较单元 产 作 生 P M 输 出 以及 软件 定 时 的 时基 。 W ()比较 单 元与 P F MP输 出:共 2 W ̄ C
DSP基于DSP无刷直流电动机调速系统的设计
基于DSP无刷直流电动机调速系统的设计1无刷直流电动机本文针对有刷直流电动机存在换向火花、机械换向困难、磨损严重等缺点,提出了采用无刷直流机来代替有刷直流电动机,来提高控制系统的控制质量,本文设计了无刷直流机的数字控制方法。
由于DSP具有处理数据量大、实时性好和精度高等优点,所以本文控制器采用的是DSP。
此系统的双闭环就是通过DSP 软件编程实现的,比起以往的用模拟器件实现的控制系统,其整个系统结构比较简单、控制精度高并且具有很强的灵活性,系统可根据用户的控制要求只需更改设定参数(即指令操作数)就可以实现其控制结果。
本文对无刷直流机的结构和工作原理做了简单的介绍,以为了更好地理解无刷直流机控制系统。
虽然用位置传感器检测转子位置的方法比较直接,但位置传感器必须安装在电动机轴上,使电动机更加笨重,并且增加了整个系统的机械磨损等,所以本文采用了无位置传感器方法来获得转子位置信号,本文采用反电势检测法。
为了使整个系统能够可靠运行,因而采用了转速电流双闭环,转速环和电流环都采用PI调节器。
1.1 无刷直流机的结构无刷直流机的转子是由永磁材料制成的,具有一定磁极对数的永磁体。
为了能产生梯形波感应电动势,无刷直流机的转子磁钢的形状呈弧形(瓦片状),气隙磁场呈梯形分布。
定子上有电枢,这一点与永磁有刷直流电动机正好相反。
无刷直流机的定子电枢绕组采用整距集中式绕组,绕组的相数有二、三、四、五相,但应用最多的是三相和四相。
各项绕组分别与外部的电子开关电路相连,开关电路中的开关管受位置传感器的信号控制。
无刷直流机的工作离不开电子开关的电路,因此由电动机本体、转子位置传感器和电子开关电路三部分组成了无刷直流机控制系统。
其原理框图如图1-1所示。
图中,直流电源通过开关电路向电动机定子绕组供电,位置传感器随时检测到转子所处位置,并根据转子的位置信号来控制开关管的导通和截止。
从而自动地控制了哪些绕组通电,哪些绕组断电,实现了电子换向。
基于DSP的电动车辆BLDCM驱动控制系统
控 制对 象 , 生产的 T 30 F 4 7 MS2 L 20 A的 D P作为控制 器的核心硬 件. S 同时给 出 了 B D M 驱动控 制 系 LC 统的硬 件 电路 , 实验研 究结果证明 , 系统 具有 良好 的调速和再 生制动性能. 谊 关键词 : 电动车辆 ; L C D P  ̄ 动控制 ; B D M; S ;K 调速 中图分 类号 :M 3 T 31 文献标 识码 : A 文章编 号:6 2— 96 2 0 )6— 0 5— 4 17 0 4 (0 6 0 0 6 0
S y o rv n o to y td n d iea d c n rlsaan o cre l e i LDCM a e n DS fde ti hdeB av b sd o P
YAN F n .in DU K n me Z e g xa , u . i HANG Yu X h n . n 。 , n , UN S a g f g e
为此研究和开发电动交通工具是极为重要的. 本文 利用先进的 D P和 B D M硬件设备和科学方法 , S LC 建立了城市电动车辆电力驱动控制系统 , 研究和开 发了采用无刷直流 电动机驱动控制的城市 电动车
我国城市公共交通结构单一 , 主要依靠公共汽 车和 无轨电车. 缺乏大容量轨道交通系统, 现在 交
1 B D M 的驱 动控制 系统的总体构 LC 通拥挤和阻塞比较严重, 影响了城市发展. 大城市 成 原 理
靠现 有的公共汽车 , 无轨电车和有限的路面难于从 B D M驱动和控制系统 由主电路和控制电 LC 根本上解决人们“ 乘车难” 的问题. 另外 , 现有的交 路和位置检测电路三大部分组成. 其主电路如 图 1 通工具中 , 存在大量 的环境污染和燃料损耗 问题 , 所示. 由三相桥式逆变器供 电的 星型绕组 的永 J
基于DSP的双余度永磁无刷直流电动机控制系统
天津普 辰 电子 工程 有 限公 司
摘 要 : 究 了基 于一 片 D P T 30 20 控 制 的 双余 度 永 磁 无 刷 直流 电动 机 驱 动 控制 系统 , 细 介 绍 了系 研 S ( MS 2F 4 ) 详 统 D P控 制 器 的 硬件 电路 设 计 , 现 对 电 动 机 的位 置 、 度 和 电流 的 检 测 , 出 了 系 统 软 件 设 计 方 案 及 控 制 策 S 实 速 给 略 , 而 实 现 对 整个 系统 的控 制 。实验 结 果 表 明 , 一 片 D P构 成 的 控 制 器 控 制 双 余 度 电 动 机 系统 , 件 电 路 从 由 S 硬 结构简单 , 同时 系统 实 时性 好 , 响应 快 , 工 作模 式 之 间 切 换 方便 , 3种 具有 良好 的控 制 性 能 及 动态 特 性 。 关键词 :S D P 无 刷 直 流 电动 机 余 度 动 流 电 动 机 由 于 具 有 结 构 简
的有 效方 法之 一 , 就 需 要 控制 多 台无 刷 直 流 电 这 动机 , 或者 控制 一 台多余 度 的无刷 直 流 电动机 。 美 国 T 公 司 T 3 0 2 0集 DS I MS 2 F 4 P的 信 号 高速 处理 能力 及适 用 于 电动机控 制 的外 围 电路于
维普资讯
基 于 D P的 双 余 度 永磁 无 刷 直 流 电动 机 控 帝 系统 S 】
电 气 传动 20 0 6年 第 3 6卷 第 6期
基 于 DS P的双余 度 永 磁 无 刷 直 流 电动 机 控 制 系 统
顾福 深 张 战平 荀 东升
体 , 高性 能 传动 控 制 提 供 了可 靠 高 效 的信 号 为
处理 与控 制硬 件 。本文 充分 利用 该 芯片 的各 种功
基于TI C2000系列DSP的无刷直流电机无位置传感器驱动控制系统设计
优点&
关键词:无刷直流电机;数字信号处理器;电机驱动;传感器
中图分类号:TM 33 文献标志码:A 文章编号:1673-6540 ( 2019 ) 07- 0082- 07
Design of Brushless DC Motor Sensorless Drive Control System Based on TI C2000 Series DSP *
控制单元是电机驱动系统的核心单元,是电
机正常
—82 —
电机与披制应用2019,46 (7)
研究与设计I EMCA
了电机控制系统的电
,对于提高电机控
制系统性能、加快控制系统开发有着重大意义。
本文基于TI C2000系列DSP的BLDCM无
位置传感器驱动控制系统的设计,可供同行们
参考。
1电机控制原理
在电机控制系统中,转子位置检测 常重 的一个环节。传统&LDCM控制系统在电机安 装有 位置传感器以检测 位置,常见的有 霍尔传感器和光电编码器〔由于传感器方案增 加了传感器及其周围电路、连接件等, 电机控 制器体积增大,成本上升,且传 器的 限制了 电机的控制性能,为降低电机控制系统成本,故无 位置传感器控制方案应 生。常用无位置传感 器 位置信号获取方法有"磁链观测法、反电动 势过零检测法、反电动势3次谐波积分法、续流二 极管 ["&
Key words: brushless DC motor (BLDCM) ; digital signal processing (DSP) ; motor drive; sensor
0引言
BLDCM传统控制电 控制器, 片机
用单片机作为主
,
的
基于DSP的无刷直流电动机控制系统设计
De i n o nt o yse fBr h e sDC o or Ba e P sg n Co r lS tm o us l s M t s d on DS
Q e g I n P ( c ol f l t n sadIf m t nE gneig n u nvr t S ho o e r i n no ai n ier ,A h i i sy E co c r o n U e i
o rh etr ,H f 3 6 h a f c i c e ee 2 0 0 ,C i ) A t u i 1 n
0 5I 舌 无刷 直 流 电 机 不 仅 具 有 交 流 电 机 的 体 积 小 、
重量 轻 、惯 量 小 等 特 点 ,而 且 拥 有 直 流 电 动 机 优 良的调速性 能 ,但 又 没 有 机 械 换 向 器 的缺 点 , 因 此主要 应 用 于 工 厂 白化 和 办公 自动 化 方 面 ,它 正 在迅 速取 代 传 统 的直 流 电 机 和 异 步 电机 ,在 高 精
moo p e y t m , a d d sg e e -u i g f z y c n r l r t c iv r s ls tr s e d c n trs e d s s e n e in d s r t n n u z o tol a h e e b u h e s DC mo o p e o — f e o
实 现 无 刷 直 流 电 机 调 速 , 给 出 了 实 验 结 果 和
结 论 引。
1 自整 定 模 糊 控 制 技 术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.4 无刷直流电动机驱动控制程序//########################################################################## ###/////无刷电机控制源程序//TMS320F2812////########################################################################## ###//=====================================================================//头文件调用//=====================================================================#include "DSP28_Device.h"#include "math.h"#include "float.h"//=====================================================================//常量附值//=====================================================================#define Idc_max 3000 //电流给定最大值#define Idc_min 0 //电流给定最小值//=====================================================================//标志位//=====================================================================char Iab_Data=0;struct Flag_Bits { // bits descriptionUint16 Send:1; // 0 串口发数Uint16 Test:1; // 1 串口测试Uint16 Vflag:1; // 2 转速更新Uint16 SendEnd:1; // 3 串口发送结束Uint16 Sign1:1; // 4 上一次给定转向标志Uint16 Sign2:1; // 5 本次给定转向标志Uint16 Openint:1; // 6 启动标志Uint16 Adfrist:1; // 7 保留Uint16 Spdoff:1; // 8 保留Uint16 Zero:1; // 9 转速过零标志Uint16 Mode:3; // 10-12 保留Uint16 Dshow:1; // 13 保留Uint16 Sign:1; // 14 当前转向标志};union Flag_Reg {Uint16 all;struct Flag_Bits bit;}FlagRegs;//===================================================================== //全局变量//===================================================================== //串口通信变量unsigned int Sci_Rx[8]={0,0,0,0,0,0,0,0}; //接收数据数组unsigned int Sci_Tx[8]={0,0,0,0,0,0,0,0}; //发送数据数组char T_pointer=0; //发送数据数组指针char R_pointer=0; //接收数据数组指针char T_length=1; //发送数据长度char R_length=0; //接收数据长度char a2=0;//控制参数unsigned int spd_kp=0; //转速环P参数unsigned int spd_ki=0; //转速环I参数unsigned int id_kp=0,id_ki=0; //电流PI参数signed int spd_given=0; //转速给定signed int spd_given1=0; //转速给定signed int spd_given2=0; //转速给定//控制变量unsigned int cap1=0; //前次换向标志位unsigned int cap2=0; //本次换向标志位unsigned int intruptcount=0; //定时器1下溢中断次数unsigned int speed_given = 1000; //转速给定signed int Idc_given2=0; //算得本次电流给定值signed int speed_e1=0; //前次转速误差signed int speed_e2=0; //本次转速误差signed int Ia_e1=0; //前次电流误差signed int Ia_e2=0; //本次电流误差char t2first=0;signed int COMP2=0; //装比较寄存器值//转速反馈char Spd_Data=0; //滤波计数int speed_counter=0; //速度环计数器unsigned int cap_a; //本次捕获单元数据unsigned int cap_b; //上次捕获单元数据long cap_c; //捕获单元数据差signed int BLDC_SPD[10]={0,0,0,0,0,0,0,0,0,0};//转速滤波signed int spd_fd_q1=0; //转速反馈临时变量unsigned int spd_fd_q0=0; //转速检测值char cc=0;//电流反馈unsigned int ia[6]={0,0,0,0,0,0}; //A相电流反馈值unsigned int ib[6]={0,0,0,0,0,0}; //B相电流反馈值signed int ia_fd=0,ib_fd=0; //电流反馈signed int Temp_filter=0; //临时变量unsigned int t1per=0; //周期寄存器数值//临时变量signed long long1_tmp=0;signed long long2_tmp=0;signed int u16_tmp1=0;signed int u16_tmp2=0;//===================================================================== //子程序声明//===================================================================== interrupt void t1uf_int(void);interrupt void cap_int(void);void Ad(void);void speed(void); //计算速度void Ia_PI(void); //电流环调节Iavoid speed_PI(void); //速度环调节void bldc(void);void Check_Rxdata(void);void Sci_Send(signed int sci_delay);char *Fen_Jie(signed int Send_Temp);unsigned int Sci_Rx_check(unsigned int i_Rx,unsigned int *p_Rx);signed int DIV_CAL(long signed int dividend,signed int divisor);unsigned int U_DIV_CAL(long unsigned int udividend,unsigned int udivisor);//=====================================================================//主程序开始//===================================================================== void main(void){//控制寄存器初始设置InitSysCtrl(); //初始化系统DINT; //关全局中断IER = 0x0000;IFR = 0x0000;InitPieCtrl(); //初始化PIE中断InitPieVectTable(); //初始化PIE中断矢量表InitGpio(); //初始化Gpio输入输出口InitEv(); //初始化Eva的T和T2InitAdc_Eva(); //初始化ADInitData();EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.T1UFINT=&t1uf_int;//T1下溢中断地址PieVectTable.CAPINT4=&cap_int;PieVectTable.CAPINT5=&cap_int;PieVectTable.CAPINT6=&cap_int;EDIS; // This is needed to disable write to EALLOW protected registersPieCtrl.PIEIER2.bit.INTx6 = 1; //T1下溢中断使能PieCtrl.PIEIER5.bit.INTx5 = 1;PieCtrl.PIEIER5.bit.INTx6 = 1;PieCtrl.PIEIER5.bit.INTx7 = 1;IER |= M_INT2; // Enable CPU Interrupt 2IER |= M_INT4; // Enable CPU Interrupt 4IER |= M_INT5; // Enable CPU Interrupt 5EvbRegs.EVBIMRC.bit.CAP4INT=1;EvbRegs.EVBIMRC.bit.CAP5INT=1;EvbRegs.EVBIMRC.bit.CAP6INT=1;EvbRegs.CAPCONB.all=0x36FF;NOP;NOP;NOP;NOP;EvbRegs.CAPCONB.all=0xB6FF;EINT; //使能全局中断INTMERTM; // Enable Global realtime interrupt DBG//等待中断(中断之外的时间内进行LCD的发送和接收)for(;;){SCI_CTL();}}//===================================================================== //串口控制//===================================================================== //*************//接收数据检测//************void Check_Rxdata(){switch(Sci_Rx[0]){case 'm': //转速给定和转速在线更新 case 'v':{FlagRegs.bit.Vflag=1;if(Sci_Rx[1]=='-'){FlagRegs.bit.Sign1=0; //转速为负值spd_given1 = Sci_Rx_check(4,Sci_Rx);}else{FlagRegs.bit.Sign1=1; //转速为正值spd_given1 = Sci_Rx_check(3,Sci_Rx);}if(Sci_Rx[0]=='m'){FlagRegs.bit.Sign2=FlagRegs.bit.Sign1;FlagRegs.bit.Sign=FlagRegs.bit.Sign1;}break;}case 's': //启动{Sci_Tx[0]='a';Sci_Tx[1]='+';Sci_Tx[2]='0';Sci_Tx[3]='0';Sci_Tx[4]='0';Sci_Tx[5]='0';Sci_Tx[6]='0';Sci_Tx[7]='z';spd_given=spd_given1;Protect_Data();Motor_Start();FlagRegs.bit.Send=1;T_length=8;T_pointer=0;break;}case 't': //停止 {Motor_Stop();break;}default: break;}}//*******************// 串口接收/发送判断//******************SCI_CTL(){if((SciaTx_Ready() == 1) && (FlagRegs.bit.Send == 1))//发送数据准备好并且软件使能发送{if(FlagRegs.bit.Test==0) //SCI测通状态{SciaRegs.SCITXBUF = Sci_Rx[T_pointer];T_pointer++; //发送缓冲器数组指针+1if(T_pointer==R_length){FlagRegs.bit.Test=1;FlagRegs.bit.Send=0;T_pointer=0;}}else //SCI非测通状态{SciaRegs.SCITXBUF = Sci_Tx[T_pointer];T_pointer++; //发送缓冲器数组指针+1if(T_pointer==T_length){FlagRegs.bit.Send = 0;T_pointer=0;}if(T_pointer>=10){T_pointer=0;FlagRegs.bit.Send= 0;}}R_pointer=0;}#if !SCIA_INTif(SciaRx_Ready() == 1) //接收数据准备好{FlagRegs.bit.SendEnd=0;FlagRegs.bit.Send= 0;Sci_Rx[R_pointer] = SciaRegs.SCIRXBUF.all;R_pointer++;if(Sci_Rx[R_pointer-1]=='z'){R_length=R_pointer-1;FlagRegs.bit.Send= 1;FlagRegs.bit.SendEnd=1;if(FlagRegs.bit.Test==1){Check_Rxdata();R_pointer = 0;}}if(R_pointer== 10){R_pointer = 0;}}#endif}//****************//接收数据格式调整//****************unsigned int Sci_Rx_check(unsigned int i_Rx,unsigned int *p_Rx){unsigned long data_Rx;unsigned int *p_tmp_Rx=p_Rx+i_Rx;data_Rx=1000*(*p_tmp_Rx)+100*(*(p_tmp_Rx+1))+10*(*(p_tmp_Rx+2))+(*(p_tmp_Rx+ 3))-53328;return(data_Rx);}//****************//发送数据格式调整//****************char *Fen_Jie(signed int Send_Temp) {unsigned int Temp;char s1,s2,s3,s4;char String_Tmp[6]={0,0,0,0,0,'\0'}; if(Send_Temp< 0){String_Tmp[0]='-';Send_Temp=-Send_Temp;}else{String_Tmp[0]='+';}s1=((long)Send_Temp*2097)>>21;if(s1>=10) {s1=9;}Temp=Send_Temp-s1*1000;s2=((long)Temp*5253)>>19;if(s2>=10) {s2=9;}Temp=Temp-s2*100;s3=((long)Temp*3277)>>15;if(s3>=10) {s3=9;}s4=Temp-s3*10;if(s4>=10) {s4=9;}String_Tmp[1]=s1+48; //千位String_Tmp[2]=s2+48; //百位String_Tmp[3]=s3+48; //十位String_Tmp[4]=s4+48; //个位return(String_Tmp);}//**************// 数据发送//**************void Sci_Send(signed int sci_delay){//串口数据发送char *p_send=0;a2++;if((a2>=sci_delay)&&(FlagRegs.bit.Send==0)&&(FlagRegs.bit.SendEnd==1)) {p_send=Fen_Jie(spd_fd_q0);Sci_Tx[0]='a';Sci_Tx[1]=*p_send;Sci_Tx[2]='0';Sci_Tx[3]=*(p_send+1);Sci_Tx[4]=*(p_send+2);Sci_Tx[5]=*(p_send+3);Sci_Tx[6]=*(p_send+4);Sci_Tx[7]='z';FlagRegs.bit.Send=1;a2=0;}}//===================================================================== //电机状态控制//===================================================================== //*******************// 数据处理//******************Protect_Data(){if(spd_kp<=0)spd_kp=1; //转速环P参数else if(spd_kp>30000) spd_kp=30000;if(spd_ki<=0)spd_ki=1; //转速环P参数else if(spd_ki>30000) spd_ki=30000;if(id_kp<=0)id_kp=1; //转速环P参数else if(id_kp>30000) id_kp=30000;if(id_ki<=0)id_ki=1; //转速环P参数else if(id_ki>30000) id_ki=30000;EvaRegs.T1PR =7500; //矢量控制开关频率5K固定t1per=7500;EvaRegs.T1CON.all = 0X080C; //连续增减计数InitAdc_Eva();} //************//电机停止//************ Motor_Stop(){EvaRegs.CMPR1=0;EvaRegs.CMPR2=0;EvaRegs.CMPR3=0;EvaRegs.ACTR.all=0X0FFF;InitData();FlagRegs.bit.Openint=0;EvaRegs.T1CON.bit.TENABLE=0;EvbRegs.T3CON.bit.TENABLE=0;}//************//电机启动//************Motor_Start(){EvaRegs.ACTR.all=0X0999;FlagRegs.bit.Openint=1;t1per=7500;EvaRegs.T1PR =7500; //周期寄存器 5khzEvaRegs.T1CON.all = 0X080C; //连续增减计数EvbRegs.T3PR =0xffff; // 周期寄存器EvbRegs.T3CON.all = 0X170C; // 连续增减计数EvbRegs.EVBIMRA.all=0X0000; // T3下溢使能EvbRegs.EVBIFRA.all=0X0FFFF; // 清中断标志位GpioMuxRegs.GPBMUX.bit.CAP4Q1_GPIOB8=0; //将cap456设置为io口 GpioMuxRegs.GPBMUX.bit.CAP5Q2_GPIOB9=0;GpioMuxRegs.GPBMUX.bit.CAP6QI2_GPIOB10=0;cap2 = GpioDataRegs.GPBDAT.all & 0x0700; //记录cap4-6初始状态cap2 = cap2>>8;cap2 = cap2&0x0007;if(FlagRegs.bit.Sign==1) cap2=7-cap2;else cap2=cap2;GpioMuxRegs.GPBMUX.bit.CAP4Q1_GPIOB8=1; //将cap456设置为CAP口 GpioMuxRegs.GPBMUX.bit.CAP5Q2_GPIOB9=1;GpioMuxRegs.GPBMUX.bit.CAP6QI2_GPIOB10=1;EvaRegs.T1CON.bit.TENABLE=1;FlagRegs.bit.Vflag=1;}//===================================================================== //直流无刷电动机驱动双闭环主程序//===================================================================== //*****************//驱动主程序//*****************void bldc(){intruptcount++;speed();switch((int)cap2){case 4:{Ad(); //检测电流if(ia_fd<0) ia_fd=0; //保护speed_PI(); //转速PI调节Ia_PI(); //电流PI调节EvaRegs.ACTR.all = 0x0F3E; //ia+,ib-EvaRegs.CMPR1=COMP2;break;}case 5:{Ad(); //检测电流if(ia_fd<0) ia_fd=0; //保护speed_PI(); //转速PI调节Ia_PI(); //电流PI调节EvaRegs.ACTR.all = 0x03FE; //ia+,ic- EvaRegs.CMPR1=COMP2;break;}case 1:{Ad();if(ib_fd<0) ib_fd=0;ia_fd=ib_fd;speed_PI();Ia_PI();EvaRegs.ACTR.all = 0x03EF; //ib+,ic- EvaRegs.CMPR2=COMP2;break;}case 3:{Ad();if(ib_fd<0) ib_fd=0;ia_fd=ib_fd;speed_PI();Ia_PI();EvaRegs.ACTR.all = 0x0FE3; //ib+,ia- EvaRegs.CMPR2=COMP2;break;}case 2:{Ad();ia_fd=-ia_fd;if(ia_fd<0) ia_fd=0;speed_PI();Ia_PI();EvaRegs.ACTR.all = 0x0EF3; //ic+,ia- EvaRegs.CMPR3=COMP2;break;}case 6:{Ad();ib_fd=-ib_fd;if(ib_fd<0) ib_fd=0;ia_fd=ib_fd;speed_PI();Ia_PI();EvaRegs.ACTR.all = 0x0E3F; //ic+,ib-EvaRegs.CMPR3=COMP2;break;}default: break;}}//********************************//电流反馈//********************************void Ad(){char delay_zy=0;ia_fd=0,ib_fd=0; //AB相电流检测值清零 for(Iab_Data=0;Iab_Data<=5;Iab_Data++){ia[Iab_Data]=AdcRegs.RESULT0>>4;ib[Iab_Data]=AdcRegs.RESULT1>>4;if(Iab_Data==0){for(delay_zy=0;delay_zy<=10;delay_zy++) {;}}else if(Iab_Data==1){if(ia[0]>ia[1]){Temp_filter= ia[1];ia[1] = ia[0];ia[0] = Temp_filter;}if(ib[0]>ib[1]){Temp_filter= ib[1];ib[1] = ib[0];ib[0] = Temp_filter;}}else{if(ia[Iab_Data]>ia[1]){Temp_filter= ia[1];ia[1] = ia[Iab_Data];ia[Iab_Data] = Temp_filter;}else if(ia[Iab_Data]<ia[0]){Temp_filter= ia[0];ia[0] = ia[Iab_Data];ia[Iab_Data] = Temp_filter;}if(ib[Iab_Data]<ib[0]){Temp_filter= ib[0];ib[0] = ib[Iab_Data];ib[Iab_Data] = Temp_filter;}else if(ib[Iab_Data]>ib[1]){Temp_filter= ib[1];ib[1] = ib[Iab_Data];ib[Iab_Data] = Temp_filter;}}}ia_fd=(ia[2]+ia[3]+ia[4]+ia[5])>>2; ib_fd=(ib[2]+ib[3]+ib[4]+ib[5])>>2; ia_fd=ia_fd-2133;ib_fd=ib_fd-2150;}//********************************//转速反馈计算//********************************void speed(void){if((cap2 != cap1)&&(t2first==1)){if(cap_c!= 0){long2_tmp = 1953125/cap_c;spd_fd_q1 = long2_tmp;intruptcount=0;switch(cap2){case 5:{if(cap1==4) spd_fd_q1=-spd_fd_q1; break;}case 4:{if(cap1==6) spd_fd_q1=-spd_fd_q1; break;case 6:{if(cap1==2) spd_fd_q1=-spd_fd_q1; break;}case 2:{if(cap1==3) spd_fd_q1=-spd_fd_q1; break;}case 3:{if(cap1==1) spd_fd_q1=-spd_fd_q1; break;}case 1:{if(cap1==5) spd_fd_q1=-spd_fd_q1; break;}default:break;}BLDC_SPD[Spd_Data]=spd_fd_q1;if(Spd_Data==1)if(BLDC_SPD[0]>BLDC_SPD[1]){Temp_filter = BLDC_SPD[1];BLDC_SPD[1] = BLDC_SPD[0];BLDC_SPD[0] = Temp_filter;}}else{if(BLDC_SPD[Spd_Data]>BLDC_SPD[1]){Temp_filter= BLDC_SPD[1];BLDC_SPD[1] = BLDC_SPD[Spd_Data];BLDC_SPD[Spd_Data] = Temp_filter;}else if(BLDC_SPD[Spd_Data]<BLDC_SPD[0]) {Temp_filter= BLDC_SPD[0];BLDC_SPD[0] = BLDC_SPD[Spd_Data];BLDC_SPD[Spd_Data] = Temp_filter;}}Spd_Data++;if(Spd_Data>=10){Spd_Data=0;}cc++;if(cc>=3){cc=0;spd_fd_q0=(BLDC_SPD[2]+BLDC_SPD[3]+BLDC_SPD[4]+BLDC_SPD[5]+BLDC_SPD[6]+BLDC_ SPD[7]+BLDC_SPD[8]+BLDC_SPD[9])>>3;}cap1=cap2;}else{spd_fd_q0 = 0;}}else{if(intruptcount>=1500){intruptcount=0;spd_fd_q0=0;}else{spd_fd_q0=spd_fd_q0;}}if(t2first==0) t2first=1;}//********************************//转速调节器//********************************void speed_PI(void){unsigned int abs_spd=0;signed int spd_ki_bldc=1;speed_counter++;if(speed_counter>=10){speed_counter=0;if(FlagRegs.bit.Vflag==1) //转速给定更新{if(FlagRegs.bit.Sign1!=FlagRegs.bit.Sign2)//新转向和原有转向不同 {FlagRegs.bit.Zero =1; //换转向标志位置位spd_given2=spd_given; //缓存目标频率spd_given=0; //当前目标频率给定0}FlagRegs.bit.Vflag =0; //转速给定更新标志位清零FlagRegs.bit.Sign2=FlagRegs.bit.Sign1; //更新转向标志}if((spd_fd_q0==0)&&(FlagRegs.bit.Zero==1)) //当前给定频率,目标频率需要反向(电机需要从正转到反转){spd_given=spd_given2; //给定新的目标频率FlagRegs.bit.Zero=0; //换转向标志位清零FlagRegs.bit.Sign=FlagRegs.bit.Sign1; //给定新的转向}speed_e1 = speed_e2; //将本次误差用作下次使用speed_e2 = spd_given - abs(spd_fd_q0);abs_spd=abs(spd_given)>>2;if((abs(speed_e2))<abs_spd){spd_ki_bldc=spd_ki;}else{if(spd_given<100) spd_ki_bldc=12;//10*8else if(spd_given<150) spd_ki_bldc=10;else if(spd_given<200) spd_ki_bldc=8;else if(spd_given<250) spd_ki_bldc=6;else if(spd_given<300) spd_ki_bldc=5;else spd_ki_bldc=4;}long1_tmp= (long)spd_kp * (speed_e2 - speed_e1); long2_tmp= (long)spd_ki_bldc * speed_e2;u16_tmp1=(long1_tmp+long2_tmp)>>10;Idc_given2=Idc_given2+u16_tmp1;if(Idc_given2 > Idc_max) //限幅Idc_given2 = Idc_max;else if(Idc_given2 < Idc_min)Idc_given2 = Idc_min;}}//********************************//电流调节器//********************************void Ia_PI(void){Ia_e1 = Ia_e2; //将本次误差用作下次使用Ia_e2 = Idc_given2 - ia_fd;long1_tmp=(long)id_kp * (Ia_e2 - Ia_e1);long2_tmp=(long)id_ki * Ia_e2;u16_tmp1=(long1_tmp+long2_tmp)>>12;COMP2=COMP2+u16_tmp1;if(COMP2 < 0)COMP2 = 0;else if(COMP2 > (t1per-200))COMP2 = (t1per-200);}//===================================================================== //T1下溢中断子程序//===================================================================== interrupt void t1uf_int(void){IFR=0x0000; //中断标志位清零PieCtrl.PIEACK.all=0xffff;if(FlagRegs.bit.Openint==1) //控制程序准备开始运行{bldc();GpioDataRegs.GPACLEAR.bit.GPIOA11=1;Sci_Send(400);}EvaRegs.EVAIFRA.bit.T1UFINT=1; //T1下溢中断标志位清零EINT;}//=====================================================================// CAP4/5/6中断子程序//===================================================================== interrupt void cap_int(void){IFR=0x0000;PieCtrl.PIEACK.all=0xffff;GpioMuxRegs.GPBMUX.bit.CAP4Q1_GPIOB8=0; //将cap456设置为io口GpioMuxRegs.GPBMUX.bit.CAP5Q2_GPIOB9=0;GpioMuxRegs.GPBMUX.bit.CAP6QI2_GPIOB10=0;cap2 = GpioDataRegs.GPBDAT.all & 0x0700; //记录cap4-6初始状态cap2 = cap2>>8;cap2 = cap2&0x0007;if(FlagRegs.bit.Sign==1) cap2=7-cap2;else cap2=cap2;if(EvbRegs.EVBIFRC.bit.CAP4INT==1){cap_a=EvbRegs.CAP4FIFO;EvbRegs.EVBIFRC.bit.CAP4INT=1;}else if(EvbRegs.EVBIFRC.bit.CAP5INT==1){cap_a=EvbRegs.CAP5FIFO;EvbRegs.EVBIFRC.bit.CAP5INT=1;}else if(EvbRegs.EVBIFRC.bit.CAP6INT==1)cap_a=EvbRegs.CAP6FIFO;EvbRegs.EVBIFRC.bit.CAP6INT=1;}cap_c=cap_a-cap_b;if(cap_c<0) cap_c=cap_c+0xffff;cap_b=cap_a;GpioMuxRegs.GPBMUX.bit.CAP4Q1_GPIOB8=1; //将cap456设置为CAP口 GpioMuxRegs.GPBMUX.bit.CAP5Q2_GPIOB9=1;GpioMuxRegs.GPBMUX.bit.CAP6QI2_GPIOB10=1;EINT;}InitData(){char i;T_pointer=0; //发送数据数组指针R_pointer=0; //接收数据数组指针a2=0;for(i=0;i<8;i++){Sci_Rx[i]=0;Sci_Tx[i]=0;cap1=0; //前次换向标志位cap2=0; //本次换向标志位intruptcount=0; //定时器1下溢中断次数Idc_given2=0; //算得本次电流给定值speed_e1=0; //前次转速误差speed_e2=0; //本次转速误差Ia_e1=0; //前次电流误差Ia_e2=0; //本次电流误差t2over=0;t2first=0;COMP2=0; //装比较寄存器值speed_counter=0; //速度环计数器cap_a=0;cap_b=0;cap_c=0;for(i=0;i<10;i++){BLDC_SPD[i]=0;}}/////////////////////////////////////////////////////////////////////// // BLDC.c 程序结束////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 文件名: DSP28_Ev.c// 意义: DSP28 EV初始化/////////////////////////////////////////////////////////////////////// #include "DSP28_Device.h"void InitEv(void){//定时器T1初始化EvaRegs.T1PR =7500; //周期寄存器 5khzEvaRegs.T1CON.all = 0X080C; //连续增减计数EvaRegs.CMPR1=0; //比较寄存器初始化EvaRegs.CMPR2=0;EvaRegs.CMPR3=0;EvaRegs.ACTR.all=0X0FFF; //6PWM强制高CONA.all=0X8A00; //比较寄存器T1下溢重载CONA.bit.ACTRLD=2; //方式控制寄存器立即重载EvaRegs.DBTCONA.all=0X0FF4; //死区3.2usEvaRegs.T1CNT=0;EvaRegs.EVAIMRA.all=0X0200; //T1下溢使能EvaRegs.EVAIFRA.all=0X0FFFF; //清中断标志位//定时器T4初始化EvbRegs.T4PR = 60000; // 周期寄存器EvbRegs.T4CON.all = 0X0F0C; // 连续增减计数EvbRegs.EVBIMRB.all=0X0000; // T4中断不使能EvbRegs.EVBIFRB.all=0X0FFFF; // 清中断标志位}/////////////////////////////////////////////////////////////////////// // DSP28_Ev.c结束/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 文件名: DSP28_Sci.c// 意义: DSP28 SCI 初始化//////////////////////////////////////////////////////////////////////// #include "DSP28_Device.h"unsigned int * UART_MODE = (unsigned int *) 0x4010;void InitSci(void){// Initialize SCI-A:*UART_MODE = 0x44;EALLOW;GpioMuxRegs.GPFMUX.all = 0x0030;EDIS;SciaRegs.SCICCR.all = 0x07; //8位,无校验SciaRegs.SCICTL1.all = 0x03; //软件复位发送接收使能SciaRegs.SCIHBAUD = 0x01; //波特率9600B/S SciaRegs.SCILBAUD = 0x0E7;SciaRegs.SCICTL1.all = 0x23; //清除软件复位发送接收使能}//发送准备好int SciaTx_Ready(void){unsigned int i;if(SciaRegs.SCICTL2.bit.TXRDY == 1){i = 1;}else{i = 0;}return(i);}//接收准备好int SciaRx_Ready(void){unsigned int i;if(SciaRegs.SCIRXST.bit.RXRDY == 1){i = 1;}else{i = 0;}return(i);}///////////////////////////////////////////////////////////////////////////DSP28_Sci.c结束///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// 文件名: DSP28_SysCtrl.c// 意义: DSP28 系统控制寄存器初始化//////////////////////////////////////////////////////////////////////////// #include "DSP28_Device.h"void InitSysCtrl(void){Uint16 i;EALLOW;DevEmuRegs.M0RAMDFT = 0x0300;DevEmuRegs.M1RAMDFT = 0x0300;DevEmuRegs.L0RAMDFT = 0x0300;DevEmuRegs.L1RAMDFT = 0x0300;DevEmuRegs.H0RAMDFT = 0x0300;// Disable watchdog moduleSysCtrlRegs.WDCR= 0x0068;// Initalize PLLSysCtrlRegs.PLLCR = 0xA; //CLKIN=150M// Wait for PLL to lockfor(i= 0; i< 5000; i++){}// HISPCP/LOSPCP prescale register settings, normally it will be set to default valuesSysCtrlRegs.HISPCP.all = 0x0001; //高速时钟75MSysCtrlRegs.LOSPCP.all = 0x0002; //低速时钟37.5M// Peripheral clock enables set for the selected peripherals.SysCtrlRegs.PCLKCR.bit.EVAENCLK=1; //使能EVASysCtrlRegs.PCLKCR.bit.EVBENCLK=1; //使能EVBSysCtrlRegs.PCLKCR.bit.SCIENCLKA=1;//使能SCISysCtrlRegs.PCLKCR.bit.ADCENCLK=1; //使能ADC}///////////////////////////////////////////////////////////////////////////DSP28_SysCtrl.c结束//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 文件: DSP28_PieCtrl.c// 意义: DSP28 PIE 控制寄存器初始化///////////////////////////////////////////////////////////////////////// #include "DSP28_Device.h"void InitPieCtrl(void){// Disable PIE:PieCtrl.PIECRTL.bit.ENPIE = 0;// Clear all PIEIER registers:PieCtrl.PIEIER1.all = 0;PieCtrl.PIEIER2.all = 0;PieCtrl.PIEIER3.all = 0;PieCtrl.PIEIER4.all = 0;PieCtrl.PIEIER5.all = 0;PieCtrl.PIEIER6.all = 0;PieCtrl.PIEIER7.all = 0;PieCtrl.PIEIER8.all = 0;PieCtrl.PIEIER9.all = 0;PieCtrl.PIEIER10.all= 0;PieCtrl.PIEIER11.all= 0;PieCtrl.PIEIER12.all= 0;// Clear all PIEIFR registers:PieCtrl.PIEIFR1.all = 0;PieCtrl.PIEIFR2.all = 0;PieCtrl.PIEIFR3.all = 0;PieCtrl.PIEIFR4.all = 0;PieCtrl.PIEIFR5.all = 0;PieCtrl.PIEIFR6.all = 0;PieCtrl.PIEIFR7.all = 0;PieCtrl.PIEIFR8.all = 0;PieCtrl.PIEIFR9.all = 0;PieCtrl.PIEIFR10.all= 0;PieCtrl.PIEIFR11.all= 0;PieCtrl.PIEIFR12.all= 0;// Enable PIE:PieCtrl.PIECRTL.bit.ENPIE = 1;PieCtrl.PIEACK.all = 0xFFFF;}///////////////////////////////////////////////////////////////////////////DSP28_PieCtrl.c结束//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 文件名: DSP28_PieVect.c// 意义: DSP28 PIE 向量表初始化//////////////////////////////////////////////////////////////////////////// #include "DSP28_Device.h"const struct PIE_VECT_TABLE PieVectTableInit = {PIE_RESERVED, // Reserved spacePIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,// Non-Peripheral InterruptsINT13_ISR, // XINT13 or CPU-Timer 1 INT14_ISR, // CPU-Timer2DATALOG_ISR, // Datalogging interrupt RTOSINT_ISR, // RTOS interruptEMUINT_ISR, // Emulation interrupt NMI_ISR, // Non-maskable interrupt ILLEGAL_ISR, // Illegal operation TRAP USER0_ISR, // User Defined trap 0 USER1_ISR, // User Defined trap 1 USER2_ISR, // User Defined trap 2USER3_ISR, // User Defined trap 3 USER4_ISR, // User Defined trap 4 USER5_ISR, // User Defined trap 5 USER6_ISR, // User Defined trap 6 USER7_ISR, // User Defined trap 7 USER8_ISR, // User Defined trap 8 USER9_ISR, // User Defined trap 9 USER10_ISR, // User Defined trap 10 USER11_ISR, // User Defined trap 11 // Group 1 PIE VectorsPDPINTA_ISR, // EV-APDPINTB_ISR, // EV-Brsvd_ISR,XINT1_ISR,XINT2_ISR,ADCINT_ISR, // ADCTINT0_ISR, // Timer 0WAKEINT_ISR, // WD// Group 2 PIE VectorsCMP1INT_ISR, // EV-ACMP2INT_ISR, // EV-ACMP3INT_ISR, // EV-AT1PINT_ISR, // EV-AT1CINT_ISR, // EV-AT1UFINT_ISR, // EV-Arsvd_ISR,// Group 3 PIE Vectors T2PINT_ISR, // EV-A T2CINT_ISR, // EV-A T2UFINT_ISR, // EV-A T2OFINT_ISR, // EV-A CAPINT1_ISR, // EV-A CAPINT2_ISR, // EV-A CAPINT3_ISR, // EV-A rsvd_ISR,// Group 4 PIE Vectors CMP4INT_ISR, // EV-B CMP5INT_ISR, // EV-B CMP6INT_ISR, // EV-B T3PINT_ISR, // EV-B T3CINT_ISR, // EV-B T3UFINT_ISR, // EV-B T3OFINT_ISR, // EV-B rsvd_ISR,// Group 5 PIE Vectors T4PINT_ISR, // EV-B T4CINT_ISR, // EV-B T4UFINT_ISR, // EV-B T4OFINT_ISR, // EV-BCAPINT5_ISR, // EV-B CAPINT6_ISR, // EV-B rsvd_ISR,// Group 6 PIE Vectors SPIRXINTA_ISR, // SPI-A SPITXINTA_ISR, // SPI-A rsvd_ISR,rsvd_ISR,MRINTA_ISR, // McBSP-A MXINTA_ISR, // McBSP-A rsvd_ISR,rsvd_ISR,// Group 7 PIE Vectors rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,// Group 8 PIE Vectors rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,// Group 9 PIE Vectors SCIRXINTA_ISR, // SCI-A SCITXINTA_ISR, // SCI-A SCIRXINTB_ISR, // SCI-B SCITXINTB_ISR, // SCI-B ECAN0INTA_ISR, // eCAN ECAN1INTA_ISR, // eCANrsvd_ISR,rsvd_ISR,// Group 10 PIE Vectors rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,// Group 11 PIE Vectorsrsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,// Group 12 PIE Vectorsrsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,};void InitPieVectTable(void){int16 i;Uint32 *Source = (void *) &PieVectTableInit;Uint32 *Dest = (void *) &PieVectTable;EALLOW;for(i=0; i < 128; i++)*Dest++ = *Source++;EDIS;// Enable the PIE Vector TablePieCtrl.PIECRTL.bit.ENPIE = 1;}///////////////////////////////////////////////////////////////////////// //DSP28_PieVect.c结束////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 文件名: DSP28_Gpio.c// 意义: 初始化I/O///////////////////////////////////////////////////////////////////////// #include "DSP28_Device.h"void InitGpio(void){EALLOW;// Set GPIO A port pins, enable 6PWMGpioMuxRegs.GPAMUX.all=0x033F; // EVA PWM 1-6GpioMuxRegs.GPADIR.all=0xFF3F;GpioDataRegs.GPASET.bit.GPIOA11=1;GpioDataRegs.GPASET.bit.GPIOA14=1;//set GPIO F port pins,enable SCI for the communication with computer GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5=1; //SCI_COMPUTER_RX GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4=1; //SCI_COMPUTER_TX//set GPIO B port pins,enable CAP for the BLDCGpioMuxRegs.GPBMUX.bit.CAP4Q1_GPIOB8=1; //CAP4_CAPTURE MODE GpioMuxRegs.GPBMUX.bit.CAP5Q2_GPIOB9=1; //CAP5_CAPTURE MODE GpioMuxRegs.GPBMUX.bit.CAP6QI2_GPIOB10=1; //CAP6_CAPTURE MODE GpioMuxRegs.GPBDIR.bit.GPIOB8=0; //INPUT MODEGpioMuxRegs.GPBDIR.bit.GPIOB9=0; //INPUT MODEGpioMuxRegs.GPBDIR.bit.GPIOB10=0; //INPUT MODEEDIS;}///////////////////////////////////////////////////////////////////////// //DSP28_Gpio.c结束/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 文件名: DSP28_Adc.c// 意义: DSP28 ADC 初始化////////////////////////////////////////////////////////////////////////// #include "DSP28_Device.h"。