前面
主控
梳理控制逻辑
FTM_PWM_Config
从整体上看,这个模块功能就是,输入三相的电压信号,输出6路PWM信号。
FlexTimer是S32K1xx中功能最强最复杂的Timer,其基于16bits的Counter能够实现:输入捕获、输出比较、产生PWM、正交解码等功能。
很显然这里使用了产生PWM的功能。
打开FTM_PWM_Config
因为不是互补输出,所以不用死区时间。
因为采用的是BLDC控制,所以只要保证两相通电就可以,工作模式选择上桥臂PWM-下桥臂常闭。
Control_Logic
再往前就是控制逻辑了:
双击进入:
先看ADC触发部分:enable_FTM_PDB_ADC_triggering
有关FTM与PDB触发ADC采样的更多要点,可以看这个:
ADC由FTM和PDB模块触发
TPP该模块允许启用/禁用三相预驱动(tpp)事件检测和MCU事件中断。
相的合成确实出乎我的意料,这还能这么连?
Trapezoidal_Control
梯形控制:
先来看看PWM占空比和方向怎么得到的:
还比较好理解,就是两个功能,正反转与占空比输出。
再来看六步换相的逻辑:
在电机处于静止状态时,要注意需要进行预定位,也就是把转子拉到指定位置,这个是六步换相的难点。
当电机启动时u1=1,进行以下判断:
主要是对是否进行预定问进行判断,0执行,1不执行。
判断出来的结果会在这里用到:
这个模块就是一个条件函数ifelse
所以你就会发现,在不同的条件下,上面预定位的不需要扇区这个参数输入,下面正常运行的需要扇区这个参数:
到这一步就得出所需要的三相,下一步就是实际换相:
双击进入状态机:其实就是根据输入的三相012状态,进行解码,来控制上下桥臂。
到这里方波控制换相部分就结束了,咱们继续往上看,找找扇区是怎么判断的,参考电压又是个啥东西?
Hall_Emulation_Sequence
扇区的判断来自Hall传感器,双击进入:
非常好理解,就是很常见的那个Z=A+2B+4C那个扇区判断公式。
接下就是重点了,事件以及IO控制,直接看模型。
Event_Control
IO Contrals
系统的状态判断就是个条件判断语句:有故障就不run,没故障就准备run。
在Ready_to_go里面,是一些点灯,以及按键读取
在Fault里面是:指示灯和状态参数传递
在Running里面是: