无刷直流电机驱动电路 dsp

合集下载

基于DSP的直流无刷电机控制

基于DSP的直流无刷电机控制

基于DSP的直流无刷电机控制【摘要】本文介绍了基于DSP的直流无刷电机控制技术。

在对无刷直流电机和DSP在电机控制中的应用进行了概述。

接着,详细讨论了基于DSP的直流无刷电机控制原理,DSP控制系统的设计与实现,DSP控制算法的优势,DSP控制系统的性能评估以及实验结果与分析。

总结了基于DSP的直流无刷电机控制的优势,并展望了未来的研究方向。

通过本文的研究,可以更好地了解DSP在直流无刷电机控制中的应用,为相关领域的工程师和研究人员提供有益的参考和启发。

【关键词】关键词:直流无刷电机控制、DSP、控制原理、控制系统设计、控制算法、性能评估、实验结果、优势、研究展望。

1. 引言1.1 无刷直流电机概述直流电机是一种常见的电动机类型,可以根据其励磁方式分为直流有刷电机和直流无刷电机。

无刷直流电机是一种不需要用碳刷来换向的电机,因此有较低的摩擦损耗和较长的使用寿命。

相比于有刷直流电机,无刷直流电机具有更高的效率和更稳定的性能。

无刷直流电机的控制需要通过控制器来实现,其中数字信号处理器(DSP)在电机控制中发挥着重要作用。

无刷直流电机具有高效、稳定的特性,而DSP在无刷直流电机控制中的应用使得电机的控制更加灵活和精确。

通过研究和应用基于DSP的直流无刷电机控制技术,可以进一步提高电机系统的性能和效率。

1.2 DSP在电机控制中的应用在无刷直流电机控制中,DSP可以实现闭环控制、速度控制、位置控制等功能。

通过精确的信号处理和数据计算,DSP可以实时监测电机的运行状态,并根据需要调整电机的转速和转矩,实现电机的精准控制。

DSP还可以实现智能控制算法,提高电机的能效和响应速度,使电机系统更加稳定可靠。

DSP在无刷直流电机控制中的应用,可以提高电机系统的性能和稳定性,减小系统的体积和功耗,同时简化系统的设计和开发流程。

随着DSP技术的不断成熟和发展,预计在未来的研究中将会有更多的创新和应用。

2. 正文2.1 基于DSP的直流无刷电机控制原理直流无刷电机是一种电磁旋转式电机,不同于传统的有刷直流电机,无需使用碳刷和电刷,因此具有体积小、效率高、寿命长等优点。

基于DSP的直流无刷电机控制

基于DSP的直流无刷电机控制

基于DSP的直流无刷电机控制随着科技的不断发展和进步,直流无刷电机在工业控制中的应用越来越广泛。

而直流无刷电机的控制技术也日益成熟,其中基于数字信号处理器(DSP)的控制技术更是备受关注。

本文将从直流无刷电机的工作原理和特点、DSP的基本原理及其在直流无刷电机控制中的应用等方面展开介绍,希望能够为相关领域的研究和应用提供一些参考。

一、直流无刷电机的工作原理和特点直流无刷电机是一种将电能转换为机械能的设备,它通过电磁感应原理实现动力传递。

与传统的直流有刷电机相比,直流无刷电机具有结构简单、寿命长、噪音小、效率高等特点,因此在工业生产中得到了广泛的应用。

直流无刷电机的工作原理是通过控制电机内部的电流来实现转子的定位和控制。

通常情况下,控制直流无刷电机需要知道电机的转子位置和速度,这需要使用一些传感器来获取相关信息。

而在控制方面,通常采用的是PWM控制技术,控制电机的速度和方向。

二、DSP的基本原理及其在直流无刷电机控制中的应用DSP(Digital Signal Processor,数字信号处理器)是一种专门用于数字信号处理的微处理器,它能够对数字信号进行高速处理,广泛应用于通信、音频、视频、医疗等领域。

在直流无刷电机控制中,DSP也有着广泛的应用。

DSP在直流无刷电机控制中的主要应用之一是用于控制电机的PWM信号生成。

通过DSP 可以实现精确的PWM信号生成,从而控制电机的速度和方向。

DSP还可以实时地获取电机的转子位置和速度信息,因此可以实现闭环控制,提高电机的控制精度和效率。

DSP还可以用于实现各种复杂的控制算法,例如磁场定位控制、矢量控制等。

这些控制算法可以提高电机的动态响应性能和稳定性,使电机在不同工况下都能够保持良好的控制效果。

基于DSP的直流无刷电机控制系统通常包括DSP模块、功率放大器模块、电机驱动器模块、传感器模块等几个部分。

DSP模块负责控制算法的实现、PWM信号的生成和输出,功率放大器模块负责放大DSP输出的PWM信号,电机驱动器模块负责将放大后的PWM信号传送给电机,传感器模块负责采集电机的转子位置和速度信息。

《DSP无刷直流电机控制器的设计》范文

《DSP无刷直流电机控制器的设计》范文

《DSP无刷直流电机控制器的设计》篇一一、引言随着科技的发展和自动化需求的提升,无刷直流电机作为一种高效率、低噪音、高扭矩输出的动力源,得到了广泛应用。

为了实现对无刷直流电机的精确、稳定控制,DSP(数字信号处理器)因其强大的数据处理和实时控制能力被广泛用于无刷直流电机控制器的设计。

本文将就DSP无刷直流电机控制器的设计进行详细的阐述。

二、DSP无刷直流电机控制器设计概述DSP无刷直流电机控制器是集成了DSP微处理器、传感器、功率驱动等部分的一种控制装置。

它能够根据电机的工作状态,实时调整电机的驱动电流,以实现电机的稳定运行。

在控制器设计中,应充分考虑到系统的实时性、稳定性和可靠性等因素。

