PSpice仿真之建模-以半导体激光器为例

article/2025/9/17 8:08:14

PSpice仿真之建模

第一篇原创博客,来点干货~最近应同学之托,解决一个PSpice建模问题,在解决过程中遇到很多问题,于是想写下来,后来者少走弯路哈。这里以半导体激光器为例,讲PSpice的建模。

PSpice是啥?

来自度娘《PSPICE是由SPICE(Simulation Program with Integrated Circuit Emphasis)发展而来的用于微机系列的通用电路分析程序。于1972年由美国加州大学伯克利分校的计算机辅助设计小组利用FORTRAN语言开发而成,主要用于大规模集成电路的计算机辅助设计。》说明白一点,就是一个电路仿真软件,能够分析电子器件的一些性能,这么说,还是功能很强大~
关于PSpice入门操作参考OrCAD PSpice简明教程
需要PSpice安装包的小伙伴PSpice安装包

半导体激光器是啥?

来自度娘《半导体激光器又称激光二极管,是用半导体材料作为工作物质的激光器。》说明白一点,就是一个电子元器件,至于是用来干啥的,只能说功能很强大,自己体会~

为啥需要建模?

有一些元件在库里木有,没办法,只能建模哈,建模的好处就是能够自己定义元器件,方便进行电路仿真分析,但是也对电路仿真的底层要求更高。

以半导体激光器元器件建模为例谈

先附上代码1,需要代码的小伙伴半导体激光器PSpice建模代码,再来说流程:

.SUBCKT DHLD NA NB NL NR
*子电路模型
*接口端点:NA NB NL NR
*         NA,NB:实际器件的两个电学端点
*         NA为负极,NB为正极
*         NR, NL:两个虚拟端点,用于光输出
*         NR为右端面,NL为左端面
.PARAM L=650UM
.PARAM W=1UM
.PARAM D=0.15UM
.PARAM GAM=0.3
.PARAM G0=1.4E-12
.PARAM Ntr=1.5E9
.PARAM EPS=1E-25
.PARAM B=1
.PARAM Bsp=4.24E-3
.PARAM ALFA=2000
.PARAM Rl=0.3
.PARAM Rr=0.3.PARAM Ne=7.8E7
.PARAM EITi=0.8
.PARAM EIT=2
.PARAM Nr=3.5
.PARAM LMD=0.83UM
.PARAM Vbi=1.13
.PARAM Csc0=10pF
.PARAM Rs=5
.PARAM Cp=1pF
.PARAM Rd=1E15
.PARAM Tn=2.2E-10
.PARAM Ts=7.5E-9
.PARAM B1=8.2
.PARAM gain=3.98
*.PARAM gain=2.1
.PARAM EITT=0.8
.PARAM c0=5E-3
.PARAM Ds=4.2E-3
.PARAM t=0.PARAM EITk=0.8
.PARAM Ai0=0.1
.PARAM Dk=0.02
*常数
.PARAM ECHARGE=1.6021918E-19
.PARAM BOLTZMAN=1.3806226E-23
.PARAM PI=3.1415926
.PARAM TWOPI={2.0*PI}
.PARAM PLANCK=6.626176E-34
.PARAM PLANCK2PI={PLANCK/TWOPI}
.PARAM TEMPR=333
.PARAM Vti={BOLTZMAN*TEMPR/ECHARGE}
.PARAM LSPEED=2.99792458E8*换算单位
.PARAM UL={L*1E6}
.PARAM UW={W*1E6}
.PARAM UD={D*1E6}
.PARAM UG0={G0*1E18}
.PARAM UNtr={Ntr*1E-18}
.PARAM UALFA={ALFA*1E-6}
.PARAM UEPS={EPS*1E-18}
.PARAM UNe={Ne*1E-18}
.PARAM ULMD={LMD*1E6}
.PARAM ULSPEED={LSPEED*1E6}*计算
.PARAM Vact={UL*UW*UD}
.PARAM Tph={Nr/(ULSPEED*(GAM*UALFA-LOG(Rl*Rr)/2.0/UL))}
.PARAM QV={ECHARGE*Vact}
.PARAM Cph={ECHARGE/Vti}
.PARAM Rph={Vti*Tph/ECHARGE}
.PARAM Ai={EITk*(Ai0+Dk*sqrt(t))-EITk*Ai0}
.PARAM CPL={gain*PLANCK*ULSPEED*ULSPEED*(Ai+Rl-1.0)*LOG(Rl*Rr)/
+ (2.0*Nr*Vti*UL*ULMD*(1-Rl+SQRT(Rl/Rr)*(1-Rr)))}
.PARAM CPR={gain*PLANCK*ULSPEED*ULSPEED*(Ai+Rr-1.0)*LOG(Rl*Rr)/
+ (2.0*Nr*Vti*UL*ULMD*(1-Rl+SQRT(Rl/Rr)*(1-Rr)))}
.PARAM V1={EIT*Vti*LOG((UNtr+1.0/Tph/GAM/UG0)/UNe)}
.PARAM InT={(EXP(14.33*(TEMPR/298)-12.56)-5.87)*1E-3}
.PARAM It={EITT*(c0+Ds*sqrt(t))}
.FUNC N(V) {(EXP(V/EIT/Vti)-1.0)*UNe}
.FUNC G(V,Vph) {IF(N(V)<UNtr,0.0,QV*GAM*UG0*(N(V)-UNtr))/
+ (1.0+UEPS*ABS(Vph)/Vact/Vti)*B}
.FUNC Inr(V) {(1/EITi)*QV*N(V)/Tn}
.FUNC Irr(V) {(1/EITi)*QV*N(V)/Ts+B1*N(V)*2}
.FUNC Ist(V,Vph) {(1/EITi)*G(V,Vph)*ABS(Vph)/Vact/Vti}
.FUNC Cd(V) {(1/EITi)*QV*UNe*EXP(V/EIT/Vti)/(EIT*Vti)}
.FUNC Csc(V) {IF(V<Vbi,Csc0/SQRT(1.0-V/Vbi),Csc0/SQRT(0.1))}*电学部分电路描述
RRS NA NA1 {Rs}
RRd NA1 NB {Rd}
CCp NA1 NB {Cp}
GCd NA1 NB VALUE={Cd(V(NA1)-V(NB))*DDT(V(NA1)-V(NB))}
GCsc NA1 NB VALUE={Csc(V(NA1)-V(NB))*DDT(V(NA1)-V(NB))}
*CCd NA1 NB {Cd(V1)}
*CCsc NA1 NB {Csc(V1)}
GInr NA1 NB VALUE={Inr(V(NA1)-V(NB))}
GIrr NA1 NB VALUE={Irr(V(NA1)-V(NB))}
GIst NA1 NB VALUE={Ist(V(NA1)-V(NB),V(NS))}*光学部分
GIrr1 0 NS VALUE={Bsp*Irr(V(NA1)-V(NB))}
GIst1 0 NS VALUE={Ist(V(NA1)-V(NB),V(NS))}
CCph NS 0 {Cph}
RRph NS 0 {Rph}*光输出
El NL 0 VALUE={CPL*V(NS)}
Er NR 0 VALUE={CPR*V(NS)}
.ENDS

