简介:一份聚焦于 Ansys 压电分析的 PDF 教程,面向从事压电换能器等机电耦合仿真的工程师与科研人员,重点解决 PZT-5 压电材料参数设置、单元类型选择与求解流程中的常见难题。内容覆盖 solid5、plane13、solid98 等耦合场单元的适用场景,详细说明刚度矩阵、压电应力常数及介电常数在 e 型压电方程中的输入顺序差异,并结合弯曲式换能器案例展示从几何建模、网格划分、边界约束与电极电压加载,到模态分析、谐响应分析与导纳计算的完整流程。该教程还梳理了问题定义、几何建模、约束加载、求解与结果查看等关键环节,便于按步骤掌握压电仿真主线。压缩包仅含 1 个 PDF 文件,大小 3.17MB,便于离线查阅;目前已有 4871 人学习下载。教程末尾附有命令流文件生成思路,适合需要借助 Ansys 完成压电元件建模与动态性能评估的用户快速上手,提升仿真效率。
1. Ansys 压电参数设置:为什么案例看懂了,一动手建模就变形方向相反
做压电换能器、能量采集器或者超声换能器仿真的朋友,大概率都在 Ansys 压电参数设置上交过学费。几何模型建得漂亮、网格画得规整,一到材料参数就卡住:从手册抄来的 d33、介电常数不知道填到哪张表,填进去算不出谐振峰,更离谱的是给压电片加电压,变形方向竟然是反的。这个标题把三件事串在一起——压电参数设置、案例分析、附加命令流,正好对应这类仿真最劝退的三个环节。参数矩阵不是随便填的,单元选型决定了自由度,边界条件决定了模态顺序,而命令流是把你脑子里的推导变成可复现结果的关键。下文按我调通这类模型的实际路径展开:先讲参数体系怎么理解,再给可直接替换的 APDL 命令流,最后把比较隐蔽的翻车点逐个拆开。
2. 压电本构与 Ansys 参数体系:ANEL、PIEZ、PERX 里到底装什么
2.1 三组材料参数:弹性、压电、介电各管各的
压电仿真的本质,是在解一个把机械量和电学量耦合在一起的本构方程。Ansys 经典界面的 APDL 里,你要在TB命令下定义三张材料表:弹性刚度矩阵、压电应力常数矩阵、介电常数矩阵。它们分别用TB,ANEL、TB,PIEZ、TB,PERX来输入。很多新手把材料手册的参数抄进表格,结果完全不对,根源就是没搞清楚这三张表各自装什么、单位是什么。
| TB 命令 | 矩阵含义 | 物理对应 | Ansys 常用单位 |
|---|---|---|---|
TB,ANEL | 弹性刚度矩阵 c | 应力与应变的关系 | Pa(N/m²) |
TB,PIEZ | 压电应力常数矩阵 e | 机械应变与电场的耦合 | C/m² |
TB,PERX | 相对介电常数矩阵 ε | 电场与电位移的关系 | 无量纲(相对值) |
Ansys 压电分析默认使用的是 e 型压电方程,也就是把应力表达成弹性项减去压电项。如果你手上的材料手册给的是柔度矩阵 s,需要先对 6×6 矩阵求逆得到刚度矩阵 c,再填进TB,ANEL。这一步是参数设置里最早出现的坑,因为柔度矩阵里的非对角项符号、排列顺序跟刚度矩阵不是一回事,直接填进去不会报错,但算出来的频率和模态会整体偏移。我习惯先把矩阵放到 Excel 或脚本里排好,再复制成命令流,而不是在输入窗口手敲。
介电常数这块也容易混。TB,PERX输入的是相对介电常数,不是绝对值。真空介电常数约 8.854e-12 F/m,Ansys 内部会按相对值乘以这个基准去换算。另一个细节是,严格来说压电分析里需要的是恒应变下的介电常数 εS,而很多手册给的是恒应力下的 εT。两者之间有换算关系,若手上只有 εT,工程上直接拿来用的也大有人在,只是仲裁或论文计算里这个差异会被评审追问。能做严谨处理就尽量严谨,至少要知道自己用了哪个。
2.2 手册给的是 d 矩阵:怎么转成 Ansys 要的 e 矩阵
做压电材料选型时,厂商资料里最常出现的是压电应变常数 d,单位是 pC/N 或 10⁻¹² C/N。Ansys 的TB,PIEZ要的是压电应力常数 e,单位是 C/m²。两者之间隔着弹性刚度矩阵 c,关系可以理解为 e = c × d。数值上差别很大:c 的量级在 10¹⁰ Pa,d 的量级在 10⁻¹² C/N,乘出来才接近常见的 e 矩阵数值。直接填 d 矩阵,等于把耦合强度缩小了上百倍,仿真结果自然是模型几乎观察不到压电效应。
下面这段 Python 代码是我拿到新压电材料后第一步会做的事,把手册的 d 矩阵和 c 矩阵转成 Ansys 需要的 e 矩阵:
import numpy as np # 弹性刚度矩阵(Pa),按 Voigt 顺序 6x6,示意值 c = np.array([ [13.2e10, 7.1e10, 7.3e10, 0, 0, 0 ], [7.1e10, 13.2e10, 7.3e10, 0, 0, 0 ], [7.3e10, 7.3e10, 11.5e10, 0, 0, 0 ], [0, 0, 0, 3.0e10, 0, 0 ], [0, 0, 0, 0, 2.6e10, 0], [0, 0, 0, 0, 0, 2.6e10] ]) # 手册给的 d 矩阵(6行3列,单位 C/N;pC/N 记得乘 1e-12) d = np.array([ [0, 0, -190e-12], [0, 0, -190e-12], [0, 0, 390e-12], [0, 580e-12, 0], [580e-12, 0, 0], [0, 0, 0] ]) e = c @ d print(e)这段脚本的逻辑很直接:把 6×6 的刚度矩阵和 6×3 的 d 矩阵做矩阵乘法,得到 6×3 的 e 矩阵,行数对应应力分量顺序,列数对应电场方向分量。打印出来后,把矩阵值抄进TB,PIEZ对应的数据点即可。执行前要确认 d 矩阵的行列顺序跟你后续在 Ansys 里定义的坐标系方向一致。常见压电陶瓷的极化方向沿 Z 轴时,e31 在矩阵第一行第三列附近,e33 在第三行第三列,e15 则出现在剪切项对应的行。若材料手册给出的是 3×6 排列,需要先转置再乘。
2.3 极化方向与矩阵排列顺序:最常见的认知盲区
压电材料的参数是带方向的。所谓 d33、d31、d15,下标第一个数字代表应变方向,第二个数字代表电场方向。Ansys 里矩阵的排列按固定顺序展开:应力分量顺序是 xx、yy、zz、yz、xz、xy,电场方向顺序是 x、y、z。极化方向沿哪个轴,决定了哪些位置该填什么数值。
我见过有人把 PZT 的 d33 填到第一行,理由是“第一个数字是 3 就放在第三行旁边”,这其实是按材料手册的习惯在猜,结果整个模态全乱。正确做法是回到坐标系里看:极化方向沿全局 Z 轴时,d33 对应的电场方向是 Z、应变方向也是 Z,它应该在应变分量 zz 那行与电场分量 z 那列的交点。对矩阵排列没信心的时候,宁可用第 6 章的单单元静力验证方法先跑一遍,也不要直接上整机模型。
另一个隐蔽问题是坐标系的旋转。材料参数矩阵定义在单元坐标系里,如果你的压电片粘在斜面上,单元坐标系和全局坐标系不重合,必须用ESYS或局部坐标系把单元旋转到正确方向。否则你填进去的参数在数值上没错,但相对于模型整体方向是错的,结果看起来就非常“玄学”。
3. 单元选择与 TB 材料定义:SOLID226 的 KEYOPT 为什么会决定成败
3.1 压电单元选型:SOLID226、SOLID227、PLANE223 怎么选
压电分析不能随便拿普通结构单元去算,因为你需要自由度里包含电压 VOLT。Ansys 提供专门的压电耦合场单元,常用的是 SOLID226、SOLID227 和 PLANE223。三者的取舍其实不复杂:
| 单元 | 形状 | 适用场景 | 说明 |
|---|---|---|---|
| SOLID226 | 20 节点六面体 | 规则块体、悬臂梁、叠层结构 | 精度高,网格容易做映射或扫掠 |
| SOLID227 | 10 节点四面体 | 复杂曲面、过渡网格 | 自适应网格方便,但同样网格密度下自由度更多 |
| PLANE223 | 8 节点四边形平面单元 | 二维简化分析 | 适合厚度方向不变的平面问题 |
我做常规压电能量采集器案例时优先用 SOLID226。它对六面体网格支持好,结果稳定;如果模型几何复杂必须用四面体,再退到 SOLID227。单元选择的关键不止是形状,还有KEYOPT(1)的取值。SOLID226 的KEYOPT(1)=1001表示单元自由度包含结构方向的 UX、UY、UZ 和电压 VOLT。如果漏了这一步,或者单元选成了普通结构单元,后续施加电压约束时要么报错,要么电压自由度根本不存在,仿真结果里电压恒为零。
3.2 可直接替换参数的 TB 材料定义命令流
下面是一段完整的压电材料定义命令流,结构上对应第 2 章的三张表。数值采用 PZT 类压电陶瓷的常见量级,不是精确的某一型号,实际使用时要替换成你自己的材料手册数据。
/prep7 ! 20节点六面体压电耦合单元 ! KEYOPT(1)=1001 -> 自由度 UX,UY,UZ,VOLT et,1,226,1001 ! 弹性刚度矩阵,单位 Pa ! 按上三角顺序输入,对称分量由程序补齐 tb,anel,1,,,0 tbdata,1, 13.2e10, 7.1e10, 7.3e10, 0, 0, 0 tbdata,7, 13.2e10, 7.3e10, 0, 0, 0 tbdata,13, 11.5e10, 0, 0, 0 tbdata,19, 3.0e10, 0, 0 tbdata,25, 2.6e10, 0 tbdata,31, 2.6e10 ! 压电应力常数矩阵 e,单位 C/m²,6行3列 ! 行顺序:xx, yy, zz, yz, xz, xy ! 列顺序:x, y, z tb,piez,1,,,0 tbdata,1, 0, 0, -3.5 tbdata,4, 0, 0, -3.5 tbdata,7, 0, 0, 15.0 tbdata,10, 0, 12.0, 0 tbdata,13, 12.0, 0, 0 tbdata,16, 0, 0, 0 ! 相对介电常数,按 x,y,z 主对角线填 tb,perx,1,,,0 tbdata,1, 1400, 1400, 1300这段命令流里,TB,ANEL的TBDATA起始位置 1、7、13、19、25、31 分别对应 6×6 刚度矩阵的每一行上三角部分。Ansys 知道矩阵对称,你只填上三角就能还原完整矩阵。TB,PIEZ的起始位置 1、4、7、10、13、16 是因为每行只有三个数据,所以下一行起始点加 3。这里最容易犯的错是有人把第二行数据写在位置 7,结果矩阵整体错位,程序不报错,但压电方向全乱。
定义完成后可以用TB,STAT,1查看材料表是否写入成功,TBDATA的数据点数量是否和表格要求一致。压电矩阵共 18 个数据点,少填一个也不会报错,但那个位置的耦合项会变成 0。如果你发现模型其他部分都正常、唯独电压激励下的位移响应奇小,优先回来数一下数据点数。
3.3 坐标系对齐:极化方向对不上全局 Z 轴怎么办
如果压电材料的极化方向不是沿全局 Z 轴,而是沿某个局部方向,你必须让单元坐标系跟它对齐。常见的做法是先建立局部坐标系,再通过ESYS指定给后续生成的单元。
! 建立局部坐标系,原点(0,0,0),绕X轴旋转90度 local,11,0,0,0,0,0,90,0 ! 将当前单元坐标系指定为局部坐标系 11 esys,11这段命令的意思是:新建一个编号为 11 的局部直角坐标系,绕全局 X 轴旋转 90°,然后让接下来的单元使用该坐标系。注意ESYS只对设置之后生成的单元有效,已经生成的单元不会跟着变。对已有单元可以用EMODIF重指定,但那样容易漏选,我一般宁可建模前就把坐标系规划好。
检查单元坐标系方向是否正确的习惯很重要。我常用/PSYMB,ESYS,1打开单元坐标系符号显示,再通过EPLOT看每个单元的坐标系箭头。压电材料矩阵的方向感就是靠这一步保住的,尤其是做叠层或者环形结构时,光靠眼睛判断很不可靠。
4. 悬臂梁压电能量采集器案例:从建模到谐响应分析的完整命令流
4.1 几何建模与网格:两层实体怎么搭
这一节用一个经典的悬臂梁压电能量采集器案例把前面的参数设置串起来。模型由两层组成:底层是铝制悬臂梁,上层是部分覆盖的压电片。所有尺寸都用 SI 基本单位,长度用米,避免后面电压、电荷单位换算出错。几何建模直接BLOCK生成两个长方体。
/prep7 ! 基层铝梁:长100mm,宽20mm,厚1mm block,0,100e-3,0,20e-3,0,1e-3 ! 压电层:长60mm,宽20mm,厚0.5mm,从固定端开始覆盖 block,0,60e-3,0,20e-3,1e-3,1.5e-3 ! 材料1:铝 mp,ex,1,70e9 mp,nuxy,1,0.33 ! 单元类型:两个相同类型,便于后续按 TYPE 选择压电层 ! 材料2 的压电参数命令流见第 3 章,这里省略 et,1,226,1001 et,2,226,1001 ! 网格控制 esize,1e-3 ! 基层划分 mat,1 type,1 vsweep,1 ! 压电层划分 mat,2 type,2 vsweep,2这里定义了两个单元类型编号 TYPE 1 和 TYPE 2,但底层 SOLID226 配置完全一样。这么做的目的不是为了区分单元属性,而是为了后面用ESEL,S,TYPE,,2快速选中压电层单元。做电极等势面时非常需要这种分组能力,否则每次都要靠坐标选择压电层的节点,容易把基层顶面节点也卷进来。VSWEEP对规则块体很稳定,如果模型是斜墙或者带孔结构,再用自由网格和 SOLID227。
4.2 电极等势面与边界条件:CP 耦合的三种做法
压电片上下表面要模拟电极。有限元里电极必须是一个等势面,也就是电极上所有节点的电压自由度被耦合在一起,这样加一个电压约束就等于在整个电极面上施加均匀电压。Ansys 中用CP命令实现自由度耦合。
! 固定端约束:x=0 面的所有节点固支 nsel,s,loc,x,0 d,all,ux,0 d,all,uy,0 d,all,uz,0 allsel ! 压电片上表面电极:z=1.5mm esel,s,mat,,2 nsle,s nsel,r,loc,z,1.5e-3 cp,1,volt,all allsel ! 压电片下表面电极:z=1mm esel,s,mat,,2 nsle,s nsel,r,loc,z,1e-3 cp,2,volt,all allsel先选材料 2 的单元,再通过NSLE得到这些单元的节点,最后用NSEL,R按位置筛出表面节点,这样不会误选基层节点。CP,1,VOLT,ALL的意思是新建编号 1 的耦合组,把当前选中所有节点的 VOLT 自由度耦合到同一个电位。耦合后,在任意一个节点上施加电压,等于给整个电极面施加电压。
边界条件的物理含义要在这里说清楚。短路边界是把上下电极的 VOLT 都约束为 0;开路边界是让上下电极各自保持等势但不对电压赋值,同时至少保留一个参考电位点避免求解奇异。做模态分析时,开路和短路边界会给出不同的谐振频率,这也是后面验证参数的重要依据。
4.3 模态与谐响应:full 法才能带上压电耦合
模态分析用于快速定位谐振频率。压电分析中建议用默认的 Block Lanczos 法,关键是电学边界条件的处理:短路模态直接给上下电极全部D,ALL,VOLT,0;开路模态则保留电极耦合,但不额外施加电压约束。
/solu antype,modal modopt,lanb,10 ! 短路模态:上下电极电压均为0 nsel,s,loc,z,1.5e-3 d,all,volt,0 nsel,s,loc,z,1e-3 d,all,volt,0 allsel solve开路模态做法类似,只是去掉上电极的D,ALL,VOLT,0。此时结果里会出现频率接近 0 的纯电势模态,那是电势自由度的零特征值,不是结构的刚体模态,查看振型时认得出来就不用担心。
谐响应分析则要注意求解器选择。压电耦合问题不能用模态叠加法,必须用HROPT,FULL,否则压电效应会被丢掉。下面这段命令流是给压电片施加 1V 正弦电压,扫频范围 10Hz 到 2000Hz。
/solu antype,harmonic hropt,full harfrq,10,2000 nsubst,400 kbc,1 ! 上电极加 1V,下电极保持 0V nsel,s,loc,z,1.5e-3 d,all,volt,1 allsel solveNSUBST,400把 10~2000Hz 分成 400 步,步长约 5Hz。如果你发现模态分析得到的谐振峰很尖锐,5Hz 步长可能不够密,峰会被跨越过去,表现为曲线在那个频率附近没动静。这时候先把HARFRQ范围缩窄到谐振峰附近,再把NSUBST加到 800 以上,重新扫一遍。KBC,1表示阶跃载荷,谐响应里用默认的阶跃方式通常更稳定,避免斜坡加载造成的相位偏移。
阻尼是另一个影响峰形的参数。压电陶瓷的机械损耗通常用 Rayleigh 阻尼的BETAD来近似,我常用BETAD,5e-5这类量级做首轮计算,具体数值要跟实验阻抗曲线对比后标定。阻尼太小峰过尖,扫频稍微错开一点就看不到;阻尼太大峰被抹平,开路和短路频率差也分不清。
5. 压电分析常见翻车现场:五个必查项与排查路径
压电仿真里大多数异常结果都集中在几个固定位置。我把平时排查顺序整理一下,每一条按“现象 → 原因 → 解决”来写,遇到问题直接对照。
5.1 坑一:开路模态频率低于短路模态
现象:同一阶模态,开路边界算出来的频率比短路边界还低,或者两者几乎一样。物理上,开路相当于压电层的电位移被约束,等效刚度更大,开路谐振频率应当高于短路谐振频率。比例反了或者差不多,说明压电耦合没有按预期参与进来。
原因:常见原因有两个,一是压电矩阵的符号方向填反导致耦合项方向异常,二是电极耦合没做好,开路边界实际变成了两个孤立等势面,电场卸载。
解决:先把电极耦合去掉,改成最朴素的边界条件:整个上表面 VOLT=0,下表面 VOLT=0,跑一次短路模态;再把上表面 VOLT 约束全部删除,只保留耦合组编号,跑一次开路模态。如果频率差仍然不对,回到第 3 章的单材料命令流里检查 e 矩阵符号,尤其是 e33 那个位置的正负号。
5.2 坑二:压电层电压始终是零
现象:模型能算,但后处理里压电层所有节点电压全是 0,加电压也没反应,位移云图跟纯结构分析一模一样。
原因:单元类型选错了。常见的是用 SOLID186、SOLID187 这类普通结构单元建压电层,它们没有 VOLT 自由度,CP 或 D 命令加在 VOLT 上不生效。也可能是材料表没挂到单元上,或者TB,PIEZ被写到了别的材料编号上。
解决:后处理里用ESEL,S,TYPE,,2选中压电层,再EPLOT看单元类型编号是否对应 226。在输入窗口执行TB,STAT,2,确认材料 2 下面是不是真的有 PIEZ 数据表。很多命令流文件里材料编号是 1 开头,复制进来后忘记改,就会造成这种静默失败。
5.3 坑三:模态分析出现 0 Hz 刚体模态
现象:模态结果第一阶频率接近 0,而且振型看起来像整个压电层在“充电”,结构本身没怎么动。
原因:电极面没有做 CP 耦合,或者开路边界下没有任何节点接地,导致电势自由度的整体参考电位是奇异的,有限元方程里出现零特征值。这不是结构的刚体模态,而是电学模态。
解决:对电极面节点做 CP 耦合后,在其中一个电极面选一个节点加D,ALL,VOLT,0,提供一个电位参考点。如果是开路分析,就在求解前把这个约束删掉,再在后处理里把频率接近 0 的纯电模态过滤掉,只看结构模态。
5.4 坑四:谐响应扫出来只有一条电容线
现象:加 1V 交流电压,观察某一点位移或电极电流的频率响应,曲线是一条随频率缓慢上升的线,没有明显的谐振峰。
原因:扫频范围没对准谐振频率,或者步长太粗把峰跳过去了;另一种可能是电极等势面没有耦合,压电层内部电场分布不均匀,导致耦合模态激发不出来。
解决:先把模态分析做出来,找到目标振型的频率,把HARFRQ范围缩到这个频率前后各 50Hz,NSUBST加到 500 以上。如果还是没有峰,去查电极耦合是否真的包含了整个表面。一个快速检查方法:在后处理里看 1V 激励下电极面的电压是否处处相等,如果不相等,CP 就没有生效。
5.5 坑五:d33 填到 d31 的位置,模型趋势整体不对
现象:模型整体趋势好像能算,但频率偏高或偏低,某个方向的位移量明显不合理,甚至比解析解差出一倍。
原因:矩阵排列顺序和极化方向没对上。比如沿 Z 极化材料,e31 和 e33 的位置填反了,或者剪切项 e15 被漏掉,导致弯曲模态和厚度模态的耦合方式错乱。
解决:遇到这种情况别在整机模型上纠结,回到一个单单元模型上验证。给压电块施加电压,看它的伸长方向是否符合 d33 的物理预期。这个验证方法下一章展开,它可以作为所有压电材料参数设置后的第一个检查动作。
6. 单单元验证与频率比检验:把跑通的模型固化成一套习惯
6.1 单单元静力验证:压电常数方向对不对,一眼能看出来
拿到一个新压电材料,我习惯先做一个 1mm×1mm×1mm 的立方体单单元模型,极化方向沿 Z,上下表面做电极。给上下表面加 1V 电压,静力求解后看 Z 向位移。如果是正 d33 材料,Z 向应当伸长;如果缩短,说明 e33 的符号反了,或者电极方向定义反了。
/prep7 et,1,226,1001 block,0,1e-3,0,1e-3,0,1e-3 ! 压电材料参数代码段放在这里,材料号设为1 mat,1 vsweep,1 ! 下表面接地,上表面加1V nsel,s,loc,z,0 cp,1,volt,all d,all,volt,0 allsel nsel,s,loc,z,1e-3 cp,2,volt,all d,all,volt,1 allsel /solu antype,static solve这个模型计算量极小,几秒钟出结果。如果单元坐标系方向有疑问,可以先用ESYS旋转单单元坐标系,对比位移方向的变化,从而判断坐标设置是否正确。
6.2 用频率比确认机电耦合强度
单单元验证通过后,再回到悬臂梁模型,用短路谐振频率和开路谐振频率计算机电耦合系数,公式是 k² = (fa² - fr²) / fa²,其中 fr 是短路谐振频率,fa 是开路反谐振频率。计算出来的 k 值跟材料手册上的机电耦合系数在同一量级,说明整体参数设置没问题;如果小了一个数量级,多半是介电常数或压电矩阵的某个数据点丢了。
我现在拿到任何压电仿真项目,第一步永远是单单元静力验证,第二步才是整机模态。这个习惯帮我避开了至少两位数次的静默失败——有些参数错位,整机结果看起来是“合理的”,只有回到单单元才会露出破绽。材料参数设置这件事没有太多玄学空间,把矩阵方向、单元自由度、电极耦合这三件事固定成模板,剩下的就是扫频和调阻尼了。希望这个验证习惯能帮到你少走一次弯路。
本文还有配套的精品资源,点击获取