三、DSP无刷直流电机控制器设计步骤1. 硬件设计:硬件设计是无刷直流电机控制器设计的基石。

首先,选择合适的DSP微处理器,确保其具有足够的处理能力和实时性。

其次,设计传感器电路,用于检测电机的状态和位置信息。

再次,设计功率驱动电路,用于驱动电机的运行。

最后,将各部分电路进行整合,形成完整的硬件系统。

2. 软件设计:软件设计是实现无刷直流电机精确控制的关键。

首先,编写DSP的初始化程序,设置DSP的工作模式和参数。

其次,编写电机控制算法,根据电机的状态和位置信息,实时调整电机的驱动电流。

最后,编写用户界面程序,方便用户对电机进行控制和监控。

3. 系统调试:在硬件和软件设计完成后,需要进行系统调试。

首先,对硬件电路进行测试,确保各部分电路正常工作。

其次,对软件程序进行调试,确保程序能够正确运行并实现预期的功能。

最后,对整个系统进行联调,确保系统的稳定性和可靠性。

四、DSP无刷直流电机控制器的特点1. 精确控制:DSP无刷直流电机控制器能够根据电机的状态和位置信息,实时调整电机的驱动电流,实现精确控制。

2. 高效能:DSP具有强大的数据处理能力和实时控制能力,能够确保电机的高效运行。

3. 稳定性好:通过软件控制和硬件电路的优化设计,可以确保系统的稳定性和可靠性。

基于DSP的直流无刷电机控制

基于DSP的直流无刷电机控制

基于DSP的直流无刷电机控制DSP技术(数字信号处理)已经在很多领域得到了广泛的应用,其中之一便是直流无刷电机的控制。

直流无刷电机的控制技术在工业自动化、机器人、电动汽车等领域都有重要的应用价值。

本文将重点介绍基于DSP的直流无刷电机控制技术。

1. 直流无刷电机基本原理直流无刷电机是利用电磁场力以及交流驱动电流来实现转子的旋转运动。

它由定子和转子两部分组成,定子和转子之间的转矩通过对控制电流的调节来实现。

传统的控制方法是利用PWM(脉冲宽度调制)来控制电流,从而控制电机的转速和转矩。

而基于DSP的直流无刷电机控制技术可以更精准地控制电流,进而实现更高效的电机控制。

DSP技术在直流无刷电机控制中的应用主要包括以下几个方面:(1)电流控制:DSP可以通过精确的采样和控制算法,实现对电机电流的精准调节。

可以根据电机的负载情况和所需转矩,动态调整控制电流,以实现更高效的功率输出和更稳定的运行。

(3)位置控制:基于DSP的直流无刷电机控制技术还可以实现对电机位置的闭环控制。

通过接入位置传感器或者利用编码器来实时监测电机的位置,并结合控制算法来实现更加精准的位置控制。

(4)故障检测和保护:DSP可以实现对电机运行过程中的异常情况的监测和检测,并及时采取措施来保护电机和系统的安全。

可以实现对过载、过流、过温等异常情况的检测和保护。

(1)DSP选择:需要选择性能稳定、控制精度高的DSP芯片,常用的有TI的TMS320系列,ADI的ADSP系列等。

(2)传感器选型:需要根据电机的控制需求,选择合适的位置传感器或者编码器,用于实时采集电机的位置、速度等参数。

(3)控制算法设计:需要设计合适的控制算法,包括电流控制、速度控制、位置控制等。

控制算法的设计需要兼顾性能、稳定性和实时性。

(4)系统架构设计:需要设计合理的系统架构,包括DSP和外围设备(传感器、电机驱动器、电源等)的连接和通信方式。

(5)软件开发:需要根据控制需求,开发相应的控制软件,包括控制算法、通信协议、故障处理等。

基于DSP的直流无刷电机控制

基于DSP的直流无刷电机控制

基于DSP的直流无刷电机控制直流无刷电机(BLDC)是一种通过电子方式实现转子初级磁场定向的电机。

相较于传统的有刷电机,BLDC具有高效率、高转矩密度、长寿命和低噪音的优势,因此被广泛应用于工业、交通、家电等领域。

基于数字信号处理器(DSP)的BLDC电机控制系统是一种高性能、高精度的控制方法。

其主要包括三个功能模块:速度闭环、电流闭环和定时器。

速度闭环是为了控制电机转速。

通过测量电机转子位置和速度来实现闭环控制,在每个控制周期内,DSP通过比较实际转速和设定转速来计算控制误差,并通过调整PWM(脉宽调制)信号的占空比来实现转速的闭环控制。

电流闭环是为了控制电机的功率输出。

在BLDC电机控制系统中,电机的相电流与相对应的电机转矩成正比关系。

通过测量和控制电机的相电流,可以实现闭环控制电机的输出功率。

通过调整PWM信号的占空比和频率来控制电机的相电流,并确保其达到设定的值。

定时器是控制整个控制流程的重要组成部分。

在BLDC电机控制系统中,定时器用来驱动PWM信号的生成和产生控制周期。

DSP通过定时器的计时信号来触发速度闭环和电流闭环的计算和控制。

基于DSP的BLDC电机控制系统还可以通过PID控制算法来实现更精确的速度和电流控制。

PID控制算法将实际值与设定值进行比较,并根据误差值来调整控制量,从而实现更快速、更准确的闭环控制。

基于DSP的BLDC电机控制系统是一种高效、高精度的控制方法。

通过速度闭环、电流闭环和定时器等功能模块的协调工作,可以实现对BLDC电机的精确控制,同时还可以利用PID控制算法等实现更精确的闭环控制。

这种控制方法适用于各种需要高精度、高效率的直流无刷电机应用中。

《DSP无刷直流电机控制器的设计》范文

《DSP无刷直流电机控制器的设计》范文

《DSP无刷直流电机控制器的设计》篇一一、引言随着现代工业的快速发展,电机控制技术已成为众多领域的关键技术之一。

