
第一次在论文里看到忆阻器的V-I特性曲线时我第一反应是这玩意要是能真拿示波器扫出那条斜8字滞回线该多过瘾。可现实很骨感——实验室里没有忆阻器样品市面上能买到的所谓“忆阻器模块”要么是教学演示板要么是商家拿普通元件凑数的东西。直到后来读到用运算放大器和模拟乘法器构造忆阻模拟器的思路我才真正把理论曲线和实测波形对上号。这篇文章就从这个思路说起用运放和乘法器自己DIY一个忆阻模拟器从数学原理到电路设计再到Multisim仿真里的完整搭建与调试全部过一遍。内容偏实操适合正在做课程设计、毕业设计或者对忆阻器工作原理好奇但手头没有真实器件的朋友。跟着走完你也能在Multisim里稳定扫出那条标志性的滞回曲线。1. 为什么要用运放和乘法器做忆阻模拟器1.1 忆阻器到底是什么忆阻器Memristor在1971年被蔡少棠从电路基本变量对称性的角度预言出来当时并没有实物。它描述的是电荷 q 与磁通 φ 之间的关系理想忆阻器的阻值不是常数而是取决于过去流过它的电荷量或施加在它上面的电压历史。这个“记住历史”的特性让它天然适合做非易失存储和神经形态计算的研究。判断一个器件是不是忆阻器最直观的证据就是V-I特性曲线。无论输入信号的幅度和频率怎么变这条曲线都必须经过原点并呈现一条像蝴蝶翅膀一样的窄滞回线频率越高滞回环越收窄最终趋近于一条直线。这个特征也叫pinched hysteresis loop是忆阻器区别于普通电阻、电容、电感的最重要指纹。由于市面上几乎没有成熟商用的忆阻器芯片研究它的人只能从两个方向入手要么去特定科研机构要TiO2基的样品要么自己想办法搭一个行为级模拟器。前者门槛高、周期长、测试设备还要专门定制后者成本低、可控性强还能顺手把运放、乘法器这类基础模拟电路练熟性价比非常高。1.2 模拟器能解决什么问题忆阻模拟器的本质是用通用模拟电路复现忆阻器的输入输出关系而不是在物理上复刻它的内部材料机制。对我们做工程和教学的人来说这个思路已经足够用了。你想验证一个忆阻器模型在电路中的行为比如交叉阵列、阈值开关、突触权值更新手里有一个“电气行为等价”的模拟器就能把电路层面的问题研究得很清楚。更重要的是模拟器里的参数几乎都是可调的。积分时间常数、乘法器系数、求和权重任何一个旋钮拧一下忆阻的非线性程度、滞回曲线张开的幅度、记忆的时间长度都会跟着变。这种动态可调特性对理解理想忆阻器数学方程里每个项的物理含义帮助特别大。我在Multisim里调到满意的曲线后再回头看论文里的公式很多地方突然就通了。1.3 为什么是这个组合而不是单片机或者FPGA要用电路实现一个带记忆的电阻关键就是两件事一是要对输入信号做积分得到状态变量二是要用状态变量去调制当前的电导值。运放最擅长做积分、求和、差分这些线性运算而乘法器刚好负责把状态变量和输入信号乘起来形成非线性乘积项。两者一组合理想的磁通控制忆阻方程就变成了实实在在的电路连线。如果用单片机或FPGA做数字方案其实也完全可以但需要先把模拟信号采样成数字量再用查表或迭代算法算等效电阻最后通过数字电位器或DAC输出。这个链路明显绕了一层对理解忆阻器本身的电路行为帮助有限还容易引入采样率、量化噪声和算法延迟的问题。所以在Multisim仿真和实验室验证阶段“运放经典电路 模拟乘法器”始终是我优先推荐的组合既直观又好调。2. 从数学方程到能仿真的电路方案2.1 忆阻器的两种数学模型忆阻器的建模通常分为电荷控制和磁通控制两类。电荷控制型把忆阻值写成电荷 q(t) 的函数形式为 v(t) M(q(t))·i(t)其中 M(q) dφ/dq磁通控制型则把忆导值写成磁通 φ(t) 的函数形式为 i(t) W(φ(t))·v(t)其中 W(φ) dq/dφ。两种形式在数学上对偶但在电路实现上难度差别很大。电荷控制型需要对电流积分来获取 q(t)而电流检测本身就比测电压复杂需要额外的采样电阻和仪表放大电路误差源多。磁通控制型只需要对输入电压 v(t) 积分一个标准反相积分器就能搞定电路结构简洁很多。所以我选择磁通控制型作为DIY方案的基础这在忆阻模拟器文献里也是最常见的做法。2.2 把目标方程映射成电路模块我们以最经典的线性磁通控制模型为例设目标方程为i(t) (1/Ra − β·φ(t)) · v(t)其中 φ(t) ∫v(t)dt。这个方程的含义很直白等效电导不再是固定值而是随着输入电压的历史积分线性变化。当 φ(t) 增大时等效电导逐渐减小或增大具体取决于 β 的符号于是从输入端看进去就呈现出一个“阻值会记忆”的元件。用运放和乘法器实现这个方程需要三个模块。第一反相积分器把 v(t) 积成 φ(t)这里注意积分器输出自带一个负号记的时候要小心。第二模拟乘法器把 φ(t) 和 v(t) 相乘输出一个与乘积成正比的电压。第三由运放组成的求和/减法电路把 v(t)/Ra 这一项和乘积项合并起来形成总电流信号。三个模块级联起来电导 G(t) 1/Ra − βφ(t) 就自然出现了。2.3 三种实现方案横向对比为了说清楚为什么选择模拟运放方案我整理了三种常见实现路径的对比供不同需求的朋友参考。方案核心器件优点缺点适用场景模拟运放乘法器TL081、AD633直观、低成本、全模拟链路、无采样延迟参数受元件精度影响需手动校准教学、预研、电路行为验证数字MCU/FPGASTM32、FPGAADC/DAC参数灵活、可跑复杂模型链路长、有延迟、需要写代码复杂忆阻模型的数值模拟专用忆阻器件TiO2样品、Knowm芯片真实物理器件、接近实际产品难购买、成本高、测试门槛高科研与产品验证从这个表能看出在“理解原理、快速迭代、低成本复现”这个目标下模拟方案优点非常突出。Multisim里还能直接把这些器件拉出来搭跑瞬态分析、扫参数都很方便这也是本文选择它作为实战平台的原因。3. 核心模块设计与参数计算3.1 积分器设计状态变量这一路是灵魂积分器是整个模拟器最核心的模块因为忆阻的“记忆”就体现在这里。我用TL081搭建标准反相积分器输入电压 v(t) 通过电阻 R2 接到反相输入端电容 C1 跨接在输出端和反相输入端之间。输入输出关系是Vφ(t) −(1/(R2·C1)) · ∫v(t)dt这个式子里的负号是反相结构带来的。为了后面乘法器工作方便可以在积分器之后再接一级反相缓冲器把负号消掉也可以在乘法器输入引脚上做调整我习惯在方程里直接带上负号。时间常数 τ R2·C1 决定了状态变量变化的快慢我第一版取 R210kΩ、C10.1μFτ1ms。这个值对应后面要观察的100Hz~500Hz激励信号积分输出幅度适中不会过早饱和。这里有一个必须处理的坑纯积分器对直流偏置极其敏感。运放的输入失调电压、偏置电流都会在电容上持续积累导致输出在仿真开始几毫秒内就冲到电源轨。解决方法是给积分电容并联一个泄放电阻 R3通常取1MΩ。这个电阻把积分器变成了一个截止频率极低约1.6Hz的低通滤波器既不影响目标信号频段的积分行为又能把直流漂移压住。Multisim仿真时还可以在电容属性里把初始条件设为0效果更干净。3.2 差分放大电路实现电流检测要实现方程里的 i(t)需要一个与电流成正比的电压信号。最常见的做法是在输入端串联一个采样电阻 Rs1kΩ然后用差分放大电路检测 Rs 两端的电压。差分放大器由运放和四个等值电阻构成增益设为10输出 vx 10·i(t)·Rs。搭建差分放大时需要注意电阻匹配问题。四个电阻哪怕偏差1%共模抑制比也会明显下降输出电压里会混入共模分量。Multisim里电阻都是理想值这个问题不明显但在实际洞洞板搭电路时就要重视。另一个细节是运放增益带宽积运放GBW的选择。TL081的GBW约3MHz闭环增益10倍时理论带宽还有300kHz对最高1kHz的激励来说绰绰有余。如果换成LM358GBW只有1.1MHz10倍增益下带宽吃不消波形幅度就会在高频段衰减。实验中发现运放的失调电压会直接叠加在 vx 上表现为滞回曲线上下不对称。所以调试时我先用理想运放模型验证电路结构确认没问题后再切换成TL081逐级检查每个节点的直流工作点。3.3 乘法器选型AD633还是其他方案乘法器是这个DIY的核心非线性来源我选AD633。这颗四象限模拟乘法器非常经典传输函数为W (X1 − X2)·(Y1 − Y2) / 10V Z也就是说两个输入电压的乘积会被除以10V的内部基准电压。Multisim的Analog库里有AD633AN模型直接就能用供电±12V或±15V都行。要注意输出系数0.1这个常数很多人第一次仿真时忘记考虑它结果等效电导β偏小了10倍曲线张力完全出不来。AD633的X、Y输入端各有两个差分引脚。X1接积分器输出 VφX2接地Y1接原始输入电压 v(t)Y2接地。Z端通常接一个调零电位器用于抵消输出偏移。在Multisim里不方便拧电位器时可以直接接一个很小的直流电压源微调仿真中观察曲线对称性来整定。如果Multisim版本里找不到AD633也可以用Control Functions库里的Behavioral Multiplication器件做纯数学乘法。但这种无源的理想乘法器没有输入失调、没有内部缩放系数仿真结果会和真实器件略有差异。我的建议是先用Behavioral Multiplication验证整体架构是否正确再换成AD633做最终确认这样能同时避免“电路问题”和“器件模型问题”的干扰。3.4 电流合成与等效忆阻调整最后一步是把 v(t)/Ra 项和乘法器的非线性项合成一个总电流。我采用反相求和电路第一路输入接来自采样电阻的电流信号 vx第二路输入接乘法器输出 W两只输入电阻分别标记为 Rg 和 Rm反馈电阻为 Rf。求和输出电压Vsum −Rf·(vx/Rg W/Rm)这个 Vsum 与总电流成正比把它送给示波器Y通道X通道接 v(t)就能直接观察V-I滞回曲线。整个电路的等效电导大概可以写成G(t) ≈ 1/Ra − (β·Vφ(t)) / (10·Rm)调整 Ra、Rm 的比例就能控制线性电导项和非线性项的权重。想要明显的滞回效果必须让非线性项在状态变量变化范围内起到和线性项可比的作用否则曲线就只是一根偏斜的直线。我在实际调试时激励电压取1V到3V频率100Hz到500Hz时间常数1ms到10ms曲线张力比较明显。如果需要负忆阻特性把求和改成减法即可只需把乘法器那一路接到求和运放的同相输入端或额外加一级反相。4. Multisim仿真实战全流程4.1 元件放置与电源配置打开Multisim之后先把仿真环境设置好。我习惯把两个直流电源 VCC 和 VEE 设为12V和−12V所有运放和乘法器统一使用这两路供电。原理图中建议用/双电源符号避免每个芯片重复接电源线。元件库路径比较简单TL081在Analog下Virtural或TIL库AD633AN在Analog库电阻电容在Basic库。把元件从库中拖出来之后按下快捷键CtrlR旋转方向按空格键翻转按照电路结构排布。我习惯以积分器为中心左边是差分放大器右边是乘法器和求和器这样信号流从输入到输出是从左到右排查问题时一眼就能看出哪个节点波形异常。连线时注意不要让导线跨过元件封装影响预览。4.2 信号源与关键参数设置激励信号用函数发生器或交流电压源都可以我习惯用Function Generator设置正弦波。参数上频率先给200Hz幅度给3V峰值6V注意如果用了函数发生器幅度通常显示的是峰值而不是有效值DC offset设为0。这个频率既能保证积分器输出足够幅度又不会让滞回环收缩得太厉害。仿真类型选择Transient Analysis瞬态分析。Start Time设为0End Time设为0.1sMaximum Time Step设为10μs。这里的Maximum Time Step很关键步长太大会丢失高频细节滞回曲线变得毛糙步长太小仿真速度会慢得让人怀疑人生。200Hz正弦波一个周期5ms用10μs步长相当于一个周期500个采样点足够平滑了。关于Multisim仿真速度修改很多新手容易踩坑。如果Total Time设置成10秒而步长是1μs那计算量是千万级的跑起来当然卡。我的做法是先跑一个周期确认电路架构正确再改成0.1s看稳定的滞回曲线。还可以把不需要的电压表、电流表探针全部删掉只保留示波器两个通道计算负担能小很多。Multisim里Interactive Simulation模式下可以边跑边暂停我看动态趋势时常用它。4.3 曲线观察与结果解读在Multisim里观察V-I曲线最方便的是把输入电压接示波器CH1把 Vsum 电流信号接示波器CH2然后在示波器面板上切到X-Y模式。这时候屏幕上显示的横轴是电压纵轴是电流理想情况会看到一个经过原点的斜8字滞回环。我第一次成功跑出这个曲线时波形还带着一点毛刺。毛刺的来源主要是积分器输出在正弦波过零点附近变化率最大乘以输入电压后产生了较大的瞬间斜率仿真步长稍一粗糙就会表现为高频抖动。把Maximum Time Step从100μs改到10μs毛刺立即就消失了。如果看到的是圆形或椭圆形而不是斜8字说明积分器或乘法器的相位处理有问题最常见的是有一路信号极性接反了查一下积分器负号的方向。频率对曲线形状的影响也值得强调。把频率从100Hz调到1kHz滞回环会明显变窄继续调到10kHz曲线几乎就是一条直线看起来像普通电阻。这恰好复现了忆阻器理论里“高频时记忆特性消失”的行为说明模拟器在行为层面和理想模型是一致的。5. Multisim仿真踩坑实录5.1 高频自激与运放选型问题有人问“4558增益70倍会自激吗”这本质是运放的相位裕度问题。在忆阻模拟器里每个运放的闭环增益通常在1到10倍之间远没到极限所以自激不太会发生。但如果积分器后级接的乘法器输入电容较大或者走线太长高频环路里可能引入额外相移这时候在反馈电阻上并联一个几十皮法的小电容就能压住振荡。运放模型的选择也会影响仿真结果。LM358在低频下波形没什么问题但GBW只有1.1MHz左右用在积分器上时实际积分误差在高频段会变大。TL081是JFET输入运放输入偏置电流小对积分器友好GBW也有3MHz。认真做仿真验证时优先用TL081LM358更适合低频大信号场景。5.2 积分器饱和与初始化问题这个坑我踩得最深。第一版电路没有在积分电容上并联泄放电阻仿真跑到几十毫秒时积分器输出直接顶到−12V电源轨后面乘法器输出全是乱的。电容初始条件默认是0但输入信号的直流偏置哪怕只有1mV也会在积分器里不断积累最终饱和。解决办法有两个一是在C1两端并联1MΩ电阻让直流分量被泄放掉二是在Multisim的电容属性里把Initial Conditions设置为0。两个方法一起用最稳仿真曲线出来就是干净过零点的斜8字没有任何漂移。5.3 乘法器偏移导致曲线不对称如果V-I滞回曲线上下不对称多半是乘法器输出有直流偏置。AD633的Z端就是用来调零的Multisim里直接用一个小直流源接到Z端给几毫伏到几十毫伏的补偿电压观察曲线对称性调整。另一个隐蔽原因是乘法器的两个输入引脚之一有未被抵消的共模电压检查X2、Y2是否都接地。5.4 仿真不收敛与数值问题Multisim有时会弹出“Simulation failed”或奇异矩阵错误。这通常是因为电路里有理想电压源直接并联、运放输出直接接地之类的不合理连接也可能因为积分器和步长不匹配。排查思路很简单先把所有理想运放换成TL081模型再在每个运放输出端串一个100Ω的小电阻隔离后面元件的输入电容。这一步能解决绝大多数收敛问题。最后把Maximum Time Step减小到原来的一半数值稳定性会显著提升。5.5 常见问题速查表现象可能原因解决办法积分器输出持续升高直到饱和积分电容没有泄放路径直流偏置积累C1并联1MΩ电阻电容初始条件设为0滞回曲线不明显接近直线非线性项权重太小或激励频率过高增大乘法器输出增益降低频率至100Hz~500Hz曲线上下不对称或偏移乘法器Z端偏置、运放失调Z端加微调电压检查X2、Y2接地仿真速度极慢Total Time过长、步长太小、探针过多缩短仿真时间增大步长删除多余探针分批仿真Simulation failed 奇异矩阵器件模型不兼容或步长过大换TL081模型运放输出串小电阻减小步长高频毛刺严重Maximum Time Step过大从100μs改到10μs或更小曲线变成圆环某一级信号极性反了相位不对检查积分器负号和乘法器输入极性5.6 排查思路与个人经验排查问题时我习惯从信号流的方向逐级验证。先用电压探针看输入电压 v(t) 是否正常再看积分器输出是不是一条标准的余弦波正弦积分就是余弦再看看乘法器输出是否包含一个频率加倍的成分最后才去看示波器X-Y曲线。逐级确认的流程看起来慢实际最省时间。任何一级波形异常都能立刻定位不用对着一条莫名其妙的曲线瞎猜。如果换了元件模型但波形变化很大也别急着怀疑模型有问题先看元件的供电是否接上、正负电源是否反了。模拟电路里大量所谓“玄学故障”最后查出来都是电源接反、地线没共地之类的基本错误。几个藏不住的实操细节做到这里电路和仿真已经能完整工作了但还有一些细节值得单独写出来。积分器泄放电阻的选择不是越大越好太大会失去泄放作用太小会把积分输出“拉弯”。1MΩ到10MΩ之间对应1kHz以上信号基本没影响我用1MΩ很从容。AD633的输出缩放系数0.1既是便利也是坑。设计时把β值换算清楚不然仿真出来的曲线总差着量级。用公式推完所有参数后在Multisim里先跑一个单频正弦波做一次“参数校准”再用不同频率验证整个流程才可靠。放大器的输出串联小电阻、在每个运放电源引脚加0.1μF去耦电容这些做法在仿真里看起来多余但养成习惯后将来把电路搬上洞洞板时会少很多麻烦。我在Multisim里给所有运放都加了电源去耦电容仿真速度几乎没有影响曲线稳定性却有所提升。这套DIY忆阻模拟器做完后我把放大倍数、积分时间常数、乘法器系数都做成了可调变量。换一组参数曲线就从“强记忆”变成“弱记忆”再换一组又能出现负阻特性的局部区段。这种灵活性让我对忆阻器模型的认识深了好几层后面再看论文里的复杂模型方程脑子里会自动浮现出对应的电路结构理解起来顺畅多了。如果你按这个流程搭完Multisim工程顺利跑出了那条过原点的斜8字曲线恭喜你你已经把运放、乘法器、积分器这些模拟电路核心模块打通了。后续想往深了做可以试试把这个模拟器接到一个简单交叉阵列里看看阵列的串扰和记忆效应也可以把乘法器换成电流传输器OTA做更高频率版本的模拟器。方向很多但第一步都是从准确复现那条蝴蝶曲线开始的。祝调试顺利。