☰
基于运放乘法器的忆阻器模拟器设计:从滞回特性到图像识别
2026/10/5 12:22:39 网站建设 项目流程

1. 为什么我需要一台忆阻器模拟器

先说说我的处境:做忆阻器方向研究一年多,最头疼的不是论文看不懂,而是手上根本没有一颗真正可用的忆阻器芯片。忆阻器虽然在1971年就被蔡少棠从理论上预言,惠普实验室也在2008年做出了实物原型,但它至今没有像电阻电容那样大规模商用化。我联系过几家做忆阻器流片的机构,要么排队周期太长,要么最小起订量太高,压根不适合个人研究者做前期验证。

没有实物,论文里的仿真怎么做?实验结果怎么来?我总不能在网上随便copy一份仿真数据交差吧。就是这个尴尬的处境,把我逼上了研究忆阻器模拟器的路。

所谓忆阻模拟器,说人话就是:用现有的分立元器件——运算放大器、模拟乘法器、电阻、电容——搭出一个电路,让它的外部电气特性和真实忆阻器尽量一致。忆阻器的核心特征是:在交流激励下,电压-电流曲线呈现一条过原点的“8字形”斜滞回线,并且滞回环的面积随激励频率升高而逐渐收缩,最终趋近于一条直线(表现为普通电阻)。模拟器只要能复现这个特性,就能在很多场景下替代真实器件完成功能验证。

我这里用的是一套基于运算放大器和模拟乘法器的方案,整套核心电路成本不到一百块,在面包板上就能搭起来。它能模拟电压激励下的忆阻行为,支持调参改变滞回特性,频率响应上限能做到几十千赫兹,足以支撑绝大多数实验室级别的算法验证和教学演示。

如果你也在做忆阻器应用研究但拿不到实物,或者只是想在教学课堂上给学生演示忆阻器的独特电学特性,这篇文章就是给你写的。我会把从原理推导、仿真验证到实物搭接的全过程都过一遍,最后再聊一聊用模拟器阵列做图像识别的思路——这是目前比较有应用前景、也最有意思的一个方向。

2. 忆阻器基础理论与模拟器设计思路

2.1 忆阻器的数学定义与三类模型

要设计模拟器,首先得搞清楚忆阻器到底是什么。蔡少棠当年是从逻辑完备性的角度推导出这个元件的:电阻、电容、电感分别定义了电压和电流、电荷和电压、磁链和电流之间的关系,但电荷和磁链之间的映射缺失了。补上这个缺失关系的元件,就是忆阻器。

理想忆阻器的定义式由两个方程给出:

$$ v(t) = M(q(t)) \cdot i(t) $$

$$ \frac{dq(t)}{dt} = i(t) $$

其中 M 是忆阻值,单位是欧姆,但它不是常数,而是随历史电荷 q 变化的函数。这正是忆阻器“记忆”特性的来源:过去的电流历史改变了当前的状态,当前的状态又反过来影响此刻的阻值表现。

在实际建模中,业界常用三类模型。最经典的是惠普实验室提出的线性离子漂移模型,把忆阻器看成半导体薄膜中掺杂区和非掺杂区的串联电阻,状态变量是掺杂区宽度。这个模型数学简单,适合电路仿真,但忽略了离子运动的非线性。第二种是阈值型模型,只有两端电压超过阈值时才发生状态改变,这更接近真实器件的开关行为。第三种是电压/电流控制模型,用连续函数描述状态演化,比如Biolek模型和Strukov改进模型。

我最初做仿真用的是惠普模型,它的SPICE实现比较成熟,网上有现成的子电路可以直接调用。但当我想在实物电路中验证时发现,惠普模型的数学形式并不容易用分离元件直接映射——它的状态方程里有非线性函数和乘法运算,这些在纯模拟电路里实现起来很麻烦。

2.2 为什么用模拟电路来搭“假忆阻器”

可能有人会问:既然模拟器这么麻烦,为什么不用数字方案?比如用单片机和DAC/ADC采集电压电流数据,再用软件算法模拟忆阻器的状态更新方程,这不是更灵活吗?