无刷直流电机(BLDC)以其高效、低噪音、长寿命等优点,在工业、交通、医疗、家电等领域得到广泛应用。

而数字信号处理器(DSP)作为一种高性能的微处理器,为电机控制提供了更精确、更快速的解决方案。

因此,本文旨在探讨DSP无刷直流电机控制器的设计方法。

二、DSP无刷直流电机控制器设计概述DSP无刷直流电机控制器是一种基于DSP技术的电机控制器,它能够实现对无刷直流电机的精确控制。

设计DSP无刷直流电机控制器需要考虑到硬件电路设计、软件算法设计以及控制系统设计等多个方面。

其核心思想是通过DSP的强大处理能力,对电机的转速、转向、位置等参数进行实时监测和控制,以达到精确控制电机的目的。

三、硬件电路设计硬件电路设计是DSP无刷直流电机控制器的关键部分之一。

主要包括电源电路、电机驱动电路、信号采集电路等。

首先,电源电路为整个控制器提供稳定的电源,保证控制器的正常工作。

其次,电机驱动电路是控制电机运转的关键部分,需要考虑到电机的电压、电流等参数,以保证电机的正常运行。

最后,信号采集电路负责采集电机的转速、转向、位置等信号,为控制器的精确控制提供依据。

四、软件算法设计软件算法设计是DSP无刷直流电机控制器的另一关键部分。

主要包括控制算法设计、驱动程序设计等。

控制算法是控制器的核心,它需要根据电机的实际运行情况,实时调整电机的转速、转向等参数,以达到精确控制的目的。

常用的控制算法包括PID控制算法、模糊控制算法等。

驱动程序则是控制算法与硬件之间的桥梁,它需要根据硬件的特性,实现控制算法的硬件实现。

五、控制系统设计控制系统是DSP无刷直流电机控制器的核心部分,它需要对整个系统进行综合管理,保证系统的稳定性和可靠性。

控制系统设计主要包括系统架构设计、系统调试等。

系统架构设计需要考虑到系统的整体结构、功能模块的划分以及模块之间的通信方式等。

基于DSP的无刷直流电机控制方法

基于DSP的无刷直流电机控制方法

算法精度
改进算法,提高控制精度,减小 电机运行过程中的误差,提升电 机性能。
鲁棒性增强
增强控制算法的鲁棒性,减小外 部干扰对电机性能的影响,提高 系统的稳定性。
硬件设计优化
电路板布局优化
合理布置电路板上的元器 件,减小信号传输延时和 干扰,提高信号质量。
电源管理优化
优化电源电路设计,提高 电源稳定性和效率,降低 电源噪声对控制系统的影 响。
基于DSP的无刷直流电机控 制方法
汇报人: 2024-01-01
目录
• 引言 • 无刷直流电机原理 • DSP技术基础 • 基于DSP的无刷直流电机控制
方法 • 优化与改进 • 结论与展望
01
引言
研究背景与意义
研究背景
随着工业自动化和智能化的快速发展,无刷直流电机(BLDCM)因其高效、节能、高可靠性等优点 ,在许多领域得到了广泛应用。为了实现无刷直流电机的精确控制,需要研究先进的控制策略和方法 。
直流电机的控制中。
研究趋势
随着人工智能和机器学习技术的不断发展,基于深度学习、强化学习等机器学习算法的 无刷直流电机控制方法成为新的研究趋势。这些方法能够实现对电机的自适应、自主学 习控制,进一步提高电机的性能和智能化水平。同时,随着电力电子技术和传感器技术
的不断发展,无刷直流电机的控制精度和响应速度也将得到进一步提高。
定性。
无刷直流电机应用领域
01
02
03
工业自动化
无刷直流电机广泛应用于 各种自动化生产线、机器 人、数控机床等领域。
电动车
无刷直流电机在电动车领 域具有广泛的应用,如电 动自行车、电动摩托车、 电动汽车等。
家用电器
无刷直流电机也应用于家 用电器中,如空调、冰箱 、洗衣机等。

三相直流无刷电机DSP控制系统的设计

三相直流无刷电机DSP控制系统的设计

1、实现电机的平稳启动和停止; 2、对于不同的负载,电机速度能自动调整; 3、电机位置能够准确跟踪给定位置;
4、在电机运行过程中,能够实时监测电机电流、电压等参数。
参考内容
引言
随着电力电子技术的发展,直流无刷电机(DC Brushless Motor,简称 BLDC)因其高效、节能、维护方便等特点在许多领域得到了广泛应用。而数字信 号处理器(Digital Signal Processor,简称DSP)作为一种强大的实时信号处 理工具,为直流无刷电机控制系统的设计提供了新的解决方案。本次演示旨在探 讨基于DSP的直流无刷电机控制系统的设计与研究。
相关技术综述
直流无刷电机控制系统中,无位置传感器技术和全数字化控制技术日益受到。 无位置传感器技术通过算法估算出电机转子的位置,从而控制电机运转。全数字 化控制技术则利用DSP进行数字化处理,实现电机的精确控制。这两种技术的应 用大大提高了直流无刷电机的性能和可靠性。
系统设计
1、硬件设计
本系统的硬件部分主要包括电源模块、驱动模块、信号调理模块和DSP模块。 其中,电源模块为整个系统提供稳定的工作电压;驱动模块负责驱动电机的三相 绕组;信号调理模块负责采集电机转速等信号,并进行必要的调理;DSP模块作 为主控单元,负责实现各种控制算法。
三相直流无刷电机DSP控制系统的 设计
01 引言
03 参考内容
目录
02 需求分析
引言
随着电力电子技术和微控制器的发展,数字信号处理器(DSP)在电机控制 领域的应用越来越广泛。三相直流无刷电机作为一种先进的电机类型,具有效率 高、维护少、调速性能好等优点,被广泛应用于各种工业领域。本次演示将介绍 如何设计一个基于DSP的三相直流无刷电机控制系统,并对其进行详细阐述。

基于DSP的无刷直流电机驱动电路的设计

基于DSP的无刷直流电机驱动电路的设计

J I A N G S U U N I V E R S I T Y 基于DSP的无刷直流电机驱动电路的设计学院:电气信息工程学院专业:控制工程姓名:学号:2015年8 月基于DSP的无刷直流电机驱动电路的设计摘要:以TMS320F28335浮点型处理器为控制器,采用IR2136作为驱动芯片,详细设计了三相无刷直流电机的驱动电路,其中包括电源模块、信号隔离模块、三相全桥驱动电路及过流、过压保护电路等,并对电路中的关键参数进行了计算分析和选择。

Design of driver circuit for BLDCM based on DSPAbstract:A three-phase full bridge driver for BLDCM based on the DSP was introduced ,using the IR2136 chip,including the signal isolation module,power supplying circuits,three-phase inverting circuits and current sampling and protecting module.The key parameters of the driver was calculated and selected.关键词:三相无刷直流电机;驱动电路;IR2136;DSPKey words:three-phase BLDCM; driver circuit;IR2136;DSP随着电力电子技术和高性能永磁材料的发展,无刷直流电机的应用在航空航天、医疗、家电及自动化领域获得了迅猛的发展。

无刷电机驱动电路是数字控制电路和无刷直流电机联系的纽带,它采用功率电子开关和霍尔位置传感器代替有刷电机中的电刷和换相器,接收来自数字电路的控制信号,将电流分配给无刷电机定子上的U、V、W三相绕组[1]。

利用DSP控制直流无刷电机

利用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无刷直流电机控制器的设计》范文

《DSP无刷直流电机控制器的设计》范文

《DSP无刷直流电机控制器的设计》篇一一、引言随着现代工业的快速发展,电机控制技术已成为众多领域的关键技术之一。

无刷直流电机(BLDC)以其高效、低噪音、长寿命等特点在众多应用领域中崭露头角。

为了实现精确、稳定的电机控制,本文提出了一种基于DSP(数字信号处理器)的无刷直流电机控制器设计方法。

二、系统设计概述本设计采用DSP作为核心控制器,通过软件算法实现对无刷直流电机的精确控制。

系统主要由DSP控制器、电机驱动电路、传感器电路、电源电路等部分组成。

其中,DSP控制器负责接收传感器信号,进行算法处理后输出控制信号,驱动电机进行工作。

三、DSP控制器设计DSP控制器是本设计的核心部分,其性能直接影响到电机的控制效果。

在DSP选择上,我们应考虑处理速度、功耗、成本等因素,选择适合的DSP芯片。

DSP控制器的主要功能包括:1. 接收传感器信号:通过ADC(模数转换器)将传感器信号转换为数字信号,供DSP处理。

2. 算法处理:根据传感器信号,通过软件算法计算出电机的控制参数,如PWM(脉宽调制)信号的占空比等。

3. 输出控制信号:将计算出的控制参数通过PWM模块输出为控制信号,驱动电机进行工作。

四、电机驱动电路设计电机驱动电路是连接DSP控制器和电机的桥梁,其性能直接影响到电机的运行效果。

驱动电路应具备较高的驱动能力和较低的功耗。

同时,为了保护电机和控制器,驱动电路还应具备过流、过压等保护功能。

五、传感器电路设计传感器电路用于检测电机的运行状态,为DSP控制器提供反馈信号。

常见的传感器包括电流传感器、速度传感器等。

传感器电路应具备较高的精度和较低的噪声,以保证反馈信号的准确性。

六、电源电路设计电源电路为整个系统提供稳定的电源供应。

在设计中,应考虑电源的稳定性、效率、抗干扰能力等因素。

同时,为了降低系统的功耗,应采用低功耗的电源管理策略。

七、软件设计软件设计是DSP无刷直流电机控制器的关键部分。

在软件设计中,应采用合适的算法实现电机的精确控制。

基于DSP的直流无刷电机控制

基于DSP的直流无刷电机控制

基于DSP的直流无刷电机控制直流无刷电机(Brushless DC motor,BLDC)是一种使用电子器件来实现换向的电机。

相比传统的有刷直流电机,无刷电机具有更高的效率、更大的功率密度和更长的寿命。

在工业生产和家用电器中,无刷电机得到了广泛的应用。

直流无刷电机的控制主要包括转速控制和转矩控制。

转速控制可以通过改变电机输入电压的大小实现,而转矩控制可以通过改变电机驱动电流的大小实现。

在DSP控制下,可以根据电机的实时状态来调节输入电压和驱动电流,以实现对电机转速和转矩的精确控制。

在基于DSP的直流无刷电机控制中,首先需要设置一个控制周期,通常为几十毫秒。

在每个控制周期内,DSP实时读取电机的旋转角度和电流信息,并根据预设的控制算法进行计算。

根据控制算法得到的控制信号,DSP会实时生成PWM(脉宽调制)信号,将其输出给电机驱动器。

在控制算法方面,常用的方法有PID控制算法和FOC(Field-Oriented Control)控制算法。

PID控制算法是一种经典的控制方法,通过调节比例、积分、微分三个参数来实现对转速和转矩的控制。

而FOC控制算法则是一种更为精确的控制方法,它可以将电机的状态量分解为磁场定向轴和转矩轴两个分量,并对其进行独立控制。

在基于DSP的直流无刷电机控制中,还需要考虑到电机的动态响应。

电机的动态响应主要由电机的电感和电容决定,因此需要根据电机的参数来设置合理的控制增益和控制频率。

除了电机控制算法之外,还需要注意保护措施的设计。

在直流无刷电机控制中,常见的保护措施包括过流保护、过温保护和过压保护等。

