# 编写AIC工艺参数计算Matlab程序（疯狂踩坑）

1 篇文章 0 订阅

## 所用语言：Matlab

### 程序结构

1. 定义变量：要求的未知数有：Kn、laman、Vtn。已知的变量有：W、L、Vgs1、Vgs2、Vds1、Vds2以及其对应的Ids
2. 定义方程组：将不同的变量带入方程，得到方程组
3. 解方程

### 踩的坑

#### 1、变量定义：

%定义变量
W = 220e-6;
L = 180e-7;
Valueids = [0 0.8 1.0;1 28.62 53.72;1.5 30.35 56.21];
Vgs = [Valueids(1,2),Valueids(1,3)];
Vds = [Valueids(2,1), Valueids(3,1)];
Ids = [Valueids(2,2) Valueids(2,3);Valueids(3,2) Valueids(3,3)];


#### 2、定义方程组

%定义方程组
eq = zeros(2,2);
eq = [laman 0;0 0];
for i = 1:2
for o = 1:2
eq(o,i) = [Ids(o,i)*10e-7 == (1/2)*Kn*(W/L)*(Vgs(i)-Vtn)^2*(1+laman*Vds(o))];
end
end
eq1 = eq(1,1);
eq2 = eq(1,2);
eq3 = eq(2,1);
eq4 = eq(2,2);


#### 3、解方程

Knmax = double(max(Kn));
Knmin = double(min(Kn));
lamanmax = double(max(laman));
lamanmin = double(min(laman));
Vtnmax = double(max(Vtn));
Vtnmin = double(min(Vtn));

Kn = [Knmax Knmin];
laman = [lamanmax lamanmin];
Vtn = [Vtnmax Vtnmin];


counter = 0;%对遍历次数进行计数，若为最大次数或者1次则结果可能不可靠

for i = 1:2
for o = 1:1
for p = 1:2
Knfinal = Kn(1,i)
lamanfinal = laman(1,1)
Vtnfinal = Vtn(1,p)
counter = counter + 1;
t = Ids(2,2)*10e-7 - (1/2)*Knfinal*(W/L)*(Vgs(2)-Vtnfinal)^2*(1+lamanfinal*Vds(2))
if (abs(Ids(2,2)*10e-7 - (1/2)*Knfinal*(W/L)*(Vgs(2)-Vtnfinal)^2*(1+lamanfinal*Vds(2))) < 0.0000001)
flag = 1;
break;
end
end
if flag == 1
break
end
end
if flag == 1
break
end
end


counter
Knfinal
lamanfinal
Vtnfinal


### 整体代码如下：

clear,clc
syms Kn laman Vtn;
W = 220e-6;
L = 180e-7;
eq = zeros(2,2);
Valueids = [0 0.8 1.0;1 28.62 53.72;1.5 30.35 56.21];
Vgs = [Valueids(1,2),Valueids(1,3)];
Vds = [Valueids(2,1), Valueids(3,1)];
Ids = [Valueids(2,2) Valueids(2,3);Valueids(3,2) Valueids(3,3)];

eq = [laman 0;0 0];

for i = 1:2
for o = 1:2
eq(o,i) = [Ids(o,i)*10e-7 == (1/2)*Kn*(W/L)*(Vgs(i)-Vtn)^2*(1+laman*Vds(o))];
end
end

eq1 = eq(1,1);
eq2 = eq(1,2);
eq3 = eq(2,1);
eq4 = eq(2,2);

[Kn,laman,Vtn] = solve(eq1,eq2,eq3,Kn,laman,Vtn);

Knmax = double(max(Kn));
Knmin = double(min(Kn));
lamanmax = double(max(laman));
lamanmin = double(min(laman));
Vtnmax = double(max(Vtn));
Vtnmin = double(min(Vtn));

Kn = [Knmax Knmin];
laman = [lamanmax lamanmin];
Vtn = [Vtnmax Vtnmin];

counter = 0;

for i = 1:2
for o = 1:1
for p = 1:2
Knfinal = Kn(1,i)
lamanfinal = laman(1,1)
Vtnfinal = Vtn(1,p)
counter = counter + 1;
t = Ids(2,2)*10e-7 - (1/2)*Knfinal*(W/L)*(Vgs(2)-Vtnfinal)^2*(1+lamanfinal*Vds(2))
if (abs(Ids(2,2)*10e-7 - (1/2)*Knfinal*(W/L)*(Vgs(2)-Vtnfinal)^2*(1+lamanfinal*Vds(2))) < 0.0000001)
flag = 1;
break;
end
end
if flag == 1
break
end
end
if flag == 1
break
end
end
counter
Knfinal
lamanfinal
Vtnfinal


• 1
点赞
• 4
收藏
觉得还不错? 一键收藏
• 打赏
• 0
评论

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

DearAaron_CN

¥1 ¥2 ¥4 ¥6 ¥10 ¥20

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、付费专栏及课程。