确实,数字方案的灵活性更高,修改模型参数只需要改代码。但它的核心瓶颈在于速度。忆阻器的状态更新是连续且高速的,在脉冲激励下,纳秒量级的状态变化都是常见的。单片机或FPGA的采样率一旦遇到高频激励,就会开始“丢帧”,模拟出的滞回曲线发生畸变。更关键的是,数字方案只能给出计算结果,无法体现真正的电压-电流动态过程,对于研究电路相互作用的场景来说,它的保真度是不够的。

模拟电路的方案则刚好相反。只要元件带宽足够,它就能实时响应激励信号的变化,天然具备并行处理和连续响应的能力。用运放和乘法器直接构造状态方程中的积分、乘法和函数映射,本质上是在硬件层面“物理实现”了忆阻器的数学定义,所以模拟器的瞬态响应非常接近真实器件。

我的设计思路是分三步走:把忆阻器的数学模型拆成“状态更新”和“电流输出”两个功能模块,先用运放搭建积分电路完成状态更新,再用模拟乘法器和压控电阻组合完成电流输出,最后用一个激励源扫频验证整体效果。

2.3 我需要模拟哪种类型的忆阻器

在动手之前,我明确了一下需求:我做的应用场景是脉冲神经网络和图像识别中的权值更新,这要求模拟器具备阈值特性——即只有当施加的电压幅度超过某个临界值时,忆阻值才会显著变化;低于阈值的电压只引发普通的电流通断,不改变状态。

这个特性和神经科学里的“激活阈值”概念很相似。神经元只有在输入累积超过阈值时才会发放脉冲,忆阻器也要有类似的阈值行为,才能在神经网络中扮演突触的角色,实现只对有效输入进行权重更新的功能。

所以我的模拟器目标建模对象是阈值型忆阻器。这个选择还有一个实际考虑:阈值型模型的状态方程通常可以用一个分段函数加上一个积分环节来表示,而分段函数在模拟电路里用比较器和开关电路就能实现,比连续函数模型更好搭。

3. 模拟器核心电路设计与实现

3.1 整体架构与功能划分

我设计的忆阻模拟器采用模块化架构,一共分成四个功能模块:激励输入接口、状态积分器、阈值判断与复位、输出转换部分。

信号流是这样的:激励电压进入后兵分两路,一路直接送到阈值比较器判断是否超过阈值,另一路经过增益调整后送到积分器,作为状态更新的输入。阈值比较器的输出控制积分器是否允许积分——只有超过阈值时积分路径才导通。积分器的输出代表了忆阻器的“状态变量”(可以类比为惠普模型中的掺杂区宽度),这个状态变量一路反馈回阈值比较器实现状态相关的阈值变化,另一路送到输出转换部分,控制输出电流的大小。最终在输出端口形成与输入激励相关的电流响应,完成忆阻特性。

这个架构的精髓在于“门控积分”思想。真实忆阻器的状态变量更新可以看成一个受阈值门控的累积过程:在阈值以下,状态几乎不变;在阈值以上,状态按某种速率朝饱和方向演化。我在模拟器里用比较器做门控,用积分器做累积,正好对应了这两个物理过程。

3.2 状态积分器的设计与参数计算

积分器是整个模拟器的心脏。我用的是经典的运放积分电路结构:反相输入端接输入电阻 R_in,反馈回路接积分电容 C_f,同相输入端接地。它的输出和输入满足关系:

$$ V_{out}(t) = -\frac{1}{R_{in}C_f}\int_0^t V_{in}(\tau) d\tau $$

这里的 RC 乘积决定了积分增益,也就是状态更新的速率,直接对应忆阻器中离子迁移的快慢。初始仿真中我选了 R_in = 10kΩ、C_f = 1μF,这样时间常数是 10毫秒,适合1~100Hz范围内的低频激励测试。

但这里有一个我在仿真中反复踩的坑:纯积分器存在严重的直流漂移问题。由于运放输入失调电压和偏置电流的存在,即使输入信号为零,积分器的输出也会缓慢漂移,严重影响模拟器的稳定性和滞回曲线的重复性。

我的解决方法是加入泄放电阻 R_f 并联在 C_f 两端,构成有损积分器。参考经验值取 R_f = 1MΩ,这样直流增益被限制在 100倍(R_f/R_in = 100),而交流积分的起始频率大约是 0.16Hz(1/(2π R_f C_f)),低于这个频率的缓慢漂移会被抑制,高于这个频率的正常积分信号几乎不受影响。