这些保护措施可以通过DSP实时检测电机的状态来实现,一旦出现异常情况,DSP会及时采取相应的措施,以保护电机和驱动系统的安全运行。

基于DSP的直流无刷电机控制具有高效、精确和可靠的特点。

通过合理选择控制算法和调节参数,可以实现对电机转速和转矩的精确控制,并保护电机和驱动系统的安全运行。

基于DSP的无刷直流电机运动控制系统研究共3篇

基于DSP的无刷直流电机运动控制系统研究共3篇

基于DSP的无刷直流电机运动控制系统研究共3篇基于DSP的无刷直流电机运动控制系统研究1无刷直流电机(Brushless DC Motor, BLDC)是一种先进的电机驱动技术,目前广泛应用于各个领域,如汽车、航空、制造业、医疗设备、家用电器等。

随着微电子技术的不断发展,数字信号处理器(DSP)成为控制BLDC电机的主要芯片,因为DSP处理器可以提供高速、高精度的数字信号处理和控制算法,从而实现对BLDC电机的高效控制和优异性能。

基于DSP的无刷直流电机运动控制系统主要包括三个部分:1.硬件部分:包括BLDC电机、功率器件、电源模块、传感器模块和DSP处理器模块等。

BLDC电机是这个系统的核心部件,它由永磁转子、定子、霍尔效应传感器等组成。

功率器件包括驱动电路、继电器、电感电容等,它们主要用于控制电机的启停、方向、转速和转矩等。

电源模块包括直流电源、交流电源和电池等。

传感器模块包括霍尔效应传感器、码盘、温度传感器等,它们用于采集电机的位置、速度和温度等信息。

DSP处理器模块是控制系统的大脑,它接收传感器模块采集的数据,并根据特定的控制算法产生控制信号。

2.软件部分:包括控制算法和编程语言等。

控制算法是基于DSP处理器开发的,它可以分为开环控制和闭环控制两种。

开环控制是指在没有传感器反馈的情况下,直接根据经验公式控制电机的转速、转向和转矩等。

闭环控制是指根据传感器反馈的信息,采取反馈控制策略来控制电机的转速、转向和转矩等。

编程语言包括C语言、汇编语言、机器语言等,它们主要用于实现DSP处理器的控制算法和程序框架。

3.系统测试与优化部分:主要包括测试、诊断和优化等过程。

测试过程包括静态测试和动态测试两种。

静态测试时,通过输入一些命令和参数,观察电机的响应和输出情况。

动态测试是指电机在运动时进行测试,通过观察电机的转速、转向和转矩等参数,判断控制效果。

诊断过程是根据测试结果,对系统进行故障诊断和调试等。

直流无刷电机控制系统的DSP实现的开题报告

直流无刷电机控制系统的DSP实现的开题报告

直流无刷电机控制系统的DSP实现的开题报告一、选题的背景和意义直流无刷电机因为具有高效、低噪音、长寿命等特点,广泛地应用于自动控制领域中,如自动控制系统、机器人、自动化生产线等。

对于直流无刷电机来说,其控制方法非常关键,目前已经有多种控制方法,如基于模型的PID控制、模糊控制、神经网络控制等。

因此,如何采用高效而稳定的控制方法对直流无刷电机进行控制,是现代工业自动化技术的一个重要研究课题。

现有的直流无刷电机控制方法以电磁控制器为核心,利用PWM技术进行控制,这种方法容易出现交流干扰、噪声干扰等问题,且控制精度不够高,针对这一问题,我们采用数字信号处理(DSP)技术,对直流无刷电机进行控制,以实现控制精度的提高,抑制噪声干扰并保证系统稳定性。

二、选题的主要内容和技术路线本论文旨在研究直流无刷电机的DSP实现控制系统,实现对直流无刷电机的高效精准控制,主要内容和技术路线如下:1. 深入了解直流无刷电机的基本原理和工作模式,结合现有研究成果,分析直流无刷电机的特点与优势,制定控制方案,并选取合适的硬件进行控制实现。

2. 研究DSP系统的基本原理,了解其工作方式、特点与板卡结构等方面,选取合适的DSP控制器,设计并实现直流无刷电机控制系统。

3. 利用C语言编写控制程序,并嵌入DSP平台,完成PWM波生成、PID控制、速度控制等功能,在保证电机运转的同时精确调节各项参数,实现高效控制。

4. 进行实验验证控制系统的控制效果,并对其进行分析和评价,不断优化控制算法和调节参数,完善直流无刷电机控制系统。

三、预期目标和成果本文主要目标是通过DSP技术,实现对直流无刷电机的高效控制,达到以下预期目标和成果:1. 建立一套稳定可靠的直流无刷电机控制系统,可精准控制电机的转速、转向、负载等参数,提高电机的效率。

2. 在理论和实验验证的基础上,针对直流无刷电机控制系统进行分析和评价,探索其优化方法,为今后工业控制系统的发展提供理论依据和实践指导。

《DSP无刷直流电机控制器的设计》范文

《DSP无刷直流电机控制器的设计》范文

《DSP无刷直流电机控制器的设计》篇一一、引言随着现代工业的快速发展,电机控制技术已成为许多领域的关键技术之一。

无刷直流电机(BLDC)以其高效、低噪音、长寿命等优点,在工业自动化、机器人、电动汽车等领域得到了广泛应用。

DSP(数字信号处理器)以其强大的数据处理能力和高精度控制特性,成为了无刷直流电机控制器的理想选择。

本文将详细介绍DSP无刷直流电机控制器的设计。

二、系统设计概述DSP无刷直流电机控制器主要包含DSP主控芯片、电源电路、电机驱动电路、传感器接口电路、通信接口电路等部分。

设计目标为实现对无刷直流电机的精确控制,提高电机性能,满足各种应用场景的需求。

