个人学习记录使用
文章目录
- 一、调试学习
- 1、电机MCU和通用MCU区别
- 2、凌鸥芯片命名规则
- 3、供电问题
- 4、IO口对应问题
- 5、PWM频率设置
- 6、电机参数问题
- 7、有感HALL相序问题
- 8、电机参数测量
- 9、ADC触发周期设定
- 10、系统初始化
- 11、凌鸥库函数软件过流点设定值BUG
- 12、母线电压采样电路
- 13、MOS管驱动电路
- 14、运放电路
- 15、SVPWM调制
- 16、单电阻采样
- 17、双电阻采样
- 18、三电阻采样
- 19、硬件过流保护电路
- 20、开环角度和观测器角度反向问题
- 21、空载状态速度环控制问题
- 22、开环强拖跑不起来原因分析
- 23、开环状态的三相波形不正弦原因分析
- 24、电流环调试技巧
- 25、SVPWM调制比
- 26、无法达到需求转速
- 27、功率环
- 28、开环时电流采集是正常的,一闭环电流就变差
- 29、相电流波形会突然产生尖峰
- 30、系统状态机
- 31、电流采样值换算
- 二、程序流程
- 三、FOC算法
- 四、硬件软件调试逻辑
- 五、附件
一、调试学习
1、电机MCU和通用MCU区别
相比较于通用的MCU,电机MCU的区别在:
- 电机MCU的集成度更高,MCU内部集成了电机驱动需要的运放、ADC、比较器、DAC、PWM模块等;
- 电机专用的芯片PWM模块一般会经过处理,用户比较好配置,同时和其他模块联动性更好,通用MCU一般没有该功能;
- 电机驱动对电流等信号采样要求比较高,电机专用芯片的ADC一般采样速度更快,精度更高(GD32F103系列ADC采样速率是12Msps,而LKS32MC03系列ADC采样速率为1Msps);
- 电机驱动算法中频繁的用到除法、开方、三角函数等运算,芯片内部一般会集成协处理器或者DSP等加速运算的单元,加快运算速度,提高效率;
- 通常需要较高的电流和电压,因此电机专用的MCU在功耗和散热方面可能进行了特殊设计。它们可能采用更低功耗的处理器内核、更有效的电源管理策略以及更好的散热结构,以确保在长时间、高负载运行下的稳定性和可靠性;
- 电机控制中广泛使用PWM信号来调节电机的速度和转矩。电机专用的MCU通常具有硬件加速的PWM模块,可以生成高分辨率的PWM信号,减少软件开销并提高控制精度;
- 电机控制应用可能涉及到安全相关的功能,如故障保护、过载保护、短路保护等。电机专用的MCU通常具有专门的安全特性,如安全启动、安全停止、安全更新等,以确保系统的安全性;
- 提供配套的电机控制固件库或算法,如PID调节、空间矢量调制(SVM)等,简化电机控制算法的开发难度;
- 其他外设,如串口、IIC、SPI、通用定时器等无太大区别;
总的来说,电机专用MCU在设计时会特别考虑到电机控制的需求,包括算法支持、实时性、精确测量、通信能力、抗干扰和安全特性等。这些特性使得它们在电机控制应用中比普通MCU更加适合。
2、凌鸥芯片命名规则
3、供电问题
调试过程中需要注意,只用3.3V供电时需要修改供电电压,否则无法初始化成功!!!
4、IO口对应问题
操作LED的寄存器位置似乎有问题,建议直接直接对IO进行操作
5、PWM频率设置
因为有公式计数周期 = ( 2 * TH + 1 ) / fclk
,所以
所以该段代码中的计数周期设置PWM_PERIOD等于PWM_FREQ斩波频率,所以设置PWM的开关频率即直接修改PWM斩波频率即可;
6、电机参数问题
该部分参数若是填写不正确可能会导致电机开环角度和观测器角度完全跟随不上,这种情况下电机开环状态下有可能可以转动,但是三相电流或者是DQ电流的跟随情况并不理想;
7、有感HALL相序问题
在有感HALL的电机控制中,第一次进行使用时需要用lksscope
来将HALL自学习标志置1来进行HALL自学习获取HALL的相序;
8、电机参数测量
9、ADC触发周期设定
在ADC模式的选择中使用的是基于PWM周期来触发的单次采样模式,而非连续采样模式,单次采样可以精确的控制采样时刻,实现与PWM同步采样精准控制电流,这是连续采样模式做不到的;
通过配置MCPWM的T0和T1时刻来实现硬件触发事件
就等同于ADC的采样周期是基于MCPWM的输出周期来进行触发采样的,而采样点是通过修改TriggerPoint0
来配置的;
最长触发周期可配置为16个周期的T1触发设置;
10、系统初始化
该部分多为系统时钟的配置内容,以及部分电源策略;
11、凌鸥库函数软件过流点设定值BUG
在软件过流点的判断中,是以当前三相电流和经过了内部转换的设定值相比较,如果大于设定值则判断为过流,下图为具体代码
在实际的测试中发现,不论软件过流点的设定值为多少,stru_FaultValue.nOverCurrent
的值始终为负数,导致了开环切闭环时进入该软件过流判断时直接故障了;
**补充:**这里有问题是因为数据类型赋值间的问题,stru_FaultValue.nOverCurrent
是s16类型,然而App2CoreCurTrans
最后的返回值是s32类型,并且返回值是59384大于s16类型的最大值导致数据溢出;
12、母线电压采样电路
通过上述的串联分压公式以及母线电压采样电路可以计算出母线电压的分压比
V
a
d
c
=
V
b
u
s
×
R
76
R
74
+
R
75
+
R
76
Vadc = Vbus \times \frac{R76}{R74 + R75 + R76}
Vadc=Vbus×R74+R75+R76R76
13、MOS管驱动电路
在配置MCPWM的极性配置时,要通过查询驱动芯片的芯片手册来获取控制逻辑时序图;
就比如LKS560
的控制逻辑为
上桥输入为高,输出为高,上桥输入为低,输出为低;
下桥输入为高,输出为低,下桥输入为低,输出为高;
14、运放电路
虚框内为封装在芯片内部的部分,所以我们可以通过修改R0
来修改运放倍数;
从下图可以得到运放的放大倍数为(200/(10.4+20*2)=3.96825
所以放大倍数为3.96825;
15、SVPWM调制
在功率桥电路中,有六个开关元件,通过SVPWM调制方法,这六个开关总共有8种开关状态的组合。我们把上桥臂的开关元件导通时定义为’1’,关断时定义为’0’,所以根据六个开关我们可以得到六组非零矢量V001、V010、V011、V100、V101、V110和两组零矢量V000、V111;
NMOS导通条件为Vgs大于一定值,PMOS导通条件为Vgs小于一定值
16、单电阻采样
分析基本非零矢量下的母线电流测量情况,以扇区1的V110和V100为例,规定从电机绕组电流流入的方向为正,从绕组电流流出的方向为负;
当在矢量V110作用下时,A相、B相的上管导通,C相的下管导通,电流的流向如下图所示,电流从A相和B相流入,从C相流出,此时母线电流的测量值I = -Ic;
当在矢量V100作用下时,A相的上管导通,B相、C相的下管导通,电流的流向如下图所示,电流从A相流入,从B相和C相流出,此时母线电流的测量值I = Ia;
通过上面的分析可以知道,如下图所示,在浅蓝色区域可以采集到C相电流,在浅橙色区域可以采集到A相的电流,在载波周期足够短时,我们可以近似认为这是同一时刻分别流过电机C相和A相的电流,从而重构出B相的电流;
在零矢量的作用下,母线上的采样电阻无电流流过,母线电流 I = 0
;
根据SVPWM的内容可以知道,六个非零电压矢量将平面划分成了六个扇区如下图所示:
对这6个扇区按照如上方法进行分析,得出了采集的母线电流与基本的非零矢量之间的对照关系,具体如下表所示
扇区 | 基本电压矢量 | 母线电流对应的相电流 |
---|---|---|
1 | V100 | IA |
1 | V110 | -IC |
2 | V110 | -IC |
2 | V010 | IB |
3 | V010 | IB |
3 | V011 | -IA |
4 | V011 | -IA |
4 | V001 | IC |
5 | V001 | IC |
5 | V101 | -IB |
6 | V101 | -IB |
6 | V100 | IA |
通过上述的图表可以看出,母线电压的采样电阻在其中一种非零矢量的开关状态下只能够采集到某一相的电流,那么
Q):单电阻采样是怎么重构出三相的电流的呢?这一个采样电阻可以在同一时刻采集到两个相电流值吗?
A):我们知道电感有续流的特性,流过它的电流不能突变,那么当我们的电感值足够大,载波周期足够小时,我们就可以把这一个载波周期内,两次不同开关状态下检测到的两相的电流,近似看成同一时刻这两相的电流值。从而根据基尔霍夫定律就可以重构出这一时刻的三相电流;
因此对于单电阻方案而言这就需要在一个周期采集到两路电流,然后再通过基尔霍夫定律得到三相电流
I
a
+
I
b
+
I
c
=
0
Ia + Ib + Ic = 0
Ia+Ib+Ic=0
17、双电阻采样
双电阻采样,是通过在全桥逆变电路的任意两个下桥臂分别串联一个采样电阻,就可以采样两路电流,在SVPWM驱动时,在下管全开时,采样两路电流,然后合成就可以拿到三路的电流,双电阻采样电路如下图所示
18、三电阻采样
三电阻采样,可以采到准确的三路电流,在SVPWM驱动时,根据当前矢量采出两路,进行合成就可以拿到三路准确的电流;
19、硬件过流保护电路
因为硬件过流保护采用的是比较器和DAC组合处理,所以需要同时配置好程序中比较器的配置和DAC的过流值设定;
20、开环角度和观测器角度反向问题
21、空载状态速度环控制问题
对于空载状态而言,可能刚开始加载电流的一瞬间速度会瞬间上去,没那么容易控制住,导致了PI参数可能直接调不回来了,但是还是有概率能够正常运转的,这种情况在带载的状态下应该是不会出现的,因为刚开始启动的电流并不能直接将速度拉的很高;
结论:是由于空载的时候开环切闭环时电流给的太大了,导致了在闭环前就有了高转速导致拉不回来了,这种情况下可以手动将开环切闭环时电流给定值给小;
22、开环强拖跑不起来原因分析
开环强拖跑不起来就只有一个原因,就是电流问题,因为角度是人为给定的,而电流是我们通过采样闭环运算的,因此可以分析:1、电流采样问题;2、电流环KpKi没调好;
23、开环状态的三相波形不正弦原因分析
开环状态的三相电流波形不正弦的情况一般有两种:1、电流环的KpKi没调好;2、电机的反电动势不正弦,这种情况可以用示波器测量,手动转动电机看看三相电流波形是否为正弦来验证;
24、电流环调试技巧
在跑电流环闭环时,由于电流环中Iq
的值是通过直接赋值来给定的,因此,在上位机中可以通过直接修改Iq
来实现电流环的电流给定,具体程序与上位机修改处如下图;
25、SVPWM调制比
通过三相六桥逆变器对应的8种开关状态对应的8个空间向量合成矢量输出有下公式:
U
out
=
2
U
dc
3
(
s
a
+
s
b
e
j
2
3
π
+
s
c
e
−
j
2
3
π
)
U_{\text{out}} = \frac{2U_{\text{dc}}}{3} \left( s_a + s_b e^{j \frac{2}{3} \pi} + s_c e^{-j \frac{2}{3} \pi} \right)
Uout=32Udc(sa+sbej32π+sce−j32π)
由此可得:
{
V
A
N
=
U
d
c
3
(
2
s
a
−
s
b
−
s
c
)
V
B
N
=
U
d
c
3
(
2
s
b
−
s
a
−
s
c
)
V
C
N
=
U
d
c
3
(
2
s
c
−
s
a
−
s
b
)
\begin{cases} V_{AN} = \frac{U_{dc}}{3}(2s_a - s_b - s_c) \\ V_{BN} = \frac{U_{dc}}{3}(2s_b - s_a - s_c) \\ V_{CN} = \frac{U_{dc}}{3}(2s_c - s_a - s_b) \end{cases}
⎩
⎨
⎧VAN=3Udc(2sa−sb−sc)VBN=3Udc(2sb−sa−sc)VCN=3Udc(2sc−sa−sb)
通过上式以及公式
U
a
N
+
U
b
N
+
U
c
N
=
0
U_{aN} + U_{bN} + U_{cN} = 0
UaN+UbN+UcN=0
可以得出下图中u1~u6
的值为2Udc/3
,以及内切圆半径为√3/3Udc
;
通过八种开关状态可得下表:
通过SVPWM的调制比公式
m
=
3
U
ref
U
dc
m = \frac{\sqrt{3} U_{\text{ref}}}{U_{\text{dc}}}
m=Udc3Uref
可得调试比最大为
m
max
=
3
⋅
2
3
U
dc
U
dc
=
1.1547
{m_{\text{max}}} = \frac{\sqrt{3} \cdot \frac{2}{3} U_{\text{dc}}}{U_{\text{dc}}} = 1.1547
mmax=Udc3⋅32Udc=1.1547
m min = 3 ⋅ 1 3 U dc U dc = 0.57735 {m_{\text{min}}} = \frac{\sqrt{3} \cdot \frac{1}{3} U_{\text{dc}}}{U_{\text{dc}}} = 0.57735 mmin=Udc3⋅31Udc=0.57735
当达到电压饱和时转速无法达到要求可以增大PWM的调制比,18919
为内切圆的最小调制比,因此调试时需要注意最大不能够超过值18919 * 1.15
,在慢慢增加调制比的过程中;
如果修改上述的调制比无法达到要求转速时,可以同时给电机的电感参数乘一个系数(如0.9)来观测是否转速会进行提升,慢慢的调整到转速能达到的最高亦或者是电流无法进行收敛时打住,如果这时候还无法达到要求那么这时候在回去调整PWM的调制比看看是否还能够继续增大;
26、无法达到需求转速
当达到电压利用率饱和时,还无法达到需求转速时除了上述**(25、SVPWM调制比)中描述的过调制技术和调整电机电感参数以外还有自动弱磁技术**;
27、功率环
首先,有功率公式:
电机的瞬时功率
=
I
d
⋅
U
d
+
I
q
⋅
U
q
电机的瞬时功率 = \sqrt{I_d \cdot U_d + I_q \cdot U_q}
电机的瞬时功率=Id⋅Ud+Iq⋅Uq
但是程序中使用的并不是电流和电压的实际物理值,所以我们需要进行拟合曲线的建立来确定计算出来的值wPowerValue
所对应的实际功率值;
28、开环时电流采集是正常的,一闭环电流就变差
主要原因是因为对于负载不大的应用来说,如果想要观测到小负载时候的相电流则需要较高的信噪比,不然在开环切闭环时效率增大,同样的转速下电流变小了,相当于有效信号变小,但是噪声没有变小,信噪比降低了很多,波形自然不太好了。
运放倍数3.96825(200/(10.4+40)),采样电阻0.005Ω
运放倍数16.129(200/(10.4+2)),采样电阻0.05Ω
29、相电流波形会突然产生尖峰
相电流采样时有尖峰产生一般有两个原因:1、相电流采样的采样点配置不正确;2、电压利用率饱和;
30、系统状态机
31、电流采样值换算
相电流峰值数据为1666,然后就可以得到和ADC量程的比值,即:1666/32768=0.05
(16位,其中第一位是符号位);然后通过ADC最大电压为3.6V,运放倍数为18.18,采样电阻0.05Ω,可以得到最大采样电流为3.6/18.18/0.05=3.96
,把两值相乘便可以得到实际相电流的峰值为3.96*0.05=0.198A
;
二、程序流程
- 首先关闭中断总开关;
- 然后是进行硬件部分的初始化内容,包括DSP、UART0、ADC、PWM、Timer、GPIO、DAC、PGA、CMP、HALL、TempSensor以及中断优先级的设置,最后打开中断总开关;
- 硬件初始化后进行系统后的初始化内容,包括故障检测代码检测以及恢复、电流采样通道偏置、观测器参数;
- 然后是主要的执行内容任务调度的部分,在1ms的任务调度中包括故障检测以及状态机调度,在10ms的任务调度中有开关检测和电位器检测;
三、FOC算法
电流环逻辑框架
四、硬件软件调试逻辑
在获取到了一套硬件和电机后,
-
首先是先验证一下MCPWM的输出(先验证预驱极性的设置,如下图中LKS560的极性为上管高有效,下管低有效,这里还需要注意的是芯片是否有内置预驱,如果有内置预驱时需要将
MCPWM_SWAP_FUNCTION
该内置预驱设置打开);
-
开关频率的配置以及死区时间的配置;
-
配置好硬件过流中
Fail1
并使能,然后是将硬件过流中DAC硬件过流参数配置好(这里确定Fail1
是通过原理图中过流OC连接的比较器来确定的,其中P端接电流采样
,N端接DAC
,P>N
时输出高电平,在Fail事件中配置为高电平有效(如果实际电路中P端接的是DAC,N端接的是电流采样则配置为低电平有效),再执行PWM封管操作);
-
-
将上述的硬件保护内容配置好后就可以使能DEBUG模式中的PWM调试模式;
到这个部分若是硬件和软件配置都没有问题的话已经可以输出三相PWM波形了(用电源测试的时候要把电流限流到0.1A左右),那如果在软件配置正确的情况下,如果三相波形不对或者其中一两相有问题,通常是有以下方案:1、通过测量两相回路的阻抗看看是否有元器件损坏;2、尝试更换MOS;3、PCB布板是否存在断路;4、芯片的虚焊或尝试更换芯片;
调试框架如下图:
软件调试中的注意事项:
五、附件
1、上述更详细的调试步骤可参考附件算法新平台使用手册中