再来谈谈怎么完成建模2

  1. 建立DHLD.lib文件 ,先拷贝代码,复制到新建的txt文件中,修改后缀名为.lib;
  2. 编译安装,将记事本(以.lib为后缀的文件)复制到安装路径下:D:\Program Files\OrCAD_Demo\Capture\Library\Pspice(具体看自己的安装目录),打开PSPICE MODEL Editor,在工作界面上,点击File/Open,打开刚新建的DHLD.lib文件;
    在这里插入图片描述
  3. 输出模型,点击File\Export to Capture选项,弹出如下图2所示。
    图2 路径修改
  4. 复制到nom.lib文件,最后打开D:\Program Files\OrCAD_Demo\Capture\Library\Pspice(具体看自己的安装目录)找到其中的nom.lib的记事本,然后打开,将DHLD.lib的内容复制到nom.lib文件的最后,保存及建立好模型,可以开始使用啦。
  5. 验证模型,打开ORCAD的Capture模块,新建一个工程,然后将上面生成的文件导入进去,注意在添加的时候,一定要先添加库文件,很简单在Place Part时,点Add Library,就得到了LD的模块,如图3所示。
    在这里插入图片描述

PSpice仿真软件使用注意事项

  1. 接地问题 ,PSpice中的地是假地,如果提示某个引脚"is floating",那就是把对应的地的"NAME"属性修改为"0"即可;
  2. 管理员身份运行问题,这几个软件都需要使用管理员身份运行,才能够正常使用,如Capture如果不用管理员身份运行,菜单栏就没有PSpice选项;
  3. 建模语法问题,如.PARAM声明参数,.FUNC()声明函数等,具体可以参考点我看建模语法 ,特别需要注意的是PSpice每行有132个字符的限制,需要换行时使用"+“号,另外建模语法中”*"表示注释,严格注意语法问题,注意空格等等,加粗引起注意。