三、DSP主控芯片选型及电路设计DSP主控芯片是控制器的核心,其性能直接影响到整个系统的性能。

因此,在选择DSP主控芯片时,需考虑其处理速度、精度、功耗、成本等因素。

同时,为了确保系统的稳定性和可靠性,还需对DSP主控芯片进行合理的电路设计,包括电源电路、时钟电路、复位电路等。

四、电机驱动电路设计电机驱动电路是无刷直流电机控制器的关键部分,其性能直接影响到电机的运行性能。

设计时需考虑电机的额定电压、电流、功率等参数,以及驱动电路的效率、发热、电磁干扰等问题。

通常采用H桥驱动电路实现电机的正反转和调速。

五、传感器接口电路设计传感器用于检测电机的运行状态,如转速、位置等,为DSP 主控芯片提供反馈信息。

传感器接口电路的设计需考虑传感器的类型、供电电压、输出信号等参数,以及电路的抗干扰能力、精度等要求。

常见的传感器有光电编码器、霍尔传感器等。

六、通信接口电路设计为了实现与上位机或其它设备的通信,DSP无刷直流电机控制器需具备通信接口电路。

设计时需考虑通信协议、传输速率、抗干扰能力等因素,常见的通信接口有SPI、I2C、CAN等。

七、软件设计软件设计是DSP无刷直流电机控制器的关键部分,包括系统初始化、电机控制算法、通信协议等。

需根据具体应用场景和需求,编写合适的程序,实现对电机的精确控制。

基于DSP的无刷直流电机控制系统设计

基于DSP的无刷直流电机控制系统设计

基于DSP的无刷直流电机控制系统设计概述无刷直流电机(BLDC)是一种高性能、高效率的电机,在现代工业中得到了广泛应用。

在工业中,BLDC电机通常需要对转速、转矩、功率等参数进行精准的控制,以满足不同应用的需求。

为了实现BLDC电机的控制,我们需要一种高效、高精度的控制系统。

本文将介绍一种基于数字信号处理器(DSP)设计的BLDC电机控制系统。

这种控制系统具有高效、高精度、易于实现等特点。

DSP的基本原理DSP(数字信号处理器)是一种专门用于数字信号处理的微处理器。

它具有高速、多功能、易于编程等优点,可以广泛应用于通信、音频、图像处理等领域。

在BLDC电机控制系统中,DSP的作用主要是用于控制算法的计算,以及各种控制信号的生成。

由于BLDC电机的控制信号通常是PWM信号,因此在DSP中需要编写PWM生成算法,以实现对BLDC电机的控制。

BLDC电机控制原理在开始介绍BLDC电机控制系统的设计之前,我们需要了解一下BLDC电机的控制原理。

BLDC电机是一种三相交错绕组电机,通常使用六个分立的功率开关(MOSFET或IGBT)控制三个相位的电流。

BLDC电机的控制原理是通过控制功率开关的开关时间,以控制电流的大小和方向。

BLDC电机的转速可以通过控制功率开关的开关时间和电流大小来实现。

常用的BLDC电机控制方式有三种:正常反相控制、霍尔传感器反馈控制和无霍尔传感器反馈控制。

基于DSP的BLDC电机控制系统设计在基于DSP的BLDC电机控制系统中,系统主要由三个部分组成:DSP处理器、PWM信号输出电路和功率输出电路。

DSP处理器:该处理器是BLDC电机控制系统的中央处理器,用于控制算法的计算和PWM信号输出的控制。

常用的DSP处理器有TI的TMS320F28xx系列、Freescale的MC56F80xx系列等。

PWM信号输出电路:该部分用于产生PWM信号,并提供给BLDC电机的功率输出电路。

PWM信号输出电路通常由一组逻辑门、驱动电路和功率晶体管组成。

《DSP无刷直流电机控制器的设计》范文

《DSP无刷直流电机控制器的设计》范文

《DSP无刷直流电机控制器的设计》篇一一、引言随着科技的不断发展,无刷直流电机因其高效、稳定、低噪音等优点,在工业、航空、医疗等领域得到了广泛应用。

为了更好地控制无刷直流电机,DSP(数字信号处理器)无刷直流电机控制器应运而生。

本文将详细介绍DSP无刷直流电机控制器的设计原理、方法及优势。

二、DSP无刷直流电机控制器的基本原理DSP无刷直流电机控制器是一种基于DSP技术的电机控制器,通过控制电机的电流、电压等参数,实现对无刷直流电机的精确控制。

其基本原理包括电机驱动、信号采集、控制算法和通信接口等部分。

1. 电机驱动:DSP无刷直流电机控制器通过驱动电路,将电源的直流电能转换为电机的机械能,实现电机的运动。

2. 信号采集:控制器通过传感器采集电机的电流、电压、速度等信号,为控制算法提供必要的输入。

3. 控制算法:DSP无刷直流电机控制器采用先进的控制算法,如PID(比例-积分-微分)控制、模糊控制等,实现对电机的精确控制。

4. 通信接口:控制器具有多种通信接口,如CAN、RS485等,方便与上位机或其他设备进行数据交换。

三、DSP无刷直流电机控制器的设计方法DSP无刷直流电机控制器的设计主要包括硬件设计和软件设计两部分。

1. 硬件设计:(1)主控芯片选择:选择性能稳定、处理速度快的DSP芯片作为主控芯片。

(2)电源电路设计:设计稳定的电源电路,为控制器提供可靠的电源。

(3)驱动电路设计:设计合理的驱动电路,实现电机的高效驱动。

(4)传感器接口设计:设计传感器接口电路,实现信号的采集与传输。

(5)通信接口设计:根据需要设计相应的通信接口电路。

2. 软件设计:(1)操作系统选择:选择适合DSP芯片的操作系统,如uC/OS等。

(2)驱动程序开发:编写驱动程序的代码,实现硬件的初始化、配置和控制。