3.3 阈值门控:用比较器和模拟开关实现

阈值门控部分我用了一颗LM393比较器和一颗模拟开关CD4066。LM393是集电极开路输出,需要外接上拉电阻,这个细节在新手设计里经常被忽略,导致输出始终为低电平。

电路原理是这样的:输入激励 Vi 经过两个精密整流二极管(1N4148)分别提取正半周和负半周,然后和参考电压 Vth 比较。我用一个电位器把 Vth 在 0~5V 之间可调,这样就实现了正负方向对称的阈值设置。比较器的输出送到CD4066模拟开关的控制端,只有当输入超过阈值时,开关才导通,允许积分路径进入积分器。

这个设计的物理对应关系很直观——真实忆阻器只有在两端电压超过某个临界值时,内部离子才开始显著移动,电阻状态才发生改变。低于阈值时,器件行为近似普通电阻,状态保持不变。用比较器加模拟开关,就是在电路层面复现这个“软硬阈值的数字化近似”。

需要提醒的是CD4066的导通电阻不是零,一般在几十到几百欧姆,这会影响积分电阻的精度。我在设计积分电阻时预留了微调电位器,让实际测试时可以校准导通电阻的影响。

3.4 输出特性:如何把状态变量变成电流响应

积分器输出的是状态变量信号,它还需要被“翻译”成电流响应,才能在端口上呈现出忆阻器的电气特征。这个翻译过程我用了一个模拟乘法器AD633配合一个压控电流源来实现。

AD633是Analog Devices公司经典的模拟乘法器芯片,它能输出两个输入信号的乘积除以10V。我把积分器的状态变量输出和激励电压信号分别接入AD633的X和Y输入端,输出电压 PROD = (X × Y) / 10V。这个乘积结果再经过一个压控电流源(由运放和采样电阻构成)转换,最终在输出端口形成电流响应。

为什么需要“电压乘电压”这一步?回看忆阻器定义式 v = M(q) × i,如果反解出电流,可以得到 i = v / M(q)。在真实器件中,忆阻值是状态变量的函数,所以在电路里要想复现这个关系,本质上需要实现“电压 × 状态函数”的乘法运算。AD633做的就是这个乘法。

压控电流源部分我用的是经典Howland电流泵拓扑,外加高精度采样电阻 R_sense。Howland电流泵的输出电流由输入电压和 R_sense 决定,理论上不受负载影响。但要注意,它的输出能力有限,我用的是LF356运放,最大输出电流约20mA。如果希望模拟更高电流的忆阻器,需要并联扩流管或者改用功率运放。

4. 从电路仿真到实际波形验证

4.1 仿真环境的搭建与模型选择

在动烙铁之前,我习惯先在Multisim里把电路完整仿真一遍,确认每个节点的波形符合理论预期,再开始实物搭接,这样可以避免很多不必要的烧元件风险。仿真文件我在Multisim 14里搭建,如果没有Multisim,用LTspice搭也能完成基本的功能验证。

仿真中的关键器件选型如下:状态积分器用TL084运放,阈值比较用LM393,模拟开关用CD4066,乘法器用AD633的SPICE模型——ADI官网提供这个模型文件,直接导入Multisim即可。激励源用正弦波发生器,初始设置幅度 3V、频率 1kHz,阈值参考电压设置为 0.8V。

一个容易被忽视的仿真细节是:AD633的SPICE模型可能需要额外的供电和偏置设置。我刚开始仿真时发现输出始终被削顶,后来查资料发现是模型默认的供电电压设置和我的电路不一致。把正负电源设置为 ±12V 后问题消失。如果你也遇到类似现象,先检查模型参数,不要急着怀疑电路结构。

4.2 V-I特性曲线验证“8字”滞回线

仿真的核心验证指标是伏安特性曲线,也就是把输入电压作为X轴、输出电流作为Y轴绘制图形。我使用Multisim的瞬态仿真和XY绘图功能,在仿真结束后调出V-I曲线查看。

在 1kHz、3V 正弦波激励、阈值 0.8V 条件下,我得到的V-I曲线是一个经过原点、呈斜“8字形”的滞回环。滞回环的两个“叶片”分别对应正弦波的正半周和负半周,在过零点附近有一个明显的收缩,这正是忆阻器的标志性特征。

