前面

尝试解读NXP提供的有感BLDC开环控制模型。

主控

主控必不可少,选择自己的主控芯片。
image.png

梳理控制逻辑

总框架如下:
image.png
咱们从下往上看,就从产生PWM信号那里看。
image.png

FTM_PWM_Config

从整体上看,这个模块功能就是,输入三相的电压信号,输出6路PWM信号。
image.png
FlexTimer是S32K1xx中功能最强最复杂的Timer,其基于16bits的Counter能够实现:输入捕获、输出比较、产生PWM、正交解码等功能。
很显然这里使用了产生PWM的功能。
打开FTM_PWM_Config
image.png
因为不是互补输出,所以不用死区时间。
image.png
因为采用的是BLDC控制,所以只要保证两相通电就可以,工作模式选择上桥臂PWM-下桥臂常闭。

Control_Logic

再往前就是控制逻辑了:
image.png
双击进入:
image.png
先看ADC触发部分:enable_FTM_PDB_ADC_triggering
image.png
有关FTM与PDB触发ADC采样的更多要点,可以看这个:
ADC由FTM和PDB模块触发
TPP该模块允许启用/禁用三相预驱动(tpp)事件检测和MCU事件中断。
相的合成确实出乎我的意料,这还能这么连?
image.png

Trapezoidal_Control

image.png
梯形控制:
image.png

先来看看PWM占空比和方向怎么得到的:
image.png
还比较好理解,就是两个功能,正反转与占空比输出。

再来看六步换相的逻辑:
image.png
在电机处于静止状态时,要注意需要进行预定位,也就是把转子拉到指定位置,这个是六步换相的难点。
image.png
当电机启动时u1=1,进行以下判断:
image.png
主要是对是否进行预定问进行判断,0执行,1不执行。
image.png
判断出来的结果会在这里用到:
image.png
这个模块就是一个条件函数ifelse
image.png
所以你就会发现,在不同的条件下,上面预定位的不需要扇区这个参数输入,下面正常运行的需要扇区这个参数:
image.png
到这一步就得出所需要的三相,下一步就是实际换相:
image.png
双击进入状态机:其实就是根据输入的三相012状态,进行解码,来控制上下桥臂。
image.png
到这里方波控制换相部分就结束了,咱们继续往上看,找找扇区是怎么判断的,参考电压又是个啥东西?

Hall_Emulation_Sequence

image.png
扇区的判断来自Hall传感器,双击进入:
image.png
非常好理解,就是很常见的那个Z=A+2B+4C那个扇区判断公式。
接下就是重点了,事件以及IO控制,直接看模型。

Event_Control

image.png
初始化Hall,就是读取引脚状态:
image.png
硬件触发引脚中断:
image.png

IO Contrals

image.png
系统的状态判断就是个条件判断语句:有故障就不run,没故障就准备run。
image.png
在Ready_to_go里面,是一些点灯,以及按键读取
image.png
在Fault里面是:指示灯和状态参数传递
image.png
在Running里面是:
image.png