NXP公司K60N512+PWM控制BLDC电机

本篇文章介绍了使用NXP公司提供的塔式快速原型系统来驱动控制带霍尔传感器的无刷直流电机。文章涉及的塔式快速原型系统主要包括以下四个独立板卡:1.塔式系统支撑模块(TWR-Elevator),用以连接微控制器以及周边模块;2.低电压3相电机控制模块(TWR-MC-LV3PH);3.通信(USB、Ethernet、CAN、RS232/485)塔式系统模块(TWR-SER);4.塔式系统K60 MCU模块(TWR-K60N512)。

文章从基础理论讲起,帮助读者梳理电机控制相关概念,了解整个电机驱动系统构成,带领读者从BLDC电机控制实现的各个开发步骤来直观体验了整个实现过程。

目录

BLDC电机理论

BLDC(带霍尔传感器)基本信息

换相

BLDC电机数字控制

速度控制

系统描述

性能指标

概要说明

外设 

数据流程图

关键技术详解

速度和位置测量

PI控制器 

软件实现

函数实现

中断安装 

对外接口


NXP公司把电机在汽车中的应用主要分为三类:动力总成安全和地盘以及车身和舒适。下图为这三类具体包含涉及到了电机控制的汽车部分。

电机按照实现原理又分为直流有刷电机直流无刷电机步进电机永磁同步电机。下图为这四种电机在不同汽车部分的应用情况。

本文主要介绍的是带霍尔传感器的直流无刷(BLDC)电机的控制应用实现。


BLDC电机理论

BLDC(带霍尔传感器)基本信息

BLDC的定子(stator)是通电的线圈,转子(rotor)是永磁体。换句话来说BLDC 电机的磁体保持转动,导体保持静止。


换相

利用磁铁同性相斥,异性相吸的原理,我们在定子上的线圈接入方向适当的电流,即让电磁铁的磁极方向和永磁体的磁极方向正好对应,不就能排斥、或者吸引转子做旋转运动了。BLDC电机将那六个线圈两两组合,分成A,B,C三个绕组(三相),这样就能同时控制两个中心对称的绕组采用相同的极性,从而提高了驱动效率,而A,B,C三个绕组又会两两结对,这样又能驱动相邻的两个转子提供不同的极性,那么转子将会获得更高的驱动力,如下面动图所示,通过AB-AC-BC-BA-CA-CB,这六个节拍(六步),依次循环驱动定子的绕组,转子就能一直旋转下去。

综上所述,换相可以产生旋转场,通过六步控制,我们总共可以获得六种可能的定子磁通向量。必须在特定的转子位置更改定子磁通向量。转子位置通常通过霍尔效应传感器检测。霍尔传感器生成三种信号,这三种信号也包含六种状态。每个霍尔传感器的状态对应特定的定子磁通向量,如下表所示。

顺时针旋转相序列
霍尔传感器H1霍尔传感器H2霍尔传感器H3A相B相C相
001V+V-NC
011V+NCV-
111NCV+V-
100V-V+NC
000V-NCV+
001NCV-V+

我们现在先拿六个电子开关来理解六个节拍的转化,如下图:


BLDC电机数字控制

对于常见的三相BLDC电机,可以使用标准的H桥驱动电路,如下图。

BLDC 电机控制应用采用互补双极开关PWM。利用互补双极开关,两相由互补 PWM 信号供电 (底部 MOSFET的开关与一相之内的顶部MOSFET的开关互补),一相的占空比大于 50%,另 一相的占空比为互补值(小于 50%),如下图所示。

互补双极开关PWM技术的优点是可以在所有四个工作象限中控制电机。双极PWM开关方案要 求顶部和底部开关PWM信号在换向事件时交换。另一个要求是在互补顶部和底部信号中插入死区。 


速度控制

换相可确保BLDC电机的转子正确旋转,而电机转速则仅取决于所施加电压的振幅。可使用PWM技术调整所施加电压的振幅。所需转速由速度控制器控制,速度控制器由比例 - 积分 (PI) 控制器实现。实际转速与所需转速之差为PI控制器的输入,该控制器随后根据此差值控制 PWM 脉冲的占空比,并且此占空比与维持正确转速所需的电压振幅相对应。


