AN957
使用 dsPIC30F2010 控制带传感器的 BLDC 电机
著者: Stan D' Souza
Microchip Technology
图 1:
BLDC 换相图
HALL R
HALL Y
HALL B
导通
霍尔状态
RYB
60o
Q3,Q5Q1,Q5Q1,Q6Q2,Q6Q2,Q4Q3,Q4Q3,Q5
Q1,Q5Q1,Q6
5
4
6
2
3
1
5
4
6
通过检测霍尔传感器,可以得到一个 3 位编码,编码值
的范围从1 到6。每个编码值代表转子当前所处的区间。
从而提供了需要对哪些绕组通电的信息。因此程序可以
使用简单的查表操作来确定要对哪两对特定的绕组通电
以使转子转动。
注意状态 “0”和 “7”对于霍尔效应传感器而言是无
效状态。软件应该检查出这些值并相应地禁止 PWM。
变化通知输入
灵活使用上述的技巧,可以将霍尔效应传感器连接到
dsPIC30F2010 的输入引脚上,来检测变化 (变化通知
(Change Notification, CN)输入)。当这些引脚上的
输入电平发生变化时,就会产生中断。在 CN 中断服务
程序 (Interrupt Service Routine, ISR)中,由用户应
用程序读取霍尔效应传感器的值,用以计算偏移量并查
表,来正确地驱动 BLDC 电机的绕组。
引言
dsPIC30F2010 是一款专门为嵌入式电机控制应用设计
的 28 引脚 16 位 MCU。它主要是为交流感应电机(AC
Induction Motor, ACIM)、无刷直流电机 (Brushless
DC,BLDC)和普通直流电机这些典型的电机类型而专
门设计的。以下是 dsPIC30F2010 的一些主要特性:
• 6 个独立或 3 对互补的电机控制专用 PWM 输出。
• 6 输入、采样速率为 500Ksps 的 ADC,可同时采
样最多 4 路输入。
• 多种串行通信:UART、 I2C™ 和 SPI
• 小型封装:6 × 6 mm QFN,适用于嵌入式控制
应用
• DSP 引擎可实现控制环的快速响应。
在本应用笔记中,我们将讨论如何使用 dsPIC30F2010
来控制带传感器的 BLDC 电机。欲知 BLDC 的详细工作
原理以及 BLDC 电机运行和控制的一般信息,请参阅
AN901_CN。本应用笔记讨论了使用 dsPIC30F2010 控
制 BLDC 电机的具体实现,而对 BLDC 电机的细节涉及
较少。
BLDC 电机
BLDC 电机基本是内外倒置的直流电机。在一般直流电
机中,定子是永磁体。转子上有绕组,对绕组通电。通
过使用换向器和电刷将转子中的电流反向来产生旋转的
或运动的电场。与之相反,在 BLDC 电机中绕组在定子
上而转子是永磁体。“内外倒置的直流电机”这一称谓
由此得名。
要使转子转动,必须存在旋转电场。一般来说,三相
BLDC电机具有3相定子,同一时刻为其中的两相通电,
以产生旋转电场。此方法相当容易实现,但是为了防止
永磁体转子被定子锁住,在知道转子磁体的精确位置的
前提下,必须以特定的方式按顺序为定子通电。位置信
息通常用霍尔传感器检测转子磁体位置获得,也可采用
轴 角编 码 器 方 式获 得。对 于 典 型的 三 相 带 传 感 器 的
BLDC 电机,有 6 个不同的工作区间,每个区间中有特
定的两相绕组通电。如图 1 所示。
© 2005 Microchip Technology Inc.
DS00957A_CN第 1 页
AN957
电机控制脉宽调制 (MCPWM)
使用上面的方法可以使 BLDC 电机全速旋转。然而,为
了使 BLDC 电机速度可变,必须在两相绕组的两端加上
可变电压。从数字化的语言来讲,就是加在 BLDC 电机
绕组上的 PWM 信号的不同占空比可以获得可变电压。
dsPIC30F2010 有六个由 PWM 信号驱动的 PWM 输出。
如图 2 所示,通过使用六个开关、IGBT 或 MOSFET,
可以将三相绕组驱动为高电平、低电平或根本不通电。
例如,当绕组的一端连接到高端驱动器时,就可在低端
驱动器上施加占空比可变的 PWM 信号。这与将 PWM
信号加在高端驱动器上,而将低端驱动器连接到 VSS 或
GND 的作用相同。一般更喜欢对低端驱动器施加 PWM
信号。
图 2:电机驱动电路与绕组连接示意图
+V
1H
2H
3H
三相
负载
1L
2L
3L
PWM 信号 由 dsPIC30F2010 的电 机控 制 (Motor
Control,MC)专用 PWM 模块提供。MCPWM 模块是
专为电机控制应用而设计的。(阅读本节时,请参阅
图 3。)
MCPWM 有一个专用的 16 位 PTMR 时基寄存器。此定
时器每隔一个由用户定义的时间间隔进行一次递增计
数,该时间间隔最短可以为 TCY。通过选择一个值并将
它装入 PTPER 寄存器,用户可以决定所需的 PWM 周
期。每个 TCY, PTMR 与 PTPER 作一次比较。当两者
匹配时,开始一个新的周期。
控制占空比的方法与此类似,只需在三个占空比寄存器
中装入一个值即可。与周期比较不同,每隔 TCY/2 就将
占空比寄存器中的值与 PTMR 进行一次比较 (即,比
较的频率是周期比较的两倍)。如果PTMR的值与PDCx
的值相匹配,那么对应的占空比输出引脚就会根据选定
的 PWM 模式驱动为低电平或高电平。通过占空比比较
产生的三个输出将被分别传输给一对互补的输出引脚,
其中一个引脚输出为高电平,而另一个引脚输出为低电
平,反之亦然。这两个输出引脚也可以被配置为独立输
出模式。当驱动为互补输出时,可以在高电平变低与低
电平变高之间插入一段死区。死区是由硬件配置的,最
小值为 TCY。插入死区可以防止输出驱动器发生意外的
直通现象。
DS00957A_CN第 2 页
© 2005 Microchip Technology Inc.
图 3:
PWM 框图
PWMCON1
PWMCON2
PWM 使能和模式控制 SFR
DTCON1
死区时间控制 SFR
FLTACON
FLTA 引脚控制 SFR
OVDCON
PWM 手动
控制 SFR
PWM 发生器 #3
PDC3 缓冲器
PDC3
比较器
PWM 发生器 #2
PWM 发生器 #1
线
总
据
数
位
6
1
PTMR
比较器
PTPER
PTPER 缓冲器
PTCON
AN957
通道 3 死区
发生器和
改写逻辑
通道 2 死区
发生器和
改写逻辑
通道 1 死区
发生器和
改写逻辑
输出
驱动器
模块
PWM3H
PWM3L
PWM2H
PWM2L
PWM1H
PWM1L
FLTA
特殊事件
后分频器
特殊事件触发信号
比较器
SEVTCMP
SEVTDIR
PTDIR
PWM 时基
注:为了明了起见没有给出 PWM 发生器 #1 和 #2 的细节。
© 2005 Microchip Technology Inc.
DS00957A_CN第 3 页
AN957
可以将 MCPWM 模块配置为多种模式。其中边沿对齐的输
出模式可能是最常见的。图 4 描述了边沿对齐的 PWM 的
工作原理。在周期开始时,所有输出均驱动为高电平。随
着 PTMR 中值的递增,一旦该值与占空比寄存器中的值发
生匹配就会导致对应的占空比输出变为低电平,从而表示
该占空比结束。PTMR 寄存器的值与PTPER 寄存器的值匹
配导致一个新的周期开始,所有输出变为高电平以开始一
个全新的周期。
图 4:
边沿对齐的 PWM
从 PDCx 中重载新占空比
PTPER
PDC1
PDC2
0
PWM1H
PWM2H
占空比
周期
还可以将 MCPWM 设置为其它模式:中心对齐的
PWM 和单个 PWM。由于它们不用于控制 BLDC 电
机,在此将不对这些模式进行讨论。欲知有关这些模式
的详细信息,请参阅 《dsPIC30F 系列参考手册》
(DS70046C_CN)。
改写是本应用中使用的 MCPWM 的一个重要特征。改
写控制是 MCPWM 模块的最后级。它允许用户直接写入
OVDCON 寄存器并控制输出引脚。OVDCON 寄存器中
有两个 6 位字段。这两个字段中的每一位对应于一个输
出引脚。 OVDCON 寄存器的高字节部分确定对应的输
出引脚是由 PWM 信号驱动 (当置为 1 时) ,还是
由OVDCON 寄存器低字节部分中的相应位驱动为有效/
无效(当置为 0 时)。此功能允许用户使用 PWM 信号,
但是并不驱动所有输出引脚。对于 BLDC 电机,相同的
值被写入所有 PDCx 寄存器。
PTMR 中的值
图 5:
PWM 输出改写示例
状态
1
2
3
4
根据 OVDCON 寄存器中的值,用户可以选择哪个引脚
获得 PWM 信号以及哪个引脚被驱动为有效或无效。控
制带传感器的 BLDC 时,必须根据由霍尔传感器的值所
指定的转子位置对两相绕组通电。在 CN 中断服务程序
中,首先读霍尔传感器,然后将霍尔传感器的值用作查
找表中的偏移量,以找到对应的将要装入 OVDCON 寄
存器的值。表 1和图 5说明了如何根据转子所处的区间
将不同的值装入 OVDCON 寄存器,从而确定需要对哪
些绕组通电。
表 1:
状态
PWM 输出改写示例
OVDCON<15:8>
OVDCON<7:0>
1
2
3
4
00000011b
00110000b
00111100b
00001111b
00000000b
00000000b
00000000b
00000000b
PWM3H
PWM3L
PWM2H
PWM2L
PWM1H
PWM1L
注:
在状态 1- 4 之间切换的时间由用户软件控制。通
过向 OVDCON 写入新值控制状态切换。本例中
PWM 输出工作在独立模式。
DS00957A_CN第 4 页
© 2005 Microchip Technology Inc.
硬件描述
图 6 中的框图说明了如何使用 dsPIC30F2010 驱动
BLDC 电机。如需详细的原理图,请参阅附录 C。
图 6:
硬件框图
dsPIC30F2010
PWM3H
PWM3L
PWM2H
PWM2L
PWM1H
PWM1L
BLDC
MOSFET
驱动电路
AN2
CN5
CN6
CN7
给定
霍尔效应传感器反馈
6 个 MCPWM 输出连接到 3 对 MOSFET 驱动 器
(IR2101S),最终连接到6 个MOSFET(IRFR2407)。
这些 MOSFET 以三相桥式连接到 3 相 BLDC 电机绕组。
在当前实现中,MOSFET 的最大电压为 70V,最大电流
为 18A。
注意在使用最大功率时必须提供充分的散热,这一点很
重要。MOSFET 驱动器也需要一个较高的电压(15V)
来运行,因此需要提供这么高的电平。该电机是 24V
BLDC 电机,因此 DC+ 到 DC- 母线电压为 24V。需要
提供 5V 的稳压电源来驱动 dsPIC30F2010。3 个霍尔效
应传感器的输出信号连接到与变化通知电路相连的输入
引脚,使能输入的同时也使能相应中断。若这 3 个引脚
中的任何一个发生了电平变化,就会产生中断。为了提
供速度给定,将一个电位计连接到 ADC 输入(RB2)。
在 RC14 上提供了一个按钮开关,用于起动和停止电
机。为了向电机提供一些电流反馈,在 DC 母线负电压
与地或 Vss 之间连接了一个低阻值电阻(25 毫欧)。由
此电阻产生的电压被一个外部运放 (MCP6002)放大
并反馈到 ADC 输入 (RB1)。
AN957
固件描述
附录A 和附录B 包含了两个固件程序来举例说明此应用
笔记中描述的方法。一个程序使用开环速度控制。另一
个使用比例和积分反馈来实现闭环速度控制。
对于实际应用而言,开环方式通常是不实用的。此处介
绍它主要是为了阐明 BLDC 电机的驱动方法。
开环控制
在开环控制中,MCPWM 根据来自速度电位计的电压输
入直接控制电机速度。初始化 MCPWM、ADC、端口和
变化通知输入之后,程序将等待一个激活信号 (例如,
按一个键)来表示开始 (参见图 7)。按下键后,程序
将读霍尔传感器。根据读到的值,从表中取出对应的值
并将它写入 OVDCON。此时电机开始旋转。
图 7:
开环流程图
开始
初始化 MCPWM、 ADC 和
端口
否
按过键吗?
是
读霍尔效应传感器;用表中
查到的状态装载 OVDCON
否
否
读过给定电位计吗?
是
用给定值
装载 PDCx
按过键吗?
是
使用 OVDCON 停止
MCPWM
© 2005 Microchip Technology Inc.
DS00957A_CN第 5 页
AN957
最初占空比值保持在默认值 50%。但是,在主程序的第
一个循环,将读电位计并将其值 (即正确的给定值)作
为占空比插入。该值决定电机的速度。占空比值越高,
电机转得越快。图 8 所示电机速度由电位计控制。
图 8:
开环电压控制模式
电压
给定
BLDC
电机
dsPIC®
MCPWM
霍尔效应传感器连接到变化通知引脚。允许 CN 中断。
当转子旋转时,转子磁体的位置发生变化,从而使转子
进入不同的区间。 CN 中断表示转子进入每个新位置。
在 CN 中断程序(如图 9 所示)中,读霍尔效应传感器
的 值,并 根 据 该 值 得 到 一 个 表 查 找 值,并 将 它 写 入
OVDCON 寄存器。此操作将确保在正确的区间对正确
的绕组通电,从而使电机继续旋转。
图 9:
CN 中断流程图
开始
读霍尔效应传感器
获得在表中查找到的状态值
装载 OVDCON
结束
相位超前
欲知有关相位超前以及实现方式的详细信息,请参阅
AN901_CN。
闭环控制
在闭环控制固件版本中,主要的不同是使用电位计来设
定 速 度 给 定。控 制 环 提 供 了 对 速 度 的 比 例 和 积 分
(Proportional and Integral, PI)控制。要测量实际速
度,可以使用 TMR3 作为定时器来选通一个完整的电周
期。由于我们使用的是 10 极电机,因此一个机械周期
将由 5 个电周期构成。如果 T (秒)是一个电周期的时
间,那么速度 S = 60/ (P/2*T) rpm,其中 P 是电机
的极数。控制如图 10 所示。闭环控制流程图如图 11 所
示。
图 10:
给定
+
S
-
闭环电压控制模式
速度 PI
控制器
dsPIC®
MCPWM
电机
电机速度计算结果
图 11:
闭环控制流程图
开始
初始化 MCPWM、 ADC
和端口
否
按过键吗?
是
读霍尔效应传感器;用表中
查到的状态装载 OVDCON
读过实际速度吗?
否
是
计算比例和积分速度误差 *
否
按过键吗?
是
使用 OVDCON
停止 MCPWM
* PDCx = KP (比例速度误差) + KI (积分速度误差)
DS00957A_CN第 6 页
© 2005 Microchip Technology Inc.
结论
dsPIC30F2010 非常适合对带传感器的 BLDC 电机进行
闭环控制。外设和 DSP 引擎为带传感器的 BLDC 应用
提供了足够宽的带宽,并为客户的应用程序提供了充足
的代码空间。
AN957
参考书目
• AN885—Brushless DC (BLDC) Motor
Fundamentals
• AN901_CN—dsPIC30F 在无传感器 BLDC 控制
中的应用
• AN857— Brushless DC Motor Control Made
Easy
• AN899 — Brushless DC Motor Control Using
PIC18FXX31 MCUs
© 2005 Microchip Technology Inc.
DS00957A_CN第 7 页
AN957
附录 A:
此附录包含了开环控制的源代码清单。
开环控制的源代码清单
软件许可协议
Microchip Technology Incorporated (“公司”)随附提供的软件旨在提供给您 (该公司的客户)使用,仅限于且只能在该公司制造
的产品上使用。
该软件为公司和 / 或其供应商所有,并受适用的版权法保护。版权所有。任何违反前述限制的使用将使其用户遭受适用法律的刑事制
裁,并承担违背此许可的条款和条件的民事责任。
该软件 “按现状”提供。不提供保证,无论是明示的、暗示的还是法定的保证。这些保证包括 (但不限于)对出于某一特定目的应
用此软件的适销性和适用性默示的保证。在任何情况下,公司都将不会对任何原因造成的特别的、偶然的或间接的损害负责。
Software License Agreement
//---------------------------------------------------------------------------------
//
//
// The software supplied herewith by Microchip Technology Incorporated
// (the “Company”) is intended and supplied to you, the Company’s customer,
// for use solely and exclusively with products manufacture by the Company.
// The software is owned by the Company and/or its supplier, and is protected under
// applicable copyright laws. All rights are reserved. Any use in violation of the
// foregoing restrictions may subject the user to criminal sanctions under applicable
// laws, as well as to civil liability for the breach of the terms and conditions of
// this license.
//
// THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES, WHETHER EXPRESS,
// IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
// THE COMPANY SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
//---------------------------------------------------------------------------------
// 文件:ClosedLoopSenBLDC.c
//
// 编写者:Stan D'Souza, Microchip Technology
//
// 下列文件应该包含在 MPLAB 项目中:
//
//
//
ClosedLoopSenBLDC.c——主源代码文件
p30f2010.gld——链接描述文件
//
//
//---------------------------------------------------------------------
//
// 版本历史
//
// 10/01/04——第一版
//----------------------------------------------------------------------
/*************************************************************
以下是低端驱动器表。在此 StateLoTable 中,
在低端驱动器施加 PWM 信号,而高端驱动器为 “导通”或 “截止”状态。
在本练习中使用此表。
/*************************************************************/
unsigned int StateLoTable[] = {0x0000, 0x0210, 0x2004, 0x0204,
0x0801, 0x0810, 0x2001, 0x0000};
/****************************************************************
以下是变化通知引脚 CN5、 CN6 和 CN7 的中断向量。
当霍尔传感器改变状态时,将引起中断,指令执行将转到下面的子程序。
然后用户必须读端口 B 的第 3 位、第 4 位和第 5 位,
对读到的值进行移位和调节以使之读作 1、 2……6。
然后将调整后的值用作查找表 StateLoTable 中的偏移量
以确定装入 OVDCON 寄存器的值。
*****************************************************************/
DS00957A_CN第 8 页
© 2005 Microchip Technology Inc.