(3)控制算法实现:根据控制需求,编写控制算法的代码,实现电机的精确控制。

(4)通信协议开发:编写与上位机或其他设备进行数据交换的通信协议。

基于DSP的无刷直流电机控制系统设计

基于DSP的无刷直流电机控制系统设计

基于DSP的无刷直流电机控制系统设计摘要:无刷直流电机(BLDC)由于其高效率、高功率密度和长寿命等优点,已广泛应用于各种领域。

本文基于数字信号处理器(DSP)设计了一种无刷直流电机控制系统,包括电机驱动器、速度控制和位置控制等关键组成部分。

通过优化控制算法和调整参数,实现了无刷直流电机的高精度、高性能控制。

试验结果表明,所设计的控制系统在速度跟踪、负载响应和运行平稳性等方面表现出良好的性能。

关键词:无刷直流电机;DSP;数字信号处理器;电机驱动器;速度控制;位置控制一、引言无刷直流电机由于其结构简易、寿命长、功率密度高和效率高等优点,逐渐替代了传统的有刷直流电机,广泛应用于机械、汽车、电子设备等领域。

无刷直流电机控制系统的设计对于提高系统的性能和稳定性至关重要。

本文基于数字信号处理器(Digital Signal Processor,DSP)的强大计算和实时处理能力,设计了一种高精度、高性能的无刷直流电机控制系统。

二、无刷直流电机控制系统设计1. 电机驱动器设计电机驱动器是控制无刷直流电机运行的关键部件。

本文接受了一种三相桥式驱动器,能够实现对电机相序的控制。

控制器通过控制驱动器的工作周期和占空比,将直流电源转换为适时的三相沟通电源,驱动无刷直流电机运动。

2. 速度控制设计速度控制是无刷直流电机控制系统的一个重要功能。

本文接受了一种基于比例积分(Proportional Integral,PI)控制器的速度控制算法。

起首,通过测量电机的转速反馈信号,得到当前转速与目标转速之间的误差。

然后,通过比例项和积分项计算控制量,并通过控制器调整驱动器的占空比,使得误差趋近于零。

3. 位置控制设计位置控制是无刷直流电机控制系统的另一个重要功能。

本文接受了一种基于比例积分微分(Proportional Integral Derivative,PID)控制器的位置控制算法。

起首,通过测量电机的位置反馈信号,得到当前位置与目标位置之间的误差。

DSP无刷直流电动机驱动控制程序

DSP无刷直流电动机驱动控制程序

DSP无刷直流电动机驱动控制程序————————————————————————————————作者:————————————————————————————————日期: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;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;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;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于 DSP 的无刷直流电机控制系统的设计2010-1-13 22:24:00 来源:摘 要:介绍了以高性能 TMS320F2812 DSP 芯片为核心的无刷直流电机控制系统的设 计和实现,主要包括系统硬件电路的主要构成,电机的控制策略及软件结构。

实验 表明,该系统结构简单紧凑,控制精度高,具有良好的静态和动态性能。

关键词:无刷直流电机;TMS320F2812;控制系统 Design of Control System of Brushless DC Motor Based on DSP WANG Chen-yang, ZHANG Qi, XIONG Jiu-long Abstract: The design and implementation of brushless DC motor control system based on high performance DSP TMS320F2812 is introduced in this paper, it is made up of three aspects, the main structure of system hardware, the strategy of motor controlling and software structure。

Experimental results show that the system has a simple and compact structure,high control precision and good dynamic and static characteristics. Key Words:brushless DC motor;TMS320F2812;control system 1. 引言 无刷直流电机利用电子换向器取代了传统直流电机中的机械电刷和机械换向器, 因此不仅保留了直流电动机运行效率高和调速性能好等优点, 又具有交流电动机的结 构简单、运行可靠、维护方便等优点。

由于不受机械换向限制,易于做到大容量、高 转速,目前在航天、军工、数控、冶金、医疗器械等领域已得到大量应用。

TMSF2812 DSP 是 TI 公司新推出的基于 TMS320C2xx 内核的定点数字信号处理器。

器件上集成了 多种先进的外设,具有灵活、可靠的控制和通信模块,完全可以采用单芯片实现电机 控制系统的控制和通信功能,使得电机控制系统简单化、模块化,为电机及其他运动 控制领域应用的实现提供了良好的平台。

本文设计和实现了基于 TI 公司 TMS320F2812 DSP 芯片的无刷直流电机控制系统,整个系统结构紧凑,功能完善。

2. 系统硬件设计 系统的硬件框图如图 1 所示,可以看出基本上包括一个以 TMS320F2812 DSP 为核 心的 DSP 控制板,一块配套的功率驱动板和一台无刷直流电机。

图 1 系统硬件框图 2.1 控制部分硬件设计 控制板部分以 TMS320F2812 为核心,加上一部分外围电路及接口构成。

实现的主 要功能是控制指令的接收和执行,速度信号的接收和计算处理,电流采样信号接收和 转换,速度闭环和电流闭环控制算法的执行等。

对电机的控制主要使用 F2812 片上的两个电机控制专用外设——EVA 和 EVB。

利 用通用定时器 T1 配合 PWM 发生器来产生驱动功率器件所需的六路 PWM 信号,通过 GPIO 接口将三路电机霍尔传感器信号输入捕获单元,从而获取三个转子的位置,进 而控制电机的换相和进行电机转速的计算。

两个 12 位 AD 模块对相电流信号 Iphase 和输入的速度调节电压信号 Vref 进行转换和存储,分别作为电流环的反馈信号和速 度环的参考信号。

通过片上的通用输入输出接口(GPIO),实现与功率驱动部分的连 接,输出启动停止信号,正反转信号,紧急制动信号等,同时接收输入的保护信号, 故障信号等。

通过片上的 SCI 模块实现与计算机的通信,接收上位机的控制指令。