系统描述

性能指标

该系统设计用于驱动三相 BLDC 电机。该应用符合以下性能规范:

  • 使用霍尔效应传感器对 BLDC 电机进行电压控制。
  • 带 TWR-K60N512 板的塔式系统解决方案。
  • 电源电压 +24 VDC。
  • 控制技术包括:
    • 使用霍尔效应传感器信号进行位置检测。
    • 使用速度闭环进行 BLDC 电机电压控制。
    • 速度测量基于一个霍尔效应传感器。
    • 两个旋转方向。
    • 可从任何转子位置启动。
    • 可在每次电机启动之前对 MOSFET 前置驱动自举预充电。
    • 最小转速 500 RPM (取决于所使用的电机)。
    • 最大转速 4000 RPM (取决于所使用的电机)。
  • FreeMASTER接口(输入速度、测得速度、速度误差、斜坡参数、过流LED指示)。
  • 以太网终端 (输入速度、以太网状态)。
  • 故障保护:
    • 直流母线过流故障保护(硬件)。
    • 电源反向极性保护电路(硬件)。

概要说明

K60N512运行主控制算法。根据用户接口和反馈信号,它将会生成六路PWM输出信号(FTM0)。如果所需转速不为零,则应用启用霍尔传感器中断并强制首次调用霍尔中断程序。每个霍尔传感器的新边沿自动调用中断程序。在此霍尔中断程序中,将会扫描来自霍尔传感器的信号,并交换和屏蔽对应的 PWM 通道。此过程称为换相。霍尔传感器扫描独立于速度控制(FTM1)。速度控制循环由PIT0定时调用,此周期循环中存在速度斜坡和应用状态机。主程序中仅存在一个针对FreeMASTER协议处理的无限循环,这样就可以通过FreeMASTER上位机调试此应用。


外设 

为了使此应用正确工作,必须使用以下外设。不允许将这些外设用于其他目的。

  1. FTM0:用于生成PWM信号的定时器,在组合模式下运行,开关频率为 19.2 kHz (48 MHz 的内核时钟),死区时间为 1 μs。
  2. FTM1:用于速度测量的定时器,在输入捕捉模式下运行,预分频为 128,模数为 0xFFFF,溢出周期为 175 ms。
  3. PIT0:用于定时调用速度控制循环和应用状态机,中断调用周期为 10 ms (48 MHz 内核时钟)。
  4. 端口A:用于霍尔效应传感器中断,如果在此端口上施加任何其他信号,则在每个信号边沿调用此中断,程序不会正确运行。
  5. 端口D:用于霍尔效应传感器中断,如果在此端口上施加任何其他信号,则在每个信号边沿调用此中断,程序不会正确运行。
  6. PTE26:用于紧急停止按钮。
  7. PTA27:用于读取 MC33937 MOS-FET 前置驱动的过流引脚。
  8. PTA10:用于表示 MC33937 MOS-FET 前置驱动上的第一级过流。
  9. SPI2:用于与 MC33937 MOS-FET 前置驱动通信。

数据流程图

电机驱动应用要求表明软件将提取用户接口下发的速度等参数和传感器采集的部分数值进行处理,然后生成用于电机控制的三相PWM信号。闭环BLDC电机驱动的控制数据流程图如下所示。

其中包含的关键流程如下:

  1. 速度命令:用户通过FreeMASTER通信软件发送的每个速度更改命令均会使speed_req变量中的值改变。
  2. 缩放比例和速度斜坡:提供定点32位数的比例更改和速度斜坡计算,由于整个应用系统具有很大惯性,因此,应用时必须细化速度命令,否则可能会导致系统过载。此流程会不断更新speed_scaled的值直到与speed_req值一致。
  3. 速度PI控制器:它用于计算实际速度与speed_scaled之差并相应地补偿PWM 模块的占空比。
  4. 换相和PWM生成:它用于根据霍尔传感器的信号创建旋转场。
  5. 传感器中断处理程序:它用于生成换相向量。
  6. 速度测量:实现测量当前电机转速,详见下一小节。