为了进一步验证模拟器的“频率依赖性”,我把激励频率从 100Hz 逐步调到 10kHz,分别在每个频率下记录V-I曲线的旁瓣面积。结果呈现一个单调递减的趋势:100Hz 时旁瓣面积较大,曲线张开明显;10kHz 时曲线基本收缩成一条经过原点的直线,形状和普通电阻无异。这个现象和真实忆阻器的频率响应规律完全一致——频率越高,器件状态越来不及更新,表现越接近普通电阻。

4.3 参数扫描实验:阈值、幅度和频率的影响

我做了三组参数扫描实验,把模拟器在各种情况下的表现摸了个底。这三组实验的数据对后续应用设计非常重要,所以把结论总结在这里。

第一组是阈值扫描:固定频率 1kHz、幅度 3V,把阈值从 0.2V 逐步升到 1.5V。结果显示,阈值越低,滞回环越“肥”,旁瓣面积越大;阈值升高后,滞回环变“瘦”,甚至出现中间平台缺失。这个趋势背后的物理直觉是:阈值越低,状态随激励变化越灵敏,每个周期内有效状态更新的占比越大,滞回效应自然更强。

第二组是幅度扫描:固定频率 1kHz、阈值 0.8V,激励幅度从 1.5V 升到 4V。幅度较低时,只有小部分波形超过阈值,积分器只在很窄的时段内工作,滞回曲线接近一条直线;幅度增大后,超过阈值的波形范围扩大,状态变化幅度也变大,滞回环随之张开。幅度超过 3.5V 后,滞回环的张开趋势变缓,这是因为积分器的输出逐渐接近运放的输出饱和范围,状态变量进入“饱和区”。

第三组是频率扫描:固定幅度 3V、阈值 0.8V,频率从 100Hz 逐步提升到 10kHz。这组实验的结果和理论预期完全吻合,频率升高时旁瓣面积单调减小,模型在高频下退化为线性电阻。实际应用中,如果你希望模拟器在一个目标频率下表现出明显的忆阻特性,需要根据这个规律反向选择RC参数。

4.4 实物搭接与调试过程记录

仿真验证过后,我开始搭实物电路。整套电路我在一块面包板上搭接,用了大概三个工时的调试时间。元器件清单如下:TL084运放两片、LM393比较器一片、CD4066模拟开关一片、AD633乘法器一片、LF356运放一片、精密电阻电容若干、10kΩ和100kΩ电位器各一个、1N4148二极管四只。

实物调试遇到过三个比较棘手的问题,这里详细说一下排查过程。

第一个问题是LM393比较器输出异常。用万用表测量发现输出端一直为高电平,无论如何调节电位器都不变化。逐个检查后发现问题出在比较器的供电端——LM393的供电电压范围是 2~36V 单电源或者 ±1~18V 双电源,但我一开始按TL084的习惯给了 ±15V 供电,这没问题;真正的坑在于它的集电极开路输出需要一只上拉电阻接正电源。焊好 10kΩ 上拉电阻后输出恢复正常。

第二个问题是波形失真。刚开始用示波器观察输出电流波形时,发现正弦波在正负峰值处有明显的削顶现象。根据经验判断这是运放输出饱和——用万用表测AD633供电,发现只有 ±9V 而不是预期的 ±12V,原因是实验室电源面板上那路输出被我误调到了 ±9V。把电源恢复到 ±12V 后波形正常。

第三个问题比较隐蔽:低频时滞回线不闭合。我开始还以为是电路哪里有问题,后来用示波器长余晖模式观察发现,低频下的V-I曲线会缓慢“漂移”,每次扫描的滞回环都不完全重合。这是因为有损积分器的泄放电阻 R_f 周期性地把状态变量部分复位,导致低频段状态累积不稳定。解决方法是把 R_f 从 1MΩ 换成 10MΩ 减小泄放效应,同时确保相邻两次扫描之间的间隔足够长,让积分器复位到零初始状态。

5. 进阶应用:用忆阻模拟器阵列做图像识别

5.1 忆阻交叉阵列的原理与优势

