请选择 进入手机版 | 继续访问电脑版
查看: 2051|回复: 1

基于 S08PB16 的三相无刷直流电机控制

[复制链接]
  • TA的每日心情
    开心
    前天 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3296

    主题

    6541

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    31904
    最后登录
    2024-3-28
    发表于 2020-9-22 15:27:58 | 显示全部楼层 |阅读模式
    基于 S08PB16 的三相无刷直流电机控制
    1 简介
    本应用笔记介绍了基于 NXP 的 S08PB16 处理器的带霍尔传感器的三相 BLDC电机(无刷直流电机)控制。
    S08PB16 芯片集成了 12 位 ADC,模拟比较器(ACMP), 运算放大器(OPAMP),故障检测及关断(FDS)和 FTM 等重要的特性用于简化设计和降低系统的成本。BLDC 电机因其高效率、高可靠性、高功率密度的特性广泛应用于工业控制领域。
    S08PB16 芯片为三相直流电机控制的应用进行了优化设计,特别适合一些具有严格成本控制的低端应用。例如,冷却风扇和水泵等。
    本应用文档主要介绍了带霍尔传感器的 BLDC 电机六步换相控制的原理以及硬件和软件的实现,其中详细的描述了外设和驱动的配置。
    此应用是基于 NXP 提供的免费的 CodeWarrior 11.1 IDE 进行开发的 (请安装补丁: CodeWarrior MCU 11.1 Service Pack for S08PB and S08PLS)。
    2 S08PB16 的特点和优势
    MC9S08PB16 是基于 S08P 内核的高集成、低功耗和低引脚数量的 8 位微控制器。
    有以下特点:
    • 最大 CPU 频率可达 20 MHz
    • 可扩展的内存,最高可达 16 KB Flash 和 1 KB RAM
    • 在 2.7 V ~ 5.5 V 电压范围内,支持 Flash 编程/擦除/读取操作的全部功能
    • 有两种封装:20 引脚和 16 引脚
    • V 系列的工作环境温度范围在-40 °C to 105 °C,M 系列的工作环境温度范围在-40 °C to 125 °C
    S08PB16 的系统框图如 图 1 所示:
    11.png
    S08PB16 用于无刷直流电机控制,有以下优势:
    • 有多路 PWM 信号输出。
    • 有丰富的计时器和通信接口。
    • 内部集成了丰富的模拟 IP,包括 12 通道 12 位精度的 ADC,两个 ACMP 和内部 OPAMP。这些模块的内连可以很方便地用于过流故障保护。S08PB16 的内部运放(OPAMP)节约了外部的运放电路,可以节约 BOM 成本。
    • 为了电机控制而优化的增强型的故障保护模块(FDS),可以保证系统的高可靠性。


    3 BLDC 电机控制原理
    无刷直流电机(BLDC 电机)是一种旋转电机,其定子类似传统感应电动机的三相定子,转子上有安装在表面的永磁体。转子上没有电刷,可在特定的转子位置进行换相。定子通常由硅钢片制成。BLDC 电机的典型截面图如 图 2 所示。定子绕组嵌入沟槽中(分布式绕组)。由于气隙磁场是由永磁体产生的,转子磁场的大小是恒定的。
    12.png
    永磁体的磁化强度和放在转子上的位置都需要精确固定,这样反电势(由于转子的转动在定子绕组上感应的电压)的形状才会是梯形的。图 4 显示了矩形形状的直流电压,可以用于创建一个低扭矩脉动的旋转磁场。
    BLDC 电机的控制需要一个三相逆变电路,三相桥由六个功率开关器件(Q1-Q6)组成,通过六步换相控制算法来驱动各个开关元器件,如 图 3 所示。
    13.png

    14.png

    六步换相控制可使用很多 PWM 调制方式。考虑到 S08PB16 FTM 模块中没有死区插入的功能,所以采用 HPWM_LON 模式调制,
    如 图 5 所示。

    15.png

    4 硬件和软件的实现
    4.1 系统硬件设计
    本次应用的硬件主要包括以下部分:
    • S08PB16-EVK
    S08PB16-EVK 是用于 NXP S08PB 和 S08PLS 5V 8 位 MCU 的经济有效的开发套件。它虽然很小,但功能强大,有丰富的集
    成外设,可以用来评估 S08PB 和 S08PLS MCUs 的所有特性。S08PB16-EVK 支持板载 OSBDM,无需外部调试工具,便可
    进行程序下载和调试。
    • FRDM-MC-LVBLDC
    FRDM-MC-LVBLDC,此平台是针对无刷直流电机控制推出的硬件平台,支持霍尔传感器或者无速度传感器的 BLDC 电机控制。
    选用 LINIX 45ZVN24-40 无刷直流电机。
    电机控制开发平台的框图和实际的演示平台搭建如 图 6 和 图 7 所示。
    16.png

    4.2 系统软件设计
    本次软件和硬件设计,符合以下的设计要求:
    • 选择 S08PB16 作为控制器
    • 基于霍尔传感器的全速度闭环控制
    • 基于软件和硬件实现过压、欠压、过流的故障保护
    • 最小转速 300 rpm, 最大转速可达 2500 rpm (取决于选用的电机)
    • 设置的默认限流值是 4 A
    • 支持正反向旋转
    • 可从任意位置启动,不需要转子对齐
    • SW3 按键控制 demo 模式
    • 基于 FreeMASTER 的电机状态的实时监测
    系统框图如 图 8 所示。

    17.png

    从该框图中,我们可以看到整个控制过程在三个中断中完成。
    • FTM2 ISR
    霍尔信号采集,换相控制,PWM 占空比更新和实际速度测量均在 FTM2 ISR(10KHz)中完成。电机转子所在的扇区是通过不断查询连接霍尔信号的 GPIO 值确定的。
    • MTIM1 ISR
    电机状态机的更新,速度 PI 闭环控制,电机软件故障保护等均在 MITM1 ISR(1KHz)中完成。速度 PI 控制器输出 PWM 占空比会在 FTM2 ISR 中更新。 电机的软件故障保护系统,是通过 ADC 采样直流母线电流/电压值来实现对过流/过压/欠压故障的检测。
    • ACMP1 中断
    此方案通过 ACMP1 中断触发系统硬件过流故障,在 ACMP1 中断服务函数中仅处理过流故障相应的标志位。

    5 外围设备配置
    本节介绍了用于 S08PB16 上的电机控制的外围设备的配置,包括 FTM2,ACMP1 和 FDS,ADC,KBI,MTIM1,IPC,PORTA。
    5.1 FTM2
    配置 FTM2 输出 6 个 PWM 信号用于驱动 BLDC 电机,使能 FTM2 计数器溢出中断,在中断服务函数中实时读取 HALL 信号以获
    得转子位置信息,并执行相应的换相操作。
    FTM2 配置:
    • 系统时钟源
    • 运行频率 10 kHz,周期 100 μs
    • 输出边沿对齐且高电平有效的 PWM 脉冲
    • 配置 FTM2 的通道 0-5,用于三相驱动 BLDC 电机
    • 使能计数器溢出中断



    BLDC 电机控制中最重要的是换相。 对于 HPWM_LON 调制模式,在任何时候,只有一个 MOSFET 处于 PWM 调制状态。对于
    S08PB16,我们可以使用 SYS_SOPT8 和 SYS_SOPT7 方便地控制每个电桥的输出,而不会影响实际的 FTM 时序。 以扇区 1 为
    例(A + B-):

    1. SYS_SOPT8 = SYS_SOPT8_FTM2CH3OCV_MASK;//Q4 active
    2. SYS_SOPT7 = SYS_SOPT7_FTM2CH1OC_MASK | SYS_SOPT7_FTM2CH2OC_MASK | SYS_SOPT7_FTM2CH3OC_MASK |
    3. SYS_SOPT7_FTM2CH4OC_MASK | SYS_SOPT7_FTM2CH5OC_MASK;//Q1 PWM output
    复制代码
    6 个 PWM 输出也可以被 FDS 模块控制。过流信号作为 FDS 的输入信号,一旦过流信号产生,会触发 FDS 模块,FDS 将会关闭6 个 PWM 信号并控制这 6 个引脚的输出。产生和控制 PWM 信号的过程如 图 9 所示。

    18.png

    5.2 ACMP1 and FDS
    系统硬件过流故障信号是由内部 ACMP1 中断产生的。
    外部的运算放大器输出连接到 ACMP1 +输入,ACMP1 内部 DAC 的输出是 ACMP1-的输入,ACMP1 可以将 OPAMP 输出信号与
    内部 DAC 的电压进行比较。 同时,我们可以配置 ACMP1_C1_DACVAL 来更改 DAC 输出电压以调整限电流值。 当 OPAMP 输
    出大于 DAC 输出值时,ACMP1 中断标志位置位,过流故障信号产生。
    FDS 故障输入 2 源(FIN2)是 ACMP1 中断输出。 一旦出现过流故障信号,FDS 就会关闭 6 个 PWM 通道的输出,并将相应的端
    口引脚设置为输出 0。有关内部 OPAMP,ACMP 和 FDS 的详细信息,请参考 How to Use the Interconnection of OPAMP,ACMP1
    and FDS for S08PB16 (document AN12836)。
    ACMP1 配置:
    • ACMP1+ 输入源:PTA3/ACMP1IN0/OPAMP+, PTA3 引脚用于连接片外运放的输出
    • ACMP1- 输入源:DAC 输出
    • ACMP1 输出使能,判断故障源是否清除;如果故障源移除,则清除 FDS 中断标志位
    • ACMP1 中断使能,ACMP1 输出上升边沿触发中断
    FDS 配置:
    • FDS 输入通 2 使能(FIN2),ACMP1 中断输出作为 FDS 输入源
    • 配置 FDS FDSOUT0-FDSOUT5 输出通道:使能相对应的 6 个引脚配置,将 6 个引脚的数据方向配置为输出,6 个引脚的
    输出值设为 0
    ACMP1 和 FDS 的内部连接图如 图 10 所示。

    19.png

    • 在 FRDM-MC-LVBLDC 板上已经有一个外部运放,在本文的应用中,不使用 S08PB16 的内部运放采样母线电流。在实际
    应用中,客户可根据需要选择使用外部运放或者 S08PB16 的内部运放进行采样。
    5.3 ADC
    ADC 采样直流母线电压和直流母线电流,采样值用于和用户给定的过流值、过压值、欠压值进行比较,实现电机控制系统的软件保护。
    ADC 配置:
    • 总线时钟, 时钟分频值为 1
    • 12 位采样精度, 长采样时间
    • 配置两个采样通道, PTA3/ADP3 通道用于采样直流母线电流,PTB3/ADP7 通道用于采样直流母线电压
    5.4 MTIM1
    使用 MTIM1 模块产生 1ms 的中断用于实现状态机检测,速度环的控制等。
    MTIM1 配置:
    • 选用固定频率时钟源
    • 没有分频, modulo 的值为 16, MTIM1 时钟频率配置成 1 kHz.
    • 使能中断
    5.5 IPC
    中断优先级控制器(IPC)模块用于配 FTM2 和 MTIM1 的中断优先级来实现中断嵌套。在本文 BLDC 电机控制应用的代码中,需
    要配置 FTM2 中断优先级高于 MTIM1 中断优先级。
    MTIM1 的中断优先等级设为 0,FTM2 的中断优先等级设为 3。FTM2 的中断请求可以抢占 MTIM1 的中断服务,而执行 FTM2 中
    断服务程序时,MTIM1 的中断请求将会被阻止。
    IPC 配置:
    • 使能中断优先控制器

    • FTM2 中断优先级设为 3, MTIM1 中断优先级设为 0
    5.6 KBI
    手动按键(板载 SW3)用于控制 demo 模式的打开与关断。根据 S08PB16-EVK 的原理图可知,PTB2/KBI0P6 被配置成 SW3 按
    键的输入通道。
    KBI 配置:
    • 只检测下降沿
    • KBI 中断关闭
    • 使能 PTB2 作为 KBI 引脚
    5.7 PORTA
    三相霍尔传感器信号连接到 PTA0, PTA1, PTA2。转子所在的扇区是通过查询连接霍尔信号的 GPIO 值确定的。当电机在工作时,转子的位置可以通过不断地读取这 3 个引脚的值来确定。
    PORTA 配置:
    • 配置 PTA0, PTA1, PTA2 数据方向为输入,用于读取霍尔值
    6 软件实现
    本节介绍了 BLDC 电机应用的软件设计。对该软件的描述主要包括以下几个部分:
    • 主函数流程图
    • MTIM1 中断
    • FTM2 中断
    6.1 主函数流程图
    在复位以后,应用程序初始化所有使用的外围设备并进入无限循环,main()函数的流程图如 图 11 所示。
    20.png

    6.2 MTIM1 中断
    MTIM1 中断服务程序详细的执行过程如 图 12 所示。

    21.png

    6.2.1 状态机切换
    主状态机包括以下几个子状态: init, stop, run, fault。

    22.png

    6.2.2 速度 PI 闭环
    根据 图 12 可知,速度 PI 控制环在 AppRun 中实现。现在对速度控制过程进行详细的描述,图 14 是速度 PI 控制的系统框图。

    23.png

    1. 速度斜坡
    由于整个应用是一个具有大惯量的系统,因此在应用程序中必须改进速度命令,否则系统可能会过载。 一种方法是生成斜坡,以通过代码中定义的步长增量使速度斜坡接近速度命令(所需的速度值)。
    在本文应用中,ECLIB_Ramp16 需要三个参数来获取实际速度斜坡。
    • 预定义增量值(RAMP_SPEED)
    • 期望转速(w16Speed_req)
    • 速度斜坡(w16Speed_ramp)
    RAMP_SPEED 的定义如下:

    1. /* Speed ramp value settings for close loop */
    2. #define SLOW_PERIOD_US 1000.0//us
    3. #define RAMP_SPEED_S 10000.0//(rpm/s)
    4. #define RAMP_SPEED (RAMP_SPEED_S*SLOW_PERIOD_US*32768.0/1000000.0/N_MAX)
    复制代码
    上面 RAMP_SPEED 参数是经过缩放的。关于速度缩放的描述请参考实际速度测量。

    图 15 显示 ECLIB_Ramp16 函数使用定义的步长来递增或递减斜坡速度值,使得斜坡值更接近期望值的过程。

    24.png

    2. PI 控制器
    速度 PI 控制算法可以纠正期望速度与实际速度之间的速度误差(w16Speed_error = w16Speed_ramp -
    w16Speed_Act_flt)。PI 控制器的输出,作为新的施加给电机的电压校正值,传递到 PWM 发生器 FTM2。
    25.png

    式中
    • e(t):时域的输入误差
    • u(t):时域的控制器输出
    • Kp:时域的比例系数
    • Ki':时域的积分系数
    离散域方程可以表示为:
    26.png

    式中
    • Ts:采样时间
    • e(k):离散域的输入误差

    • u(k):离散域的控制器输出
    • Kp:离散域的比例系数
    • Ki :离散域的积分系数
    PI 控制器的程序是在 AppRun()函数中计算的,该函数每 1 ms 调用一次,则 PI 控制器的采样时间(Ts)为 1 ms。
    PI 控制器的一个输入是速度误差(w16Speed_error), 另一个输入是指向 PI 控制器参数的结构体的指针sSpeedPiParams (Kp,Ki, …)。所有这些参数均用于 PI 控制器函数 CTR_ControllerPI16。
    CTR_ControllerPI16 函数的输出为uw16Duty,在 FTM2 ISR 中被用于更新 PWM 占空比。
    在本应用中,Kp 设置为 10,Ki 设置为 1。如果更改速度标定或电动机时,都必须重新配置这些参数。
    图 16 显示了通过使用 CTR_ControllerPI16 函数获取占空比的 PI 控制过程。

    27.png

    6.2.3 限流值计算
    直流母线电流检测电路在 FRDM-DC-LVBLDC 板子上,如 图 17 所示:

    28.png

    如 图 17 所示,上面电路的参考电压是 1.65 V,增益是 0.2 V/A, 其输出连接到 S08PB16 ACMP1 正端的输入。 如果将限流值设
    为 i,则满足下面方程:
    ACMP1 正端输入电压 = 1.65 + 0.2 × i
    根据 5.2 章中 ACMP1 的配置可知,DAC 输出,(ACMP1_C1_DACVAL + 1) / 64 × Vin,被配置为 ACMP1-的输入, ACMP+的输
    入应该小于 ACMP-的输入,可以得到下面方程:
    (ACMP1_C1_DACVAL + 1) / 64 × Vin > 1.65 + 0.2 * i
    式中
    • Vin:DAC 的参考电压,本应用中选 VDDA (5V)作为参考电压
    • i: 期望的限流值
    因此,可以通过根据上述公式更改ACMP1_C1_DACVAL 的值来更改电流限值。
    6.3 FTM2 中断
    FTM2 中断服务程序的详细过程如 图 18 所示。



    如 图 18 所示,在 FTM2 ISR 中实现了换相和实际速度测量。 以下内容将对其进行详细描述。
    6.3.1 换相
    正确的换相表是针对客户特定的 BLDC 电机进行应用移植的关键。
    在此应用中,当电动机顺时针和逆时针旋转时,霍尔值和三相电压序列之间的对应关系由人工测量确定。 客户可以通过电压对齐
    的方式获得霍尔信号定义换相表,或参考电动机制造商提供的换相表。
    本章详细介绍了如何实现换相,本应用换相表的定义如 图 19 所示。
    注意
    不同电机的霍尔根据安装位置不同及三相相序不同,都会导致不同扇区对应的霍尔信号发生变化,实际使用时可以用开环 align 的方式先确定各个转子扇区对应的霍尔信号。
    29.png

    在我们使用的 BLDC 电机中,霍尔传感器以 120 度电角度安装,它们用于检测转子磁通量。 除 111 和 000 外,将所有三个传感器
    的输出组合在一起将得到六种状态。每 60 度电角度重复一次换相。 我们定义了霍尔信号计算模式以获取 Vector,然后根据 Vector
    值执行换相过程。 换相步骤如下:
    • 霍尔信号的计算:
    Hall_signal = PTA2_Hall3 × 0x04 + PTA2_Hall3 × 0x02 + PTA2_Hall1 × 0x01
    • Vector 定义:
    Vector 的值可以通过定义的数组得到:vector_Table[HALL_signal] = {0,4,2,3,6,5,1,0}
    • 换相:
    通过根据 Vector 值来更改 A,B,C 相电压的通电方向来实现换相,请参考 图 19。
    换相可以产生使旋转磁场。 定子磁通和转子磁通之间的角度应保持尽可能接近 90°,以获得最大的转矩。为了使 BLDC 电机正常
    运行,必须使定子磁通和转子磁通之间的角度保持接近 90°,实际角度在 60°至 120°之间变化。
    通过六步控制,我们总共可以获得六个可能的定子磁通矢量。定子磁通矢量必须在转子位于某一位置时改变。通常通过霍尔效应
    传感器的 6 种状态来感测转子位置。六个状态中的每一个对应于某个定子磁通矢量。 参照 图 19 的换相顺序,在 图 20 中画出了
    六个霍尔状态以及相应的定子磁通矢量。

    30.png

    转子向减小定子磁通和转子磁通之间的夹角的方向转动。
    如 图 21(a)所示,当转子在 Vector 1 时,执行 A + B-换相。转子将从 Vector 1 运行到 Vector 2,减小定子和转子磁通之间的角
    度,以实现顺时针旋转。
    如 图 21(b)所示,当转子在 Vector 1 时,执行 B + A-换相。转子将从 Vector 1 运行到 Vector 6,减小定子和转子磁通之间的角
    度,以实现逆时针旋转 。

    31.png

    三相电压由 6 个 PWM 调制可得,调制方式选择 HPWM_LON 模式。 如果电动机的旋转方向为顺时针,电源顺序为 (A + B-) -
    >(A+ C-) ->(B + C-) ->(B + A-) ->(C + A-) ->(C + B-),在一个电角度周期内,换相过程和六个 PWM 的时序如 图 22 所示:

    32.png

    6.3.2 实际速度测量
    本次应用程序中的所有速度常量都进行了缩放。 将所有速度常量除以预定义的最大值(N_MAX = 100000 rpm),然后将在[-1,1)
    内的带符号的小数转换为 Q1.15 格式的定点 16 位数字(× 32768)。
    每 60°电角度的换相周期,uw16Comm_Period,和经过缩放的常量 NUMERATOR_FOR_SPEED 可以用来计算实际速度值,该缩
    放的常量 NUMERATOR_FOR_SPEED 可以将时间值转换为速度值。 实际速度 w16Speed_Act_flt 可以通过对 w16Speed_Act 滤
    波后得到,w16Speed_Act 可以使用以下公式计算:

    33.png

    式中 NUMERATOR_FOR_SPEED 通过预定义为:
    34.png

    式中
    • PWM_FREQUENCY_KHZ: 10 (kHz)
    • N_MAX: 100000 (rpm)
    • PP: 2 (pole pairs)
    7 应用指南
    本次 BLDC 电机控制应用可使用 FreeMASTER 与 PC 一起控制,或使用 EVK 板上的按钮 SW3 来控制速度。请严格按照以下步骤搭建硬件和软件,然后启动此 BLDC 电机控制的演示。
    1. 根据 图 23 中红色标记的位置安装跳线。

    35.png

    2. 修改 S08PB16-EVK 开发板。 PTA0/PTA1/PTA2/PTA3/PTB3 在 S08PB16-EVK 开发板上默认连接到外围设备。 但是现在,这些引脚需要连接到 FRDM-LVBLDC 开发板上的电机控制信号。 需要将 R1/R4/R7/R10/R11 处的 0 Ω 电阻移除,并在 R3/R6/R9/R12/R13 处焊接 0 Ω 电阻。 请参考 图 24 进行电路修改。
    36.png


    3. 通过 Arduino 接口连接 S08PB16-EVK 开发板和 FRDM-MC-LVBLDC 开发板。
    4. 依次将电机的三相输出和霍尔信号连接到 FRDM-MC-LVBLDC 开发板上。

    5. 将 USB 线连接到 S08PB16-EVK 板载 OSBDM 端口。
    6. 使用 CodeWarrior(11.1 版或更高版本)打开工程,然后编译并将固件下载到芯片。
    7. 用 FreeMASTER(3.0 及以上版本)打开 S08PB16_BLDC.pmpx,点击 project > options > Comm > Communications
    > Plug-in Module,选择 FreeMASTER BDM 作为通信方式,点击 project > Options > MAP Files, 请选择 .abs 文件作
    为 Default symbol file,File format 为 Binary ELF with DWARF2 or DWARF4 dbg format。具体配置如 图 25 所示。

    37.png

    8. 向 FRDM-MC-LVBLDC 板上提供 12 V 直流电压,然后单击 FreeMASTER 上的 GO 按钮,将速度命令值(rpm)设置写入 Speed_req 文本框,或者拖动 Speed Required 滑块以启动电动机。
    9. FreeMASTER 控制页面如 图 26 所示,可用于速度控制,demo 模式控制,限流值的调整以及速度/直流母线电流/直流母线电压/状态机/变量的实时监测。

    38.png





    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:44
  • 签到天数: 1252 天

    [LV.10]以坛为家III

    21

    主题

    1万

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    13079
    最后登录
    2024-3-28
    发表于 2020-9-22 17:12:58 | 显示全部楼层
    本帖最后由 sumoon_yao 于 2020-9-23 09:04 编辑

    管管, S08PB16-EVK 开发板和 FRDM-MC-LVBLDC 开发板都是原厂的?
    跟着日天混 ,三天饱九顿!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-3-28 22:02 , Processed in 0.136230 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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