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.rhkb.cn/news/148352.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android开源 Skeleton 骨架屏 V1.3.0

目录 一、简介 二、效果图 三、引用 Skeleton 添加jitpack 仓库 添加依赖: 四、新增 “块”骨架屏 1、bind方法更改和变化: 2、load方法更改和变化: 五、关于上一个版本 一、简介 骨架屏的作用是在网络请求较慢时,提供基础占位&…

LabVIEW开发带式谱感测技术

LabVIEW开发带式谱感测技术 如今,通过无线网络传输的数据量正在迅速增加,并导致频谱稀缺。超过数十亿的无线设备将被连接起来,并需要互联网接入。因此,无线电频谱管理方案的效率不足以授予对所有设备的访问权限。在频谱分配中&am…

开源白板工具 Excalidraw 架构解读

本文讲解开源白板工具 Excalidraw 的架构设计。 版本 0.16.1 技术栈 Vite React TypeScript Yarn Husky。 脚手架原来是用的是 Create React App,但这个脚手架已经不维护了,一年多没发布新版本了。 目前市面上比较流行的 React 脚手架是 Vite&…

CSS学习小结

css的两种使用方式&#xff1a; ①内嵌样式表 ②导入外部样式表&#xff08;实际开发常用&#xff09;<link href"...." rel"stylesheet"/> 选择器&#xff1a; ①标签选择器&#xff1a;通过标签种类决定 ②类选择器&#xff1a;class"..…

SSRF+redis未授权漏洞复现

1.SSRF漏洞简介 SSRF&#xff08;Server-Side Request Forgery&#xff09;即服务器端请求伪造&#xff0c;是一种由攻击者构造攻击链传给服务器&#xff0c;服务器执行并发起请求造成安全问题的漏洞&#xff0c;一般用来在外网探测或攻击内网服务。当网站需要调用指定URL地址…

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

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

雷达编程实战之提高探测速度

有效帧频率作为雷达一个非常核心的指标&#xff0c;它代表了雷达探测识别的速度&#xff0c;速度越快&#xff0c;后级各项智能驾驶功能就能得到更快、更有效的判断。本篇文章首先从硬件的角度&#xff0c;提供了一种合理利用片上资源提高探测识别速度的常用方法&#xff0c;然…

vertx的学习总结6

Beyond the event bus 一、章节覆盖&#xff1a; 如何在事件总线之上公开服务 verticles和事件总线服务的异步测试 动态代理&#xff1a; MyService 接口 package porxy.test;import io.vertx.codegen.annotations.ProxyGen;ProxyGen public interface MyService {void he…

Neo4j最新安装教程(图文版)

目录 一、软件介绍 二、下载软件 1、官方下载 2、云盘下载 三、安装教程 1、首先配置Neo4j的环境变量 2、启动neo4j服务器 3、访问界面 一、软件介绍 官网地址&#xff1a;https://neo4j.com/ Neo4j是一个高性能、可扩展的图数据库管理系统。它专注于存储、查询和处理大…

1.6 计算机网络的性能

思维导图&#xff1a; 1.6.1 计算机网络的性能指标 前言&#xff1a; 我的理解&#xff1a; 这段前言主要介绍了关于计算机网络性能的两个方面的讨论。首先&#xff0c;计算机网络的性能可以通过一些重要的性能指标来衡量。但除了这些指标之外&#xff0c;还有一些非性能特征…

JAVA学习(4)-全网最详细~

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

Flutter开发之Package与Plugin

前言 在flutter中有包和插件两个概念&#xff0c;插件 (plugin) 是 package 的一种&#xff0c;全称是 plugin package&#xff0c;我们简称为 plugin&#xff0c;中文叫插件。包(Package)主要指对flutter相关功能的封装&#xff0c;类似于Android中的插件和iOS中的三方库。而插…

CUDA+cuDNN+TensorRT 配置避坑指南

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

插入排序:简单而有效的排序方法

在计算机科学中&#xff0c;排序算法是一个重要且常见的主题&#xff0c;它们用于对数据进行有序排列。插入排序&#xff08;Insertion Sort&#xff09;是其中一个简单但有效的排序算法。本文将详细解释插入排序的原理和步骤&#xff0c;并提供Java语言的实现示例。 插入排序的…

B2主题优化:WordPress文章每次访问随机增加访问量

老站长都知道&#xff0c;一个新站刚开始创建&#xff0c;内容也不多的时候&#xff0c;用户进来看到文章浏览量要么是0&#xff0c;要么是 个位数&#xff0c;非常影响体验&#xff0c;就会有一种“这个网站没人气&#xff0c;看来不行”的感觉。 即使你的内容做的很好&#x…

全志ARM926 Melis2.0系统的开发指引②

全志ARM926 Melis2.0系统的开发指引② 编写目的4. 编译工具链使用4.1.工具链通用配置4.2.模块的工具链配置4.3.简单的 makefile 5. 固件烧录工具的安装5.1.PhoenixSuit 的安装步骤5.2.检验 USB 驱动安装5.3.使用烧录软件 PhoenixSuit -全志相关工具和资源-.1 全志固件镜像修改工…

HTTP协议,请求响应

、概述 二、HTTP请求协议 三、HTTP响应协议 四、请求数据 1.简单实体参数 RequestMapping("/simpleParam")public String simpleParam(RequestParam(name "name" ,required false ) String username, Integer age){System.out.println (username "…

Boost程序库完全开发指南:1.2-C++基础知识点梳理

主要整理了N多年前&#xff08;2010年&#xff09;学习C的时候开始总结的知识点&#xff0c;好长时间不写C代码了&#xff0c;现在LLM量化和推理需要重新学习C编程&#xff0c;看来出来混迟早要还的。 1.const_cast <new_type> (expression)[1] 解析&#xff1a;const_c…

基于Vue+ELement实现增删改查案例与表单验证(附源码)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《ELement》。&#x1f3af;&#x1f3af; &#x1…

mysql双主+双从集群连接模式

架构图&#xff1a; 详细内容参考&#xff1a; 结果展示&#xff1a; 178.119.30.14(主) 178.119.30.15(主) 178.119.30.16(从) 178.119.30.17(从)