一、什么是工程师文化
二、什么是遗传演算法
三、如何建立永磁体磁场模型
四、如何建立绕组解析模型
五、如何建立损耗以及散热模型
六、如何进行PMSM全局优化设计(Global Optimization)

一、什么是工程师文化

知乎中有一个我很喜欢的问题:什么是工程师文化?里面有100多个回答,大家讨论了什么是自己心中的工程师文化,高票回答提出了如下观点:

工程师文化,是一种内心的欲望与恐惧的表达。对创造的欲望,对世界的恐惧。因为欲望而创造,因为恐惧而改造。创造世界,改造世界。这种欲望是如此的强烈,这种欲望驱使著我们从树上爬了下来,生起了火,盖起了房,驯服了马,开上了车,造出了原子弹,发射了好奇者。而这种恐惧也是如此的强烈,逼迫著我们不停的看向周围的一切。

我觉得还要增加一点,就是工程师要有geek精神,优秀工程师不仅要改造世界,还需要用最小的成本,最大的效能改造世界。抽象的来说,工程师的任务,就是在满足各种约束的情况下,把不确定的事情确定化,达到最优的目标。

举个例子:我们现在要设计一个工字梁:

这个工字梁有几何上三个参数需要确定 a,b,c ,其中a = [1,10]mm、b = [50,150]mm、c = [50,250] mm,工字梁总长度 L 是3m,材料的杨氏模量 E 是200 GPa ,密度 
ho 是8000 Kg/m^3 。这个工字梁要起到一个什么作用呢?中间要能承受一个集中力,两端铰支(可以旋转)。要求这个梁在力的作用下最大应力 sigma 要低于 100MPa ,重量低于20 Kg

一般的初级工程师碰到这个问题会怎么做呢?我们知道,满足约束的设计变数组合就是一个产品设计,这个我们一般称之为可行解,就是满足设计要求,那这么找到一个可行解呢?去找前人的设计产品啊,都正常工作那么多年了,肯定是一个可行解嘛,看看人家参数是什么样的,看看几何参数 a,b,c 在什么范围内,根据自己的经验选上几组参数,然后通过如下公式计算出梁的最大应力和重量:

sigma=frac{FL}{4I}(a+c/2)

W=(2ab+ca)L
ho

其中 I=frac{ac^3}{12}+2left[ frac{ba^3}{12}+ab(a/2+c/2)^2 
ight] 为梁的抗弯截面模量。

比如假如尝试了一下 a=1mmb=144mmc=117mm ,计算一下呢得到 sigma=78MPaW=9.7Kg应力和重量满足要求,则设计结束,这样做的好处就是设计的产品一般不会翻车,坏处就是永远跟在别人的后面,没有技术创新,或者只能进行微创新。

如果你是一个追求geek文化的工程师,显然不会满足前面的设计的?为什么——因为满足应力和重量的解太多了,我们只是找了其中一个可行解,而不是最优解。

那如何找最优解呢?——一个显而易见的方法就是穷举啊,我们把所有的设计组合都算一下一下,看看哪个是最优解。比如我们可以这么做:将 a,b,c 都分成10段,然后组合进行计算,这样我们就可以通过 10^3 次计算来找到我们最优解,perfect。

穷举法在变数较少的时候是没有问题的,但是在实际工程中会遇到很大的困难,因为实际中的变数都比较多,比如现在某个产品设计由10个变数 x_1,x_2,...,x_{10} ,如果穷举的话,每个变数也取10个值的话,那就要计算 10^{10} 次,也就是10亿次,这显然是不现实的,那怎么解决这个问题呢?


二、什么是遗传演算法

知乎词条对遗传演算法有如下描述,现摘抄如下:

遗传演算法 (Genetic Algorithm),是启发式演算法 (heuristic algorithm)中比较经典的一种演算法,最早是由John Holland提出的;顾名思义,就是根据遗传进化过程而设计的演算法了。简单来讲,遗传演算法源自达尔文的进化论观点「survival of the fittest」;在种群进化的过程中,大自然会不断的选择淘汰一部分适应能力差的个体,同时一些适应能力强的个体得意存活(进化)。

It is not the strongest of the species that survives, nor the most intelligent that survives. It is the one that is most adaptable to change.

遗传演算法需要做的,就是模拟一个种群的进化过程;在这个过程里,我们可以简单地认为:

  • 基因(gene)组成了染色体(chromosome),基因由0或者1来表示(我们这里只涉及二进位编码);
  • 一条染色体由多个基因组成,即由0/1的字元串组成,如00000,01011;
  • 一个种群(population)由多个个体(individual)组成,或者说是由多个染色体(chromosome)组成;
  • 每个个体(染色体)的优劣由适应度(fitness)函数所决定;