儒将军


  1. 通信光电子课程设计—LD的建模及其恒定功率驱动电路的设计 ↩︎

  2. LD的建模及其恒定功率驱动电路的设计 ↩︎


http://chatgpt.dhexx.cn/article/itlyCPdY.shtml

相关文章

如何保证三维激光扫描的测量精度?

非接触式扫描是三维扫描技术中的一个重要分支&#xff0c;具有检测速度快、零接触等优势&#xff0c;可以将复杂、不规则的物体三维点云数据采集到电脑中&#xff0c;并快速构建出三维模型。如今&#xff0c;三维激光扫描测量技术在文物、建筑等行业都有了成功的应用案例。 在…

激光雷达应用案例|仓储3D体积量方测量

在物流、仓储等工业行业中&#xff0c;获取物品体积数量、掌握物品出入库情况对生产库存管理具有重要意义。 以煤炭仓储及生产领域煤炭体积测量为例&#xff0c;为了解煤炭出入库情况&#xff0c;通常依靠人力手持全站仪进行人工煤炭体积监测。然而这一传统解决方案始终面对着技…

数学建模——光盘的数据容量

1、背景和问题 &#xff08;1&#xff09;20世纪80年代出现激光唱片&#xff08;CD&#xff09;与激光视盘&#xff08;LD&#xff09;&#xff0c;统称为光盘。 &#xff08;2&#xff09;20世纪90年代出现数字视频光盘&#xff08;DVD&#xff09;。 &#xff08;3&#x…

管网三维激光扫描建模_BIM建模_可视化平台_吉优赛维数字孪生

这几年我国的能源领域已经得到了飞速的发展基础&#xff0c;基础建设也得到了长效的发展&#xff0c;那么现在在石油天然气的运输过程当中&#xff0c;是否已经做到了没有任何的后患之忧了呢&#xff1f;实际上现在的传统人工管理方式还是存在很大程度上的安全盲区的&#xff0…

LaserMaker激光建模软件V1.6.40 更新说明

尊敬的LaserMaker用户&#xff0c;LaserMaker进行了版本更新&#xff0c;新版本为V1.6.40&#xff0c;欢迎您下载使用 LaserMakerV1.6.40下载地址&#xff1a;LaserMaker 新增功能 1.打断线段 橡皮擦工具下新增打断线段功能&#xff0c;同一图案分别设置不同加工工艺更方便…

自制三维激光扫描建模

看图片就是我做的东西&#xff0c;很炫酷是不是。 好吧&#xff0c;开玩笑&#xff0c;这是电影普罗米修斯的截图。 当初看这个电影的时候就感觉这东西好眩酷&#xff0c;我能不能做出来。最近借着帮做毕业设计的机会我也做了一个。 就是这个丑丑的东西啦~ 首先感谢来自CSK的…

Ansys Zemax | 使用 OpticStudio 进行闪光激光雷达系统建模(上)

前言 在消费类电子产品领域&#xff0c;工程师可利用激光雷达实现众多功能&#xff0c;如面部识别和3D映射等。尽管激光雷达系统的应用非常广泛而且截然不同&#xff0c;但是 “闪光激光雷达” 解决方案通常都适用于在使用固态光学元件的目标场景中生成可检测的点阵列。凭借具…

复杂建筑物三维激光扫描与室内外精细建模的科普解析

如今&#xff0c;随着科技的进步&#xff0c;复杂建筑物的三维激光扫描与室内外精细建模成为了现实。本文将通过简洁易懂的方式&#xff0c;介绍这一技术的原理、应用和操作过程&#xff0c;并引用可靠数据和研究成果进行支持&#xff0c;以确保准确性和可信度。 第一部分&…

真实多模激光的建模

作者&#xff1a;Daniel Asoubar&#xff08;LightTrans&#xff09; 相关文件&#xff1a;Tutorial_101.01&#xff0c;Snippet_028 需求&#xff1a;VirtualLab™5.11.1-基本工具箱 许可证&#xff1a;CC-BY-SA 3.0 摘要 1). 这个案例展示了如何在VirtualLab中对一个真…

