简 介: 从这篇文章中转载
SeekFree
无刷直流电机电路设计开源方案仅供大家学习和使用。对于参加全国大学生智能汽车竞赛的学生,请注意:室内自行车组平衡轮驱动允许直接使用直流电机驱动或无刷电机驱动。无论哪种电机驱动电路,团队都需要自行设计和制造。不允许使用直接驱动的无刷电机。如果使用无刷电机驱动方案,则需要使用Infineon
作为电机驱动的主控芯片,单片机对功率电路及其附属电路没有限制。 : ,,
§00 前 言
第十七届全国大学生智能汽车竞赛已开启,根据规则,四轮摄像头组、无线充电组、平衡单车组及全模型组都需要采用英飞凌AURIX™
系列MCU
作为主控,其中平衡单车组允许增加动量轮,动量轮允许采用无刷电机,但无刷电机的驱动需要采用基于英飞凌AURIX™
的无刷电机驱动方案。其中无刷电机的型号不做限制,飞轮也不做限制,甚至允许切开车模来安装动量轮。
今天(2021-12-29
)下午14:00
,英飞凌联合逐飞科技在B
站也开展了一场直播,主要分享了英飞凌32
位微控制器AURIX
™系列TC3XX
架构简介和英飞凌无刷电机驱动方案的讲解及演示,后面也会把直播的视频放到“逐飞科技”B
站账号上。
“”B站首页链接:https://space.bilibili.com/351511552,大概明天就会上传。因为考试或其他原因没赶上今天直播的同学也可以结合回看直播视频来理解该开源项目。好吧,接下来正式开始今天的开源项目介绍。
- https://gitee.com/seekfree/TC264_BLDC_Project
§01 BLDC方案
下面是逐飞基于英飞凌TC264的智能车BLDC项目开源内容。
▲ 图1.1 2021年9月15日竞赛组委会在英飞凌上海公司总部
为更好的支持大家学习无刷驱动的软、硬件方案,英飞凌及组委会委托逐飞科技为参赛同学们提供开源方案作为学习资料,将英飞凌在市场中成熟应用的电机驱动技术应用到大赛中,供大家做无刷电机驱动的设计参考,让同学们在学校中有机会了解到市场需求和相关技术。
“逐飞科技”为英飞凌官方合作伙伴,针对第十七届智能汽车竞赛平衡单车组的BLDC
应用需求,为参赛选手们精心设计了符合赛事需求的Infineon BLDC
驱动开源方案供大家参考,该方案使用TC264
单片机,无刷电机为有感、内转子、2860KV
、电压为12V
。开源项目目前已实现电机正反转、内部速度闭环、支持刹车、支持堵转保护、支持速度输出。
▲ 图1.2 英飞凌实验室参观
在讲解本开源项目之前,还需要再简单科普一下无刷电机的原理,下面我们以三槽两极内转子电机进行讲解。
图1是无刷电机的基本模型示意,电机内部有三个线圈,每个线圈的一端都连接起来,另外一端引出到外部,中间有一个具有N/S两极的永磁铁内转子。
▲ 图1.3 BLDC电机原理示意图
如果我们按照一定的顺序给电机通电,转子就可以旋转起来。我们举例几种给电的情况来进行简单分析和模拟:
A相产生的磁场会吸引转子的S极,B相线圈产生的磁场会吸引转子的N极,转子会转到向左倾斜的位置,如下图所示。(其中每一相产生的磁场我们需要使用右手螺旋定则判断磁场的南极与北极)
▲ 图1.4 AB相通电情况
A相产生的磁场会吸引转子的S极,C相线圈产生的磁场会吸引转子的N极,转子会转到水平位置,如下图所示。
▲ 图1.5 AC相通电情况
B相产生的磁场会吸引转子的S极,C相线圈产生的磁场会吸引转子的N极,转子会转到向右倾斜的位置,如下图所示。
▲ 图1.6 BC相通电情况
B相产生的磁场会吸引转子的S极,A相线圈产生的磁场会吸引转子的N极,转子会转到向左倾斜的位置和a种情况类似但转子的南北极相反,如下图所示。
▲ 图1.7 BA相通电情况
根据前四次的举例,我们可以得出第5、第6次也可以依次类推。
最终我们总结一下每次换相之后转子到达的位置,转动一圈需要换相6次,每次换相角度为60度,如下图所示:
▲ 图1.8 AB,AC,BC,BA,CA,CB依次通电磁铁所处稳态位置
以上就是我们控制无刷电机转动的基本原理了,但是要真正的实现无刷电机的驱动,我们还缺少一个最重要的东西,就是如何知道转子已经到达预定位置,因为我们只有知道了转子到达了预定位置之后才能进行换相,这样电机才能顺滑的运转。转子位置检测常用的有三种方式。
- 方式一:通过过零检测,三相相电压与电机中性点电压进行比较,比较器输出的三路信号就类似于霍尔的三路信号一样。过零检测的优点在于电机与驱动连接的线较少,但是缺点在于启动的时候需要开环启动,会导致低速的时候控制效果差,并且硬件电路会更加复杂。当然也有其他办法使得在无感的方式下低速控制效果也不错,但是会大大增加软件上的复杂程度。
- 方式二:通过安装霍尔检测转子位置,一共安装三个霍尔分别间隔120度安装,霍尔输出的波形如下图7所示(使用逻辑分析仪采集到的波形),每当波形改变的时候就需要进行换相。优点是电路结构简单,缺点是成本会稍微高一点点。
- 方式三:加装磁编码器直接检测转子具体的位置。这种方式成本会高很多。
▲ 图1.9 三相HALL传感器输出信号
我们推荐选择,采用霍尔检测转子的位置信息,驱动电路硬件会稍微简单一点,成本上也并未增加太多。我们推荐的有感无刷电机就是采用这种方式,使用这种电机,还可以节省下有刷电机闭环使用到的编码器,算下来反而更实惠。这一种方式可以得到转子位置信息,我们就可以通过位置信息来编写程序进行换相,然后就可以驱动无刷电机转动了。
§02 芯片选型
Infineon BLDC
驱动开源项目的电机控制芯片选型过程。
经过我们和英飞凌及组委会的讨论,本次平衡单车组推荐使用英飞凌的TC264
做无刷电机控制芯片,其中预驱动芯片和MOS
的选型英飞凌也有推荐,可以通过英飞凌生态圈了解到。在我们前期验证时,英飞凌主任工程师Cobb Song
也给了我们很大的帮助,感谢英飞凌为智能车竞赛提供的大力支持。
2.1 单片机特点
这款单片机特点如下:
1. 使用双核TriCore™架构的高性能 32 位微控制器。 2. 芯片单核主频高达 200MHz。 3. 容量高至2.5MB的ROM以及高至240KB的RAM,并且都带ECC(纠错编码) 4. 包含4个12位SAR ADC转换器模块。 5. 拥有CCU6高级定时器,可用于输出无刷电机所需要的控制信号,支持trap信号输入,用于实现快速关闭定时器输出。 6. 拥有GTM高级定时器,支持输入捕获、PWM输出等功能,可用于输出无刷电机所需要的控制信号,支持快速关断功能。并且能同步捕获霍尔信号以及外部输入的PWM信号。 7. UART 接口4 个、SPI 接口4 个。
2.2 功能简介
以下几个具有特点的功能介绍下。
2.2.1 CCU6高级定时器
该芯片的CCU6
定时器,可以直接输出三路PWM
信号或者是三路互补的PWM
信号,当是互补的PWM
信号时可以设置死区,并且都可以通过刹车信号来让定时器停止输出。通过三个MOS
桥,我们有三种驱动方式来驱动无刷电机:
- 方式一:上桥给PWM信号下桥通过IO控制开启与关闭。
- 方式二:上桥通过IO控制开启与关闭下桥给PWM信号。
- 方式三:上下桥都给PWM信号(逐飞本次开源项目便使用的这种方式)。
第三种方式需要注意的是上下桥的PWM
信号必须是互补的,因为上下桥不能同时导通,否则出现电源与地短路的情况,由于MOS
开关具有延时,所以互补PWM
信号还必须设置死区,作用是当其中一个桥关闭之后要延时一段时间再打开另外一个桥,避免出现电源对地短路的情况。插入死区之后的互补PWM
信号如下图8
所示(使用逻辑分析仪采集到的波形)。
▲ 图2.2.1 MOSFET死区时间三种类型
2.2.2 GTM高级定时器
该芯片的GTM
定时器,可以直接捕获用户输入的PWM
周期以及占空比,初始化完成之后用户只需要调用底层函数即可获得输入的PWM
周期和占空比。更多的功能将在以后的版本进行更新。
§03 功率电路
功率电路包括MOSFET三相桥电路的预驱动以及MOSFET。
预驱我们选择了AUIRS2181
,其特点是驱动能力强,输出1.9A
,输入2.3A
,电压范围为10-20V
,且带有欠压保护,兼容3.3V
和5V
的输入逻辑信号。
MOS
管我们选择的型号是BSC014N04LS
,这款MOS
电流高达198A
,10V
的时候内阻低至1.1
毫欧,开启电压低至1.2V
左右,性价比较高。所以逐飞推荐的英飞凌无刷电机驱动方案的三大主要器件组成为:TC264+ AUIRS2181+BSC014N04LS
,硬件电路原理图请直接从Gitee上下载。
▲ 图3.1 单片机与调试端口
▲ 图3.2 无刷电调接口
▲ 图3.3 无刷电调功率电路
这里的图如果看不清楚不要紧,原理图的PDF文件会放到开源资料里的。
§04 软件代码
4.1 工程目录结构
逐飞Infineon智能车BLDC开源项目的目录结构如下图所示。
├─.settings
├─CODE
├─Libraries
│ ├─doc
│ ├─infineon_libraries
│ │ ├─Configurations
│ │ ├─iLLD
│ │ ├─Infra
│ │ └─Service
│ ├─seekfree_libraries
│ │ └─common
│ └─seekfree_peripheral
└─USER
CODE文件夹下放置的是逐飞科技精心编写的无刷电机驱动相关代码。
- Infineon_libraries是英飞凌官方的底层驱动,如果还需要其他的单片机片内外设功能,可以基于Infineon_libraries自行编写程序实现。
- Seekfree_libraries和seekfree_peripheral则是逐飞基于TC264制作的应用底层库。
- user文件夹下放置的是主程序及中断文件。
4.2 单片机相关内设驱动
无刷电机需要用到的单片机片内外设有:
- ADC:主要用于检测电源电压、采集放大时候的母线电流以及相电流
- CCU6定时器:主要用于输出电机所需要用到的互补PWM信号,并且实现自动堵转保护,无需代码干预,当母线 电流超过设定值的时候,自动关闭定时器输出。
- GPIO:主要用于LED指示灯,用于显示各种状态,并且初始化输出方向信息和速度信息的端口。
- 按键:通过板载的按键来改变输入来源,可在板载电位器和用户PWM信号之间切换。
- PWM输入:使用GTM模块的输入捕获实现对外部PWM信号的周期以及占空比获取。
无刷电机的驱动文件有:
- bldc_config.h文件:用于配置电机参数,例如是否开启闭环、是否开启刹车、最大转速设置。
- hall文件:主要用于检测霍尔的值、换相时间计算、转速计算。
- otor文件:主要用于电机转动实现、占空比输出、速度和方向信息输出。
- ove_filter文件:主要用于,对数据进行滑动平均滤波。
- id文件:主要用于对转速进行速度PID闭环。
├─CODE
│ adc.c
│ adc.h
│ bldc_config.h
│ ccu6_pwm.c
│ ccu6_pwm.h
│ gpio.c
│ gpio.h
│ hall.c
│ hall.h
│ key.c
│ key.h
│ motor.c
│ motor.h
│ move_filter.c
│ move_filter.h
│ pid.c
│ pid.h
│ pwm_input.c
│ pwm_input.h
│ version.txt
│ 本文件夹作用.txt
4.3 主函数与中断函数
主函数与中断的文件存放在USER文件夹中,无刷电机大部分代码都是在中断内运行的,中断相关的函数全部放在了isr.c中。
§05 工作流程
为了更清楚的表达起工作流程,整个项目的软件流程绘制了几张流程图,同时也加以文字说明。
5.1 主函数
▲ 图5.1.1 主函数流程图
主函数主要的作用是初始化各种外设以及一些软件资源,然后在主循环中持续的发送电机信息到虚拟示波器,便于观察电机运行情况,还根据电机运行状态来点亮和关闭故障灯及运行灯。
5.2 PWM中断
▲ 图5.2.1 PWM中断流程图
PWM周期中断是无刷电机的核心中断,它是由每个PWM周期结束时触发的中断,它的刷新频率就是PWM初始化时的频率。
在中断内主要是获取母线电流、相电流、板载电位器电压。母线电流在之后做电流环的时候需要使用到,也可以用于做故障检测,当检测到电流过大的时候,及时关闭输出以保护硬件,相电流可以用于之后做FOC驱动方案的时候提供支持。
扫描霍尔这个流程块中,主要是统计每次换相的时间,如果换相时间过长则认为出现故障此时应该及时关闭输出。当电机正常运行的时候将每次换相的时间都保存在数组内,当得到最近6次的换相时间之后,我们就能知道电机转动一圈所花费的时间,从而就能够计算出电机的转速了。然后根据读取到的霍尔值计算出下次期望的霍尔值。
霍尔扫描结束之后,开始检查延时换相时间是否到,时间没有到则延时时间减一,延时时间为0的时候开始进行换相动作,这里延时换相的原因是因为在电机高速运转的时候霍尔有滞后导致的,可能有人问为什么霍尔滞后了,你还要延时换相呢,因为我们采用的方法是,当霍尔出现滞后之后,我们换相的时候并不是换到下一相,而是换到了下下相,这样就相当于超前换相了,所以我们需要加一定的延时去匹配,从而得到一个最佳的换相点。
5.3 定时器中断
周期定时器中断频率为200Hz
,主要用于根据DIR
引脚设置电机是正转还是反转,然后通过SPD
引脚输出电机的速度信息,这样便无需编码器也能读取到电机的当前转速。然后进行PID
闭环调节,这里主要实现是将我们采集到的电机速度与设置的电机速度求差,将得到的偏差×系数KP
得到比例输出Pout
,然后对偏差*系数KI
并将每次计算出的结果进行求和得到Iout
,最终将Pout
和Iout
相加,然后将相加之后的值限幅之后输出到占空比寄存器驱动电机运转。其中KP
、KI
系数可能需要自己在多多调试,以找到更加完美的参数,使得电机运行更加迅速且稳定。
▲ 图A5.3.1 定时器中断工作流程图
5.4 GTM定时器中断
▲ 图5.4.1 GTM 定时器中断工作流程图
GTM
定时器中断主要作用是用来接收外部PWM
信号的周期与高电平时间,然后计算信号的占空比,根据占空比的大小设置电机的转速,从而实现外部控制器来控制电机的