控制部分硬件结构如图 2 所示。

图 2 控制板电路框图 2.2 功率驱动部分硬件设计 功率驱动部分的硬件电路,主要由前置驱动芯片和六个功率 MOSEFET 管组成,实 现对控制部分传送过来的换相信息的处理和 PWM 信号的隔离放大,控制功率 MOSFET 管的导通和关断,以此来控制电机的工作状态和速度。

除此之外,还有电源电路,电 流检测电路, 过流保护和紧急制动电路等辅助电路, 以及与电机和控制板的接口电路。

前置驱动芯片采用的是 IR 公司的 MOSFET 驱动芯片 IR2131,具有集成度高、可 靠性好、速度快、过流欠压保护、调试方便等特点。

IR2131 内部设计有过流、过压 及欠压保护。

功率驱动电路采用 24V 供电,驱动电路与电机的连接采用三相全桥方式,电机工 作在三相六状态模式下。

以任一时刻电机只有两相导通的方式来控制换流元件。

PWM 调制的方式是软斩波方式,即导通时下桥臂功率管始终保持开状态,上桥臂功率管的开关由 PWM 信号决定。

功率开关管采用 HITACHI 公司的集成功率开关器件 6AM15,其 内部集成 3 个 N 型 MOSFET 管和 P 型 MOSFET 管,构成三相全桥功率开关电路。

与采用 六个分立 MOSFET 管相比,有利于提高集成度,减少电路板面积,增加可靠性。

每个 MOSFET 管自带超快恢复二极管,在 MOSFET 管关闭期间起反向续流作用。

功率驱动部分电路框图如图 3 所示。

图 3 功率主回路电路框图 3. 系统控制策略及软件设计 3.1 系统控制策略 由无刷直流电机的数学模型可知,其转速基本上跟电压成正比,转矩基本上和相 电流成正比。

为了达到控制精度和动态性能,本系统选用了转速、电流双闭坏调速系 统。

电流环采用 PI 调节器,速度环采用遇限削弱积分的积分分离 PI 控制算法。

它具 有良好的起动和抗干扰性能,可以满足本系统的需要。

控制系统框图如图 4 所示。

图 4 无刷直流电机转速、电流闭环控制系统 在此控制方案中,霍尔传感器的信号加到 TMS320F2812 的捕获单元端。

将捕获端 设置为 I/O 口,然后采集捕获单元的电位情况。

根据捕获单元的电位情况可以判断 电机处于那个区间。

根据两次捕获的时间可以计算出电机运行速度。

此速度作为速度 参考值的反馈量,然后经过速度 PI 调节后可以得到参考电流 Iref。

另外通过电流检 测电路可以得到相电流 Iphase 信号,此信号通过 A/D 转换后作为参考电流 Iref 的反 馈量,经过电流 PI 调节后,得到的输出量调节输出的 PWM 信号的占空比,用此 PWM 信号接到驱动端.这样可以根据电机运行的情况而调节 MOSFET 管的导通时间达到控 制电机转速的目的。

3.2 软件设计 根据系统的控制策略,可以得出整个控制系统软件由主程序和 INT3 中断服务子程序所组成。

流程图如图 5 所示 。

图 5 系统软件流程图 软件采用模块化设计。

在主程序中,执行初始化模块,主要完成系统时钟、看门 狗、GPIO、T3 中断、事件管理器的各个控制寄存器及其中断等的设置,以及软件中 个变量的初始化。

执行完初始化后,系统经入循环等待 T3 中断。

在 INT3 中断服务程序中,主要执行以下几个模块: (1)A/D 转换模块:利用 DSP 内部的 A/D 转换单元完成相电流的 A/D 转换。

(2)换相控制模块:利用捕获的三个霍尔传感器的状态,根据换相逻辑控制功 率 MOSFET 管的换相。

(3)PWM 波形发生模块:主要是通过设置 DSP 内部事件管理器模块的 PWM 波形 发生器,将通用定时器 T1 设置成连续升序计数模式,对应 20kHz 的 PWM 频率,计数 周期设成 50μ s。

然后根据电流环输出的占空比对三个全比较单元的比较寄存器值进 行刷新。

同时,通过查表法,获得当前换相指针所对应的 ACTR(全比较动作控制寄 存器)值,并送到 ACTR 寄存器,完成对 PWM1~PWM6 引脚状态的定义。

(4)数字 PID 模块:改模块实现数字 PID 算法,对转速误差和电流误差进行调 节计算,控制 PWM 信号的占空比。

4.结论: 为了验证和分析控制系统的性能, 我们采用了一台 Maxon 精密电动机公司研制的 稀土永磁无刷直流电机作为样机进行试验。

该样机额定功率 150W,额定转速 10000n/s。

结果表明采用 TMS320F2812 实现无刷直流机控制系统,结构简单易于实现复杂的控制规律以提高系统性能。

采用方波和 PWM 方式利于减少力矩波动改善低速性 能,能够取得良好的控制精度、动态性能和较宽的调速范围,实现实时控制。

同时系 统结构简单,运行可靠,具有较高的使用价值。

本文作者创新点: 采用新型高性能 DSP 器件 TMS320F2812 为基础构成无刷直流电 机控制系统。

采用转速和电流双闭环调速策略,速度环采用遇限削弱积分的积分分离 PI 控制算法。

采用了集成功率元件 6AM15 作为功率开关器件。

参考文献: 1.姚嘉,刘刚,房建成. 控制力矩陀螺用高速高精度无刷直流电机控制系统.微计 算机信息 2005,9-1:3-5 1. 张琛.直流无刷电动机原理及应用北京:机械工业出版社,1996 2. 苏奎峰,吕强.TMS320F2812 原理与开发.北京:电子工业出版社,2006 3 . BLDC3-1 system documentation: sensored control of 3phase brushless DC motor. Houston, Tex, 2005。

相关文档
最新文档