nohup启动jar_nohup命令详解

nohup命令详解 在我们想要把SpringBoot微服务工程部署到远程服务器时&#xff0c;会通过java -jar springboot.jar的方式启动SpringBoot微服务。但是当我们把运行这个命令的SSH客户端退出登录就会导致SpringBoot进程也一起停止了&#xff0c;然后当然就没法访问我们启动的项目了…

Linux-nohup命令详解

场景 今天在linux上部署wdt程序&#xff0c;在SSH客户端执行./start-dishi.sh,启动成功,在关闭SSH客户端后&#xff0c;运行的程序也同时终止了&#xff0c;怎样才能保证在推出SSH客户端后程序能一直执行呢&#xff1f;通过网上查找资料&#xff0c;发现需要使用nohup命令。 …

c语言连续生成不同随机数_C语言连续生成多个随机数(可限制范围)

生成随机数 在现实中我们经常用到随机数&#xff0c;可怎么实现呢&#xff0c;且听小乔慢慢道来。 在C语言中&#xff0c;我们一般使用 头文件中的 rand() 函数来生成随机数 int void rand() 可是却发现生成的数字都一样。 这是因为rand() 函数产生的随机数是伪随机数&#xff…

c语言不用随机数种子,C语言的随机数与随机种子

引言&#xff1a; 在实际编程中&#xff0c;我们经常会用到随机数这个概念&#xff0c;其实也是一个伪随机数&#xff0c;实际上并不是一个真正的随机数&#xff0c;但是也足够我们使用了。在C语言中&#xff0c;编写一些关于游戏之类的程序时就需要用到随机数了。同时C语言也提…

C 语言随机数

1. 随机数概述 编写程序过程中&#xff0c;我们经常需要产生一些随机数。随机数在程序中分为两种&#xff1a; 真随机数&#xff1a;完全没有规则&#xff0c;无法预测接下来要产生的数。 伪随机数&#xff1a;通过一些预先设定好的规则产生不能简单预测的数。 当然&#xff0…

产生瑞利分布的随机数 C语言实现

瑞利分布的概率密度函数为 瑞丽分布的均值为,方差为 首先使用逆变换法产生参数的指数分布的随机变量,其概率密度函数为 然后通过变换&#xff0c;产生瑞丽分布的随机变量x&#xff0c;具体的方法如下&#xff1a; &#xff08;1&#xff09;产生均匀分布的随机数 &#xff…

产生(a,b)区间上均匀分布的随机数 C语言实现

uniform.h文件 #ifndef UNIFORM_H_ #define UNIFORM_H_/* 函数功能&#xff1a; 产生&#xff08;a,b&#xff09;区间上均匀分布的随机数组 输入参数说明&#xff1a; a 给定区间的下限 b 给定区间的上线 seed 长整型指针变量&#xff0c; *seed 为伪随机数的种子 */ doubl…

洛谷:明明的随机数,C语言

题目描述 明明想在学校中请一些同学一起做一项问卷调查&#xff0c;为了实验的客观性&#xff0c;他先用计算机生成了N个1到1000之间的随机整数(N≤100)&#xff0c;对于其中重复的数字&#xff0c;只保留一个&#xff0c;把其余相同的数去掉&#xff0c;不同的数对应着不同的…

产生正态分布(高斯分布)随机数 C语言实现

正态分布的概率密度函数如下 通常使用表示均值为,方差为 产生正太分布的方法如下&#xff1a; 设为&#xff08;0&#xff0c;1&#xff09;上n个相互独立的均匀分布的随机数&#xff0c;由于,. 根据中心极限定理可知&#xff0c;当n趋向于无穷时 的分布近似于正态分布&…

产生指数分布的随机数 C语言实现

一、产生随机变量的逆变换方法 定理&#xff1a;设F(x)是任一连续的分布函数&#xff0c;如果&#xff0c;且那么. 证明 由于,则有 所以 此定理给出了从均匀分布随机数到给定分布的随机数的变换&#xff0c;根据该变换可以生分布函数为的随机数&#xff0c;其算法可以用下列…

C语言如何设置随机数

步骤 设置一个随机的起点 那如何设置呢&#xff1f;编写代码srand((unsigned int)time(NULL))。而该代码用到了两个库函数void srand(unsigned int seed)和longlong time(NULL)&#xff0c;对应的头文件是<stdlib.h>和<time.h>。生成随机数 生成随机数直接编写代码…