关键技术详解

速度和位置测量

实际电机速度基于旋转周期 (time_measured) 计算得出,并与用户提供的 speed_req 进行对比。随 后,通过速度斜坡算法对速度命令进行处理。从斜坡算法输出获得的实际速度命令与 speed_measured进行比较,将生成一个speed_error。 旋转周期通过霍尔传感器 A 和 flex timer 1 扫描,可在捕捉模式下对其进行配置。


PI控制器 

速度 PI控制算法用于处理speed_req和speed_measured之间的speed_error。PI控制器输出传输至 PWM发生器,以作为所施加电机电压的新校正值。

PI控制器程序在PIT设备中断程序PIT0_isr中计算,它每10 ms被调用一次。此中断将在电机停止时禁用,从而使PI也禁用。PI控制器的积分部分在低速 (低于 499 RPM)时禁用,因为在此情况下,速度测量并不准确且PI控制器可能不稳定。要确定何时禁用,程序中存在两个宏: MIN_CW_SPEED_32和MIN_CWW_SPEED_32。

PI控制器的输入为斜坡算法speed_scaled的输出,另一个输入为实际speed_measured。另外两个 输入为PI控制器参数trMyPI结构的指针。所有这些参数均供PI控制器函数GFLIB_ControllerPIp 使用。

此函数输出为s32Output。它将按照PWM比例缩放为delta_duty并添加到half_duty。此处理结果为duty_cycle,这将被加载至Flex Timer寄存器中。 每当速度比例更改或者电机改变时,必须配置 PI速度控制器参数。


软件实现

函数实现

整个电机控制算法由中断驱动。主函数仅用于MCU和应用初始化;如下图所示。初始化终止时, 程序将进入无限循环或其他应用处理程序 (web 服务器、 USB、FreeMASTER协议处理等)。

为了使此电机应用正常工作,需要使用四个中断。 四个中断处理程序分别提供以下服务: 

  • 溢出中断处理程序:用于电机停止检测和速度测量。溢出处理程序用于复位速度斜坡。
  • 输入捕捉中断处理程序:用于读取两个霍尔传感器边沿之间的时间 (处理速度传感器的基本部分)。
  • 周期中断:用于定时调用速度控制器、速度斜坡和应用状态机。 PIT中断在电机停止时禁用。
  • 霍尔传感器中断:用于扫描霍尔传感器的状态以及换相过程。换相过程生成适当的换相模式到六个栅极信号,而 PWM发生过程则为选定栅极输出生成相应的PWM 信号。可使用三位换相向量 “hall_status”从换相表中选择换相模式。换相模式随后将载入微控制器的寄存器中。


中断安装 

裸机版本与MQX版本的差别仅在于中断安装方法。我们这里仅仅介绍裸机版本中的安装方法。

在裸机版本中,我们可以直接安装中断。您可以通过在NVICISER寄存器中设置正确位来轻松实现中断。可以使用寄存器NVIC_IP配置中断的优先级。为了更好地理解,请看以下示例。

中断安装

NVICICPR2 = 0x4800010; // 首先清除可能的挂起中断
NVICISER2 = 0x4800010; // 启用中断
NVICICPR1 |= 0x80000000; // 首先清除可能的挂起中断
NVICISER1 |= 0x80000000; // 启用中断

设置中断的优先级

NVIC_IP(63) = 0x40; // 针对 FTM1 设置优先级
NVIC_IP(68) = 0x50; // 针对 PIT0 设置优先级
NVIC_IP(87) = 0x40; // 针对霍尔传感器设置优先级
NVIC_IP(90) = 0x40; // 针对霍尔传感器设置优先级

对外接口

本软件除了可以通过FreeMASTER调试通信软件来控制电机速度,还可以集成到一个完整的应用中作为电机驱动来使用。要达到此目的,我们需要封装三个对外接口API:

/************************************************************
* 函数名称:Set_speed
* 参数: 所需速度,带符号短整型数据格式的输入速度。输入值以 RPM 为单位。
*        电机序号,此例仅有一个。
* 返回:void
* 描述:用于为每个电机输入所需速度。
***********************************************************/
void Set_speed(signed short speed_input, int motor_number)
{ speed_req = INT16TOF32((speed_input*SPEED_TO_RPM_SCALE));}/*******************************************************
* 函数名称:Get_speed
* 参数:电机序号
* 返回:测得的速度
* 描述:用于获取每个电机的速度(带符号短整型数据格式).此值以 RPM 为单位。
******************************************************/
signed short Get_speed(int motor_number)
{signed long speed_temp;speed_temp = (speed_measured * MAX_SCALED_SPEED);return (speed_temp >> 15);
}/***************************************************
* 函数名称:Get_status
* 参数:无
* 返回:应用状态
*       0 — 处于空闲状态
*       1 — 处于停止状态
*       2 — 处于正在运行状态
**************************************************/
unsigned char Get_status(void)
{ return App_state; }

 十六宿舍 原创作品,转载必须标注原文链接。

©2023 Yang Li. All rights reserved.

欢迎关注 『十六宿舍』,大家喜欢的话,给个👍,更多关于嵌入式相关技术的内容持续更新中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148822.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT必应联网功能正式上线

今日凌晨发现,ChatGPT又支持必应联网了!虽然有人使用过newbing这个阉割版的联网GPT4,但官方版本确实更加便捷好用啊! 尽管 ChatGPT 此前已经展现出了其他人工智能模型无可比拟的智能,但由于其训练数据的限制&#xff…

CUDA+cuDNN+TensorRT 配置避坑指南

深度学习模型加速部署的环境配置,需要在本地安装NVIDIA的一些工具链和软件包,这是一个些许繁琐的过程,而且一步错,步步错。笔者将会根据自己的经验来提供建议,减少踩坑几率。当然可以完全按照官方教程操作,…

xilinx的原语的使用

xilinx的原语的使用 在学习FPGA实现千兆网时需要GMII转RGMII,这就涉及了原语的使用,特此记录! 一、原语 与RGMII接口相关的原语: BUFG:全局时钟网络 BUFIO:只能采集IO的数据,采集IO数据的时候延时是最低的…

Ubantu 20.04 卸载与安装 MySQL 5.7 详细教程

文章目录 卸载 MySQL安装 MySQL 5.71.获取安装包2.解压并安装依赖包3.安装 MySQL4.启动 MySQL 扩展开启 gtid 与 binlog 卸载 MySQL 执行以下命令即可一键卸载,包括配置文件目录等。 # 安装sudo软件 apt-get install sudo -y # 卸载所有以"mysql-"开头的…

Raspberry Pi 5 新平台 新芯片组

Raspberry Pi 5 的 CPU 和 GPU 性能提高了两到三倍;内存和 I/O 带宽大约是两倍;并且是首款采用英国剑桥内部设计的芯片的 Raspberry Pi 计算机,4GB 型号的售价为 60 美元,8GB 版本的售价为 80 美元 主要特点包括: 2.4…

[架构之路-229]:计算机体硬件与系结构 - 计算机系统的矩阵知识体系结构

目录 一、纵向:目标系统的分层结构 1.1 目标系统的架构 1.2 网络协议栈 1.3 计算机程序语言分层 二、横向(构建目标系统的时间、开发阶段):软件工程 三、二维矩阵知识体系结构 一、纵向:目标系统的分层结构 1.1…

关于字符拼接

当然,以下是加入了幽默注释的代码和对应的逻辑树: # 提示用户输入input和txt内容,期待用户真有输入 input_text input("请输入input文本:") # 好了,快点输入吧 txt_text input("请输入txt文本&#…

软件工程第四周

模型建立的基本理念 模型是对现实世界复杂系统的简化和抽象,目的是为了更好地理解、分析和预测系统的行为。它能够真实反映研究对象的整体结构 or 某一侧面(功能、反应)的本质特征和变化规律。可以建立不同的子模型用于反应系统不同的侧面。同…