比方说,我们要人为的构建一个知乎大V,这个大V需要有一些特征,比方说身高、体重、长相、学历、人品等等。据此,我们根据一定的编码规则(encoding),可以随机的生成一个用户,比方说0001010111。假设我们已知了一个适应度函数,比方说你的眼缘....用以评价该用户是否为大V(the quality of the chromosome)。那么我们可以根据我们的fitness function计算得到该个体的适应度。重复这个过程,我们便可以得到多个知乎用户,即一个种群。

基本流程:

  • 初始化一个种群;
  • 计算该种群每个个体的适应度;
  • 进行选择个体(selection)、交叉(crossover)、个体变异(mutation)等操作;
  • 重复2-3步直到满足停止规则

当然这里会涉及到一些问题,比方说如何选择selection的方法 (e.g., roulette wheel selection? tournament selection),如何选择交叉、变异的方法等等。

在这个过程中,intuitively,「眼缘好」的子代(offspring)得以「繁衍生息」,从而不断的产生「眼缘更好」的用户;那么最终,当我们停止演算法的时候,我们可以选出「眼缘最高」的这个知乎用户作为知乎大V了。当然了,我们不能保证这个大V是全局最优解,除非你遍历所有特征的组合,不然你是不知道该用户是不是所有可能的组合中「眼缘最高的」。

我们可以比较容易的理解,遗传演算法的本质就是一个在解空间中不断进行随机搜索的演算法,在搜索过程中不断地产生新的解,并保留更优的解。优点来说,我认为一方面它比较容易实现,另一方面它可以在接受的计算时间内,得到较好的结果;缺点来说,那自然就是随机搜索带来的问题了,除了搜索过程中会遇到的问题之外,显而易见的就是无法保证获得全局最优解了。

以上来自于知乎词条「遗传演算法」的描述,相关文章见词条 遗传演算法。

对于上面的介绍大家可能没有直观的感受,我们还是拿工字梁做个例子:

我们把 a,b,c 称之为变数(variable),a = [1,10]mm、b = [50,150]mm、c = [50,250] mm称之为变数区间(variable boundary),最大应力 sigma<100MPa 称之为约束(constraints),重量 W 最小称之为目标函数或者适应度(objective function or fitness function),为了增加难度,增加一个目标——最大变形量def最小。其中最大变形量的表达式为:

def=frac{FL^3}{48EI}

所有变数组成变数空间(解空间),满足约束的子空间即为可行解集合。通过计算,所有组合及其结果如下:

当然我们的目标值变化(区间减小)的话,解空间也会跟著变化(减小)。

可见 a 对变形量和重量的影响更明显,取下限时较好; b 的取值较为均匀,说明不是很敏感; c 的取值偏上限更好。


前面工字梁的例子较为简单,我们来试一个稍微复杂的例子,一个表贴式永磁同步电机(PMSM)的设计。对于PMSM还不是很了解的童鞋们可先阅读J Pan:如何快速理解永磁同步电机?,在文章中我们说了,永磁电机之所以能旋转起来,是因为定子、转子分别产生了一个旋转的磁场,其中转子磁场一般是永磁体产生的,定子磁场一般是绕组产生的,两个磁场以相同的速度旋转,就得到了一个恒定的转矩。

要进行全局优化设计,必须先要有数学模型,下面主要从两个方面来进行建模:转子永磁体磁场如何建立和描述以及定子绕组磁场如何建立和描述。


三、如何建立永磁体磁场模型

3.1 气隙磁密的建立

我们对电机的磁路模型进行抽象,在一个磁路里面,有磁源(永磁体),有磁阻(主要是气隙),如下图所示。

永磁体的工作点为

B_m=B_r+mu_0mu_rH_m

根据磁势守恒,可得

H_mL_m+H_gL_g=0

考虑到磁通有漏磁

phi_g=phi_mk_{lk}

考虑到极弧系数

A_m=A_gk_a

其中 k_a=frac{	au_m}{	au_p} 为极弧系数, L_g=K_cL_g 等效气隙, A_mA_g 分别为永磁体对应面积和气隙对应面积, K_{lk} 为漏磁系数。 K_c 为卡式系数,考虑到开槽的影响引入的修正系数。

联立上面的方程可以得到永磁体产生的气隙磁密为:

B_g=frac{B_r}{frac{1}{k_ak_{lk}}+mu_r frac{K_cL_g}{L_m}}

磁密的分布如下图虚线所示

用傅里叶展开,可以得到各个阶次的谐波为

B_{mn}=frac{2}{2pi}int_0^{2pi}B_gsin(frac{2pi nx}{2pi})dx=frac{4B_g}{npi}sin(k_afrac{npi}{2})

当然,只有基波能产生恒定转矩的,其数值为

B_{m1}=frac{4}{pi}B_gsin(k_afrac{pi}{2})

3.2 永磁体产生的感应电动势计算

每极产生的基波磁通(peak)为

phi_{pm1}=int_0^{	au_p}B_{m1}sin(frac{x}{lambda_p}pi)L_{stk}dx=frac{2}{pi}B_{m1}lambda_pL_{stk}

假设 lambda_plambda_s 分别为极距和槽距

lambda_p=frac{pi D}{2p} quad   lambda_s=frac{pi D}{Q_s}

其中D是气隙直径,则永磁体在每相绕组产生的基波磁链(peak)为

psi_{m1}=k_{w1}N_{ph}phi_{pm1}

k_{w1} 是基波绕组系数,N_{ph} 为每相匝数。

则每相产生的永磁体感应基波电动势(RMS)为

E_1=frac{dpsi_{m1}}{dt}=omega_epsi_{m1}=frac{2pi f}{sqrt2}k_{w1}N_{ph}phi_{pm1}

其中 f 是基波频率。

3.3 功率和力矩

线负荷定义为(双层绕组):

A=frac{2mN_{ph}I}{pi D}

其中 I 表示电流(RMS), m 是电机相数,则气隙中产生的最大电磁功率为

P_{em}=mE_1I=mfrac{sqrt2 pi f}{p}k_{w1}N_{ph} B_{m1}D L_{stk}I

假设电磁能全部转化为机械能(可以通过控制实现),则产生的转矩为:

T=frac{P_{em}}{omega_m}=frac{pi}{2}cdot D^2L_{stk}cdot A cdot frac{B_{m1}}{sqrt2}cdot k_{w1}

进一步变换形式:

T=2 cdot V cdot A cdot B cdot k_{w1}

其中 B=frac{B_{m1}}{sqrt2}V=frac{pi}{4}D^2L_{stk}=frac{pi}{4}alpha_iD^3alpha_i=frac{L_{stk}}{D}

3.2铁芯主要 尺寸估计

铁芯的主要尺寸如下,

气隙直径可按如下估算:

D=sqrt[3]{frac{2T}{alpha_i pi B A k_{w1}}}

齿宽和轭宽可作如下估算:

W_t=frac{B_g lambda_s}{k_{Fe}B_t}  quad W_{bt}=frac{1}{2}frac{B_g k_a lambda_p}{k_{Fe}B_{bi}}

其中 k_{Fe} 是叠压系数,可根据槽满率和电流密度估算槽的面积为:

A_{slots}=frac{Api D}{k_{fill}J}

其中 k_{fill} 为槽满率,当然槽得的面积也可通过几何尺寸计算

A_{slots}=frac{pi}{4}(D_{bi}^2-D^2)-Q_sfrac{D_{bi}-D}{2}W_t

综合以上两式可以估算铁芯的轭部直径为

D_{bi}=frac{Q_sW_t}{pi}+sqrt{(frac{Q_s W_t}{pi})^2-frac{2Q_sW_tD}{pi}+D^2+frac{4AD}{k_{fill}}}

至此,所有铁芯的基本尺寸都可以确定。


四、如何建立绕组解析模型

4.1 绕组电动势计算

绕组的空间分布如下

和永磁体建立的磁场分析一致,绕组产生的基波磁动势(RMS)为

F_{ph}=frac{4}{pi}frac{k_{w1}N_{ph}}{2p}I_s

气隙中产生的基波磁密为

B_{c1}=frac{mu_0}{delta}F_{ph}

其中 delta=K_cL_g+frac{L_m}{mu_r} 为总的等效气隙。

4.2 绕组电感计算

如下图所示,绕组产生的基波磁通为

phi_{p1}=int_0^{	au_p}B_{c1}sin(frac{x}{	au_p }pi)L_{stk}dx=frac{2}{pi}B_{c1}	au_pL_{stk}

则绕组产生的基波磁链为

psi_{s1}=k_{w1}N_{ph}psi_{p1}=frac{2}{pi}k_{w1}N_{ph}B_{c1}lambda_p L_{stk}

则相电感为

L_{ph}=frac{psi_{s1}}{I_s}=frac{4}{pi^2}frac{mu_0 	au_p L_{stk}}{delta p}(k_{w1}N_{ph})^2

忽略漏感,dq轴电感为

L_d=L_q=frac{3}{2}L_{ph}

至于dq电感和相电感的关系,小潘专门有一篇文章,有兴趣的参见J Pan:如何理解永磁电机各种电感?。

4.3 电阻计算

每相匝数为

N_{ph}=roundleft( frac{Api D}{2m I} 
ight)

round是圆整的意思,则导体所占的槽面积为

S_{Cu}=frac{A_{slots}k_{fill}}{2mN_{ph}}

R_{ph}=
ho_{Cu}cdot 2N_{ph}frac{L+L_{ew}+L_{sw}}{S_{Cu}}

其中 L_{ew} 是端部绕组长度, L_{sw} 是绕组跨距

L_{sw}=frac{pi(D+D_{bi})}{2p}

4.4 电压计算

永磁电压相量图如下图所示,其中左图为内嵌式永磁电机相量图,右图为表贴式永磁电机相量图。

我们只考虑表贴式永磁电机,采用 i_d=0 控制,忽略电阻压降,并且只考虑稳态,此时

V_ssimeqsqrt{E_1^2+(LqI_s)^2}


五、如何建立损耗以及散热模型

电机的损耗主要包括电损耗和机械损耗两大类,为简单期间,先忽略机械损耗。电损耗又包括两类:铜损和铁损。

P_{loss}=P_{Fe}+P_{Cu}

5.1 铜损计算

铜损计算比较简单,可按如下估算

P_{Cu}=3 cdot R_{ph} cdot I^2

其中 R_{ph}=(1+alpha Delta T)R_{ph}@20^oC

5.2 铁损计算

铁损计算比较复杂,很难计算准确,一般采用Steinmetz方法进行估算,即将铁损分成两个部分:磁滞损耗涡流损耗。

P_{Fe}=P_h+P_e

磁滞损耗可通过下式计算

P_h=k_hfB^{gamma}

其中 k_h 是取决于材料的常数, gamma 一般取值在1.8到2.2之间。

涡流损耗的估算公式为

P_e=frac{pi^2B^2t^2f^2}{
hoeta}=k_e(fB)^2

其中 t 是叠片厚度, 
ho 是材料电阻率, eta 和几何结构有关。

一般材料厂家都会给出不同频率下的损耗曲线,如下图所示

可用最小二乘法进行曲线拟合,将 k_hk_egamma 作为未知量,拟合结果如下

损耗的表达式为

P_{Fe}=626fB^{1.8}+1.375f^2B^2

5.3 外壳散热系数估算

在J Pan:如何估算圆柱形电机外壳的散热系数 一文中,小潘介绍了怎么计算一个圆柱形电机外壳的的表面散热系数,

外壳的散热系数估算公式如下

happrox (3 sim 3.5)left( frac{Delta T}{D} 
ight)^{0.25}

对于开槽电机,这个系数可适当进行放大,放大倍数在1.3到1.8之间。


六、如何进行PMSM全局优化设计(Global Optimization)

有了前面的模型,我们就可以对表贴式永磁电机进行全局优化设计了,我们可以选取如下变数:

vec{x}=[p,q,A,J,alpha_i,B_t,B_{bi},alpha_p]

其中 p 为极对数, q 为每极每相槽数, A 为线负荷, J 为电流密度, alpha_i 为长径比,B_t 为齿部最大允许磁密,B_{bi} 为轭部最大允许磁密, alpha_p 为极弧系数。当然这些变数选取不是唯一的,完全可以选取别的组合。

假设我们建立了已电机几何模型与变数之间的函数:

[D_s,D_{bi},D,W_t,W_{bi},N_{ph},...]=F(p,q,A,J,alpha_i,B_t,B_{bi},alpha_p)

约束是电压和最大温升

T(p,q,A,J,alpha_i,B_t,B_{bi},alpha_p)leq T_{max}

V(p,q,A,J,alpha_i,B_t,B_{bi},alpha_p) leq Vdc

目标是体积最小,效率最高

Vol(p,q,A,J,alpha_i,B_t,B_{bi},alpha_p)=min

eta(p,q,A,J,alpha_i,B_t,B_{bi},alpha_p)=max

计算结果如下(注意本设计仅做方法说明,不具有现实参考意义):

上图展示了所有变数组合及其对应的计算输出,由于采用了遗传演算法,计算量大大减小,所有计算只进行了8000次,时间约在3分钟。我们也可以通过泡泡图来看一下任意两个变数(比如线负荷和电流密度)和目标函数(体积和效率)的对应关系。

一般来说,我们肯定是希望体积最小,效率最高,也就是说我们喜欢右下角的解。我们把右下角所有包络的点取出来,称之为Pareto图,最优设计点肯定会落在Pareto图上。

Pareto图上每一点都可认为是一个最优设计(在效率和体积之间的权衡),比如我们可选择如下设计,此时体积最小,效率也能接受。


推荐阅读:
相关文章