搞定单颗模拟器后,我的下一步是把多颗模拟器组成交叉阵列,尝试做一个图像识别的原型验证。这个方向正是目前忆阻器应用研究最热门的领域之一——用忆阻器阵列实现存算一体和模拟神经网络计算。

忆阻器交叉阵列的结构其实不复杂:把 N 条水平字线(Word Line)和 M 条垂直位线(Bit Line)交叉,每个交叉点放一个忆阻器,就构成了一个 N×M 的突触权值阵列。阵列中的每个忆阻器的电导值代表神经网络中一个突触的权重。在推理阶段,输入图像被编码为电压脉冲序列施加到字线上,在位线侧通过基尔霍夫电流定律完成矩阵向量乘法——电流的大小就是加权累加的结果。

这个方案的核心优势在于存算一体。传统的冯·诺依曼架构中,数据需要在存储器和处理器之间来回搬运,带来大量功耗和延迟。忆阻器阵列直接在存储数据的位置完成计算,把矩阵乘法的复杂度从 O(n²) 降到了 O(1) 的时间复杂度——所有交叉点的电流累加在物理上一瞬间完成。对图像识别这类数据密集型任务来说,这个优势是决定性的。

5.2 模拟器阵列遇到的工程问题与对策

在实际搭建模拟器阵列时,我遇到了几个在单颗模拟器上完全不需要考虑的新问题,这里逐一说明。

第一个是串扰问题。因为没有封装成独立的交叉阵列,而是用面包板把多颗模拟器按行列方式互连,相邻通道之间的寄生电容和互感会导致信号串扰,尤其是在高频激励下。我用 2kHz 左右的低频率激励来兼顾串扰抑制和状态更新时间。同时把电源走线和信号走线尽量分开,地线采用星形接地而不是串联接地,串扰电平从示波器上测得的 80mV 左右降到了 15mV 以下。

第二个是电流累加后的测量精度问题。交叉阵列的输出电流是所有列上忆阻器电流的叠加,如果某个忆阻器的电导误差较大,会直接影响整个列的输出结果。我在每个模拟器输出端串联一个微调电位器,将阵列中所有模拟器的初始电导校准到同一标称值。校准方法是给阵列施加同一个固定电压,逐个调整电位器,使每行的输出电流一致,误差控制在 2% 以内。

第三个是更新一致性问题。在训练过程中,不同的模拟器需要按规则更新电导值,但分立元件的温度漂移和老化效应会导致同一型号的模拟器在相同电压下表现出不同的更新速率。我给每个模拟器做了一个独立阈值微调端子,在阵列训练前先把所有模拟器的阈值和更新速率校准到一致,确保更新规则可以平均地作用于整组权重。

5.3 简单图像识别原型的验证流程

我搭建了一个简化的 8×8 模拟器阵列,用来识别 8×8 的字母图像。数据集用的是经典的手写数字和字母的位图。

流程是这样的:先离线计算好图像分类需要的权重矩阵,把权重量化为电导值,然后手动把每个模拟器的电导值调到对应的量化档位(这个过程在真实的忆阻器阵列中叫“写入”操作,我的分立元件方案只能手动调)。识别阶段,把待识别图像的像素灰度值转换成对应的电压幅度,按行加载到阵列的字线上。阵列位线侧的输出电流通过一个多路选择器依次采样,送到微控制器的ADC转换,最后在电脑端做简单的阈值判断,输出识别的字母类别。

实测中,在无噪声的理想情况下,这个8×8阵列对6个标准字母样本的识别准确率可以达到100%。当我给输入电压叠加5%的随机噪声后,准确率下降到87%。这个结果说明阵列的基本工作逻辑是通的,模拟器能够在功能上复现忆阻器交叉阵列的推理过程。

这个原型虽然粗糙,但它完整走通了一条路径:从忆阻器的电路模型到实体化实现,再到阵列化应用。对于没有真实忆阻器卡片的团队来说,这是一个可行的前期验证平台。

6. 常见问题排查与效果优化

6.1 五类高频问题的诊断清单

在搭建模拟器和阵列的过程中,我把踩过的坑整理成了一份问题诊断清单。如果你是第一次做类似项目,按这个清单排查,能省下大量时间。