DP读书:《openEuler操作系统》(四)鲲鹏处理器

鲲鹏处理器 一、处理器概述1.Soc2.Chip3.DIE4.Cluster5.Core 二、体系架构1.计算子系统2.存储子系统3.其他子系统 三、CPU编程模型1.中断与异常2.异常级别a.基本概念b.异常级别切换 下面为整理的内容:鲲鹏处理器 架构与编程(一)处理器与服务器…

Leetcode290. 单词规律

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 解题思路:哈希 力扣(LeetCode&…

MIT 6.S081学习笔记(第二章)

〇、前言 本文主要完成MIT 6.S081 实验二:system call 一、Using gdb (easy) Question requirements In many cases, print statements will be sufficient to debug your kernel, but sometimes being able to single step through some assembly code or inspe…

【C++】运算符重载 ⑤ ( 一元运算符重载 | 使用 成员函数 实现 前置 ++ 自增运算符重载 | 使用 成员函数 实现 前置 - - 自减运算符重载 )

文章目录 一、一元运算符重载1、使用 成员函数 实现 前置 自增运算符重载2、使用 成员函数 实现 前置 - - 自减运算符重载 二、完整代码示例 一、一元运算符重载 1、使用 成员函数 实现 前置 自增运算符重载 使用 全局函数 实现 前置 自增运算符重载 : 首先 , 写出函数名 ,…

Java数据结构————优先级队列(堆)

一 、 优先级队列 有些情况下,操作的数据可能带有优先级, 一般出队列时,可能需要优先级高的元素先出队列。 数据结构应该提供两个最基本的操作, 一个是返回最高优先级对象, 一个是添加新的对象。 这种数据结构就是优…

[架构之路-228]:计算机硬件与体系结构 - 硬盘存储结构原理:如何表征0和1,即如何存储0和1,如何读数据,如何写数据(修改数据)

目录 前言: 一、磁盘的盘面组成 1.1 磁盘是什么 ​编辑1.2 磁盘存储介质 1.3 磁盘数据的组织 1.3.1 分层组织:盘面号 1.3.2 扇区和磁道 1.3.3 数据 1.3.4 磁盘数据0和1的存储方式 1.3.5 磁盘数据0和1的修正方法 1.3.6 磁盘数据0和1的读 二、…

(四)正点原子STM32MP135移植——u-boot移植

一、概述 u-boot概述就不概述了,u-boot、kernel、dtb三件套,dddd 经过国庆艰苦奋战,已经成功把所有功能移植好了 二、编译官方代码 进入u-boot的目录 2.1 解压源码、打补丁 /* 解压源码 */ tar xf u-boot-stm32mp-v2022.10-stm32mp-r1-r0.…

mysql双主双从读写分离

架构图: 详细内容参考: 结果展示: 178.119.30.16(从)- master 178.119.30.17(从)- slave 由上述结果可以看出,产生了主备节点同时抢占VIP的问题(即脑裂问题&#xff09…

React18入门(第二篇)——React18+Ts项目配置husky、eslint、pretttier、commitLint

前言 我的项目版本如下: React: V18.2.0Node.js: V16.14.0TypeScript:最新版工具: VsCode 本文将采用图文详解的方式,手把手带你快速完成在React项目中配置husky、prettier、commitLint,实现编码规范的统…

nodejs+vue养老人员活体鉴权服务系统elementui

系统 统计数据:统计报表、人员台账、机构数据、上报数据、核验报表等,养老人员活体鉴权服务是目前国家养老人员管理的重要环节,主要为以养老机构中养老人员信息为基础,每月进行活体鉴权识别并统计数据为养老补助等管理。前端功能&…

使用正则表达式批量修改函数

贪心匹配,替换中的$1代表括号中的第一组。 使用[\s\S\r]代表所有字符,同时加个问号代表不贪心匹配:

springboot学生管理系统

采用技术:springbootvue 项目亲测可以完美运行