故障现象可能原因排查方法与对策
V-I曲线没有滞回激励幅度低于阈值调高激励幅度,确认阈值电位器位置合适
滞回环不闭合积分器泄放电阻过大或复位不足把 R_f 调小一些,扫描前给积分器放电复位
波形削顶失真运放输出饱和或电源电压不足检查正负电源实际电压,确认激励幅度在运放输出范围内
输出噪声偏大布线不合理、电源去耦不足电源引脚加 0.1μF 陶瓷电容去耦,信号线远离电源线
阵列串扰明显地线处理不当、测量顺序有误采用星形接地,信号线屏蔽,降低激励频率

6.2 精度漂移问题的一个隐蔽原因与对策

这里单独说一个我在阵列校准中遇到的隐蔽问题:AD633乘法器的失调电压漂移。

刚开始校准模拟器阵列时,我每次校准完当时看都是准确的,但第二天回来再测量,发现同一颗模拟器的输出电流和前一天记录的值差了将近 5%。一开始我怀疑是环境温度变化导致的元件漂移,后来用高精度数字万用表测量发现,AD633的输出失调电压在温度波动下确实有微伏级的漂移,这个漂移虽然本身很小,但在经过压控电流源的放大之后,最终输出电流的偏差就被放大了。

解决方法是双重的。第一,在AD633的求和输入端加了一个调零电位器,校准时把输入短接,调节电位器让输出为零——这是手册上的标准做法,但我之前偷懒没做。第二,在每次大规模测试前都重新执行一次温度均衡,也就是让整块电路板通电预热至少15分钟再开始校准和测量,尽量避免在冷启动状态下做精确测量。

6.3 提高模拟精度的三个实用技巧

经过多轮调试和对比,我总结出三个能明显提高模拟器精度的实用技巧,供大家参考。

第一,积分电容选择C0G或聚丙烯薄膜电容,不要用X7R陶瓷电容。X7R陶瓷电容的容量值会随直流偏压发生明显变化,我实测在5V偏压下的容量可能比标称值低20%,这会导致积分增益漂移。C0G电容在偏压下几乎不变,虽然贵一点,但对精度提升非常显著。

第二,阈值比较环节增加正反馈电阻,形成施密特触发器结构。直接用比较器输出的数字电平去控制模拟开关,容易在阈值点附近出现反复开关抖动,导致迟滞曲线在过零点附近出现毛刺。接入一个 100kΩ 正反馈电阻后,比较器变成了施密特触发器,开关状态有了约 20mV 的滞回余量,输出干净稳定得多。

第三,激励信号源的输出阻抗要保持稳定。有些信号发生器在不同频率下输出阻抗不同,导致加载到模拟器输入端的实际电压随频率变化。用缓冲器(电压跟随器)隔离信号源和模拟器,加载电压的恒定性和平稳性会大幅提升,我在加缓冲前后对比测试,V-I曲线的重复性误差从 3% 降低到 0.8% 左右。

7. 最终版本的效果评估与后续扩展空间

最终版本的模拟器在 2kHz、3V 正弦激励下测试,V-I特性曲线呈现出标准的斜“8字”滞回形态,滞回环的旁瓣面积稳定,重复性误差在 1% 以内。在 8×8 阵列结构中完成了字母图像识别的全流程验证,无噪声条件下的识别准确率达到100%,含5%噪声时为87%,这个结果验证了模拟器在功能层面对真实忆阻器的替代能力。

从个人体会来说,这套模拟器方案最大的价值不是追求和真实纳米器件在速度、功耗等指标上完全一致——那显然做不到——而是在功能层面提供了一个可以灵活修改参数、成本可控的实验平台。对于动手做忆阻器应用研究的人、想在教学课堂上展示忆阻器特性的老师、以及想在神经网络算法验证中引入硬件在环的计算结构来说,这是目前比较务实的一条路径。

回顾整个项目周期,从最先在Multisim里做仿真,到面包板上拉线调试,再到最后组成阵列做图像识别,我和这套模拟器打了将近一个月交道。踩坑最多的地方集中在运放的供电、比较器的上拉电阻、积分器的漂移这些模拟电路基础问题上。这些东西看似基础,但每一个都能让整个系统从“看着能用”变成“彻底不能用”。希望这篇记录能帮你少走几步弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询