☰
用面包板搭忆阻模拟器:从蝴蝶I-V曲线到阵列图像识别
2026/10/5 12:22:38 网站建设 项目流程

1. 这年头为什么要折腾忆阻模拟器

上一篇文章把忆阻器的定义、电荷-磁通关系和那个很有辨识度的I-V特性曲线讲了一遍。文章发出去之后,私信里被问得最多的问题不是“忆阻器为什么能记住”,而是“这东西我上哪儿买”。这个问题太现实了。我自己的做法是:不买,搭一个忆阻模拟器。

所谓忆阻模拟器,就是用运算放大器、乘法器、电阻电容这些常规元件,在面包板上搭出一个二端器件,让它的端口特性在示波器上看起来和真实忆阻器几乎一致。它没有纳米尺度的物理器件,也不是什么“假忆阻器”,它只是用我们手头最容易拿到的元件,从电路方程层面把忆阻器的状态依赖电阻行为复现出来。对做电路实验、验证算法、给学生上课的人来说,这个方案比追着工厂要样片靠谱得多。这篇文章就围绕忆阻模拟器展开,从设计原理讲到面包板调试,最后再聊一下它在忆阻器阵列和图像识别这类前端研究里能扮演什么角色。

1.1 真实器件难买只是一个原因

真实忆阻器目前还是以研究芯片为主,流片周期长、量少、价格不透明,普通实验室想要几十颗一致性好一点的样品都得排队。即便拿到了,封装、引脚定义、测试手册都是各家自己定的,换一批器件可能就得改板子。更麻烦的是,忆阻器的参数是工艺决定的,你想调节它的等效电阻范围、响应时间常数,基本没有旋钮可拧。

模拟器就完全没有这个问题。它把忆阻器抽象成“一个电阻值受历史电压/电流影响的元件”,用电路去实现这个抽象,关键参数都是由外部电阻电容决定的。想调时间常数,换个电容就行;想调动态范围,改一下反馈电阻;想验证不同模型,直接换不同的乘法器接线方式。对于一个需要反复实验的教学或预研场景,这种可调性比器件本身的金贵特性重要得多。

1.2 模拟器在研究链条里能顶半边天

还有人问我,模拟器是不是只适合教学,科研里用不上?答案是反过来。忆阻器最让电路设计者兴奋的,不是它单个器件有多特别,而是它能组成大规模交叉阵列,用欧姆定律直接做矩阵向量乘。这个方向当前很多工作都卡在器件获取和一致性上,于是不少人先用模拟器阵列跑通算法流程,把训练、权重更新、输出读出这些环节验证完,再考虑用真实器件替换。这个过程里,模拟器是算法和物理器件之间的“翻译官”。

如果要在这个方向里选一个最典型的落地点,就是最近讨论很多的“忆阻器阵列图像识别”。把图像像素映射成交叉阵列里的电导值,再通过基尔霍夫定律完成乘加运算,最后读出每一行的电流来判断这张图是哪一类。这个思路听着很漂亮,但真去搭阵列的时候,你会碰到一大堆工程问题:单元一致性怎么保证、电导怎么写入、读出的电流太小怎么放大。用模拟器阵列来做这些验证,可以先把“算法本身对不对”和“硬件误差怎么处理”分开,逐个击破。这也是我后面专门用一节聊阵列的原因。

2. 忆阻模拟器到底在模拟什么特征

2.1 先认准忆阻器的“指纹”:蝴蝶I-V曲线

搭模拟器之前,得先搞清楚我们要复现的到底是什么。忆阻器的定义核心是:它的电阻不是常数,而是某个状态变量(比如掺杂区宽度、离子浓度、氧空位密度)的函数,而这个状态变量又受流经它的历史电流或电压调制。用公式来表达就是:

v(t) = R(x) · i(t),dx/dt = f(x, v)

第一式说明它在任意时刻都像一只普通电阻,第二式说明这只电阻的阻值会随历史改变。这就产生了一个非常标志性的现象:当用正弦电压激励时,I-V曲线是一条经过原点的“8字”形回线,通常叫蝴蝶曲线或滞回曲线。这条曲线有两个要点,一是它永远过原点,不像电容电感的李萨育图形那样有偏置;二是回线的面积会随激励频率升高而收缩,频率足够高时,忆阻器几乎退化成一个普通电阻。

理解了这两个要点了,就能判断一个电路算不算“忆阻模拟器”。不是所有非线性电阻都能叫模拟器,你的电路必须满足:端口电流是输入电压和状态变量的乘积关系,状态变量对电压存在积分或滤波关系,并且最终呈现蝴蝶I-V。记住这三个条件,后面调电路就不会跑偏。

2.2 用状态变量搭出“可变电阻”

那怎样用普通运放和乘法器把R(x)实现出来呢?我的做法是做一个压控电导结构。假设端口电压是v(t),内部状态变量是z(t),那么让端口电流满足:

i(t) = (1/R_lin) · v(t) - K · v(t) · z(t)

其中z(t)是通过积分器对v(t)积分得到的,也就是z(t) = -(1/τ)∫v(t)dt。把这个电流表达式变形一下,等效电导就是G(t) = 1/R_lin - K·z(t),电导本身被状态变量调制。当输入正弦电压v = V0 sin(ωt)时,z(t)的相位滞后v(t)大约90度,于是电导也在周期性变化,端口电流就会出现二次谐波分量。带有二次谐波的I-V曲线在示波器X-Y模式下会画出蝴蝶形状,这也是模拟器设计里最关键的一招:用积分器制造相位滞后,再用乘法器把滞后信息和当前电压相乘。

要实现这个关系,模拟乘法器是不可或缺的核心器件。常见的AD633、MPY634这类芯片,输出就是两个输入信号的乘积除以10V。如果手头没有乘法器芯片,也可以考虑用模拟乘法器模块、或者用跨导放大器搭出类似的乘积关系,但精度和可调性会差一些。后面所有电路都以AD633为例来讲,其中一个原因是它便宜、通用,另一个原因是它的数据手册里给出了明确的失调调零办法,调试起来比较省心。

3. 一个能在面包板上搭出来的模拟器电路

3.1 核心电路结构与器件选型

下面给出一个我实际搭过多次、适合教学和演示的接地型忆阻模拟器结构。所谓接地型,就是模拟器的一端接地,信号源加在端口和地之间,示波器测量和电流采样都很方便。

整个电路分四块:

  • 输入缓冲级:用一个运放构成电压跟随器,把端口信号隔离出来,供给后级积分器和乘法器使用,避免后级电路影响端口特性。
  • 积分器:用运放加电阻电容组成。输入是端口电压v,输出是状态变量z = -(1/τ)∫v dt,其中τ = R_int · C_int。
  • 乘法器:AD633的X输入端接v,Y输入端接z,输出W = (v · z) / 10V。
  • 电阻网络:端口到地之间接线性电阻R_lin,乘法器输出W经过电阻R_m接到端口。这样,从端口看进去的电流是v/R_lin加上(v - W)/R_m,也就是线性电流和受状态变量调制的电流并联。

细节上,线性电阻不建议直接用单个电位器,因为电位器的温度漂移会让测量曲线歪歪扭扭。我一般用精密金属膜电阻,需要调大小时再用旁路并联的方式微调。运放选择上,积分器对偏置电流有一定要求,我用TL084或OP07都能工作,但TL084的输入偏置电流更小,积分漂移更慢,实测更稳。乘法器芯片记得在每个电源引脚对地加100nF去耦电容,否则高频时波形容易叠加自激振荡。

3.2 关键参数怎么算才好看

参数选得对不对,直接决定示波器上看到的是漂亮的蝴蝶曲线还是贴着横轴的一条直线。先给一组我常用的参数:R_lin = 10kΩ,R_m = 1kΩ,R_int = 2kΩ,C_int = 1μF,此时τ = 2ms。信号源给50Hz、幅度3V的正弦波。

计算一下这组参数下的电流:

v(t) = 3 sin(ωt),ω = 2π × 50 ≈ 314 rad/s

积分器输出 z(t) = (V0 / (ωτ)) cos(ωt) = 3 / (0.628) × cos(ωt) ≈ 4.78 cos(ωt)

乘法器输出 W = v·z/10 = (3 sinωt × 4.78 cosωt)/10 ≈ 1.43 sinωt · cosωt = 0.717 sin(2ωt)

端口总电流近似为:

i(t) = v/R_lin + (v - W)/R_m

线性部分幅度 = 3/10k + 3/1k = 0.3mA + 3mA = 3.3mA 二次谐波部分幅度 = 0.717 / 1k ≈ 0.72mA

二次谐波占比约20%,这个比例下I-V曲线在示波器上已经非常明显,又不会因为非线性太强而削波。如果把τ改成10ms,z幅度会降到约0.96V,二次谐波电流只有0.14mA,蝴蝶曲线就会扁得像一条直线,观感很差。所以调试时首先检查τ不能太大,还要注意信号源幅度不能太小。

3.3 接线顺序与蝴蝶曲线测量

爱好者搭这类电路时,最容易出现“原理图看着对,一上电什么信号都没有”的情况。我的经验是按信号流向来接线,而不是按原理图从上到下接。

第一步,先搭运放的供电和输入缓冲级,用万用表确认输出等于输入。没有信号源的时候,后面都白搭。

第二步,搭积分器并单独测试。给积分器输入一个方波,输出应该是斜波;输入正弦波,输出应该是滞后90度的余弦波。如果这一步看不到波形,大概率是积分电容没有预充电、运放饱和或者反馈电容方向接反。

第三步,接乘法器。单独给X和Y分别加直流电压,测量乘法器输出是不是两者的乘积除以10V。AD633的输出带有Z端补偿,如果输出不准,可以用Z端做失调调整。

第四步,把所有级联起来,信号源输出50Hz、3V正弦波,用示波器的X-Y模式观察I-V曲线。此时X通道接端口电压v,Y通道接电流采样信号。电流采样我推荐在端口串联一个10Ω采样电阻,测电阻两端电压再除以10Ω换算电流,这样不会明显影响电路负载。也可以把采样电阻换成100Ω,但要注意它带来的分压会影响端口电压真实值。

接线顺序的意义在于,每一步都能独立验证,最后合在一起时一旦出问题,你能很快缩小排查范围。我见过不少人直接把所有模块一口面包板连完,结果积分器输出饱和、乘法器失调、跟随器自激混在一起,排故排到心态爆炸。分步调,半小时收工。

4. 现场调试:常见问题与排查实操

4.1 九成问题出在供电和接线

实测下来,面包板上的模拟器出问题,第一大类原因是供电和去耦。运放和乘法器都是双电源器件,±12V或±15V缺一路都会出现“看似有信号但波形不对”的现象。我建议上电后用万用表逐个检查IC电源引脚对地电压,而不是只看电源指示灯。面包板上虚接、跳线松动太常见了,电源指示灯亮不代表每条电源轨都到了芯片引脚。

第二大类原因是积分器直流漂移。理想积分器对任何微小偏置都会持续积分,最后输出顶到电源轨。实际电路里哪怕TL084偏置电流很小,也会在几秒内看到z输出慢慢爬升,随后乘法器输出跟着漂,蝴蝶曲线被推到屏幕外面。对策有两个:一是每隔一段时间短接一下积分电容放电,二是给积分器反馈电阻并联一个大阻值泄放电阻,比如1MΩ,让积分器在低频段变成一个高增益放大器而不是纯积分器。后一种办法会让低频特性略微偏离理想模型,但换来了稳定,实测在50Hz以上基本无感。

还有一类低频问题容易被误判为电路故障:信号频率太低时,z幅度大,运放输出削顶,I-V曲线两端出现平台。这不是坏了,是参数超出线性范围。处理方法要么降低信号幅度,要么增大积分时间常数τ。

4.2 回线形状不对时的排查顺序

如果在X-Y模式下看到回线形状不正常,我有一套固定的排查顺序。

先说最无语的情况:示波器只显示一条直线。先确认输入信号源和地是否共地,确认Y通道接的是采样电阻两端压差而不是对地电压,然后再检查乘法器输出是否为零。若乘法器输出一直为零,多半是Y输入端没有接到积分器输出,或者AD633的X、Y输入被短路到了地。

再说回线不过原点的情况。忆阻器I-V曲线必须过原点,如果回线明显向右上偏移,通常是积分器输出叠加了直流分量,乘到端口电流里形成直流偏置。检查积分器输出有没有缓慢上升,如果有就加强泄放或调零。还有一种可能是采样电阻的位置不对,采样电阻两端的差分信号要用示波器的A-B减法模式或差分探头,否则共模电压会掩盖真实电流波形。

最后说回线不对称的情况。这里要区分是幅度不对称还是相位不对称。幅度不对称大多是乘法器输入失调造成的,用Z端补一个直流电压,让X=Y=0时输出为零。相位不对称则有可能是积分电容漏电严重,尤其是电解电容,漏电会把积分相位从90度拉偏。所以积分电容我强烈推荐CBB电容或聚丙烯电容,别贪方便用电解电容。

还有一点值得提:示波器X-Y模式下两个通道的垂直档位最好分别设置,X通道看电压,Y通道看电流转换电压,显示比例不合理时,蝴蝶曲线会压扁成香肠。我会先把X通道调成每格1V,Y通道先放大到每格50mV,然后根据显示微调。这个步骤看起来不起眼,但直接影响你对非线性强弱的判断。

5. 从单个模拟器到阵列,再到图像识别

5.1 忆阻器阵列为什么值钱

单颗忆阻器再稀罕,也只是一只“会记住历史的电阻”。忆阻器真正引人注目的是把成千上万颗器件排列成交叉阵列,在阵列的行端输入电压,列端读出电流。由于每个交叉点都是独立电阻,每一列的电流等于所有行电压乘以对应电导的求和,这本质上就是一次完整的矩阵向量乘运算。神经网络的推理过程,很大一部分可以被这种模拟计算吞掉,不用一个一个查表累加,也不需要在存储器和计算单元之间来回搬运数据。

图像识别恰好是矩阵运算的主场。把一张图片的像素值编码成行输入电压,把训练好的权重映射成阵列交叉点的电导,列端电流就是卷积或者全连接层的输出。这套思路能跑通,阵列单元的一致性就很重要:如果电导漂移,识别率立刻崩。现实中,不同批次的忆阻器特性可能有20%以上的偏差,这对算法鲁棒性是个严峻考验。

5.2 用模拟器阵列跑通图像识别的最小实验

一轮算法验证用真实器件实在太难了,很多实验室的折中方案是搭一个小规模模拟器阵列。我可以给一个最小配置思路:先做4×4阵列,每个交叉节点用一个独立的忆阻模拟器替代,行输入由信号源或DAC驱动,列输出经低噪声放大后接ADC采集。权重写入就等价于调节每个单元的R_lin或内部积分系数,这比真实器件好操作得多。识别目标用最简单的4×4二值字母图,比如A、B、C各做几个样本,训练过程简化成对每个单元电导的反复调整。

这个方案做下来,你会发现几个有意思的工程点:列电流的动态范围相差很大,需要设计增益可调的前端;单元之间的串扰不一定来自物理漏电,而可能来自信号源驱动能力;对权重更新算法做容错性测试时,加入模拟器本身的噪声和漂移,反而比纯仿真更接近真实场景。很多人担心模拟器阵列“太理想”,但恰恰是这些不理想,逼你把算法调试得更扎实。

如果节点数超过16个,面包板方案就非常痛苦了,布局、线序、电源一致性都会让人崩溃。此时更实际的做法是改用基于微控制器的数字化模拟器节点,每个节点用一个MCU加DAC/ADC完成状态方程计算,虽然刷新率受限于采样率,但胜在参数可随意配置、一致性几乎完美。后面第6节再简单展开这条路线。

6. 仿真替代方案和下一步玩法

6.1 LTspice里五分钟验证方案

如果没有硬件条件,先用仿真把电路行为跑通也是很好的路径。我在LTspice里通常不用AD633自带模型,因为某些版本模型收敛性不好,而是直接用行为源B来替代乘法器。设置两个B源,一个负责计算乘法输出W = V(v) × V(z) / 10,另一个负责积分器的电容电流或直接用拉普拉斯形式描述。这样做的好处是仿真速度快,而且方便修改状态变量方程,想接入更复杂的忆阻器物理模型时也更容易。

仿真时有个细节要注意:理想积分器在瞬态仿真里同样会漂移。我处理的办法是在积分器反馈电容两端并联一个大电阻,比如10MΩ,给直流提供一个泄放路径,这样静态工作点能稳定。同时扫描不同频率,把50Hz、200Hz、1kHz三组I-V曲线放在同一张图上对比,能很直观地看到回线面积随频率收缩的规律,这是判断模拟器模型正确与否的重要依据。

6.2 数字化模拟器:可编程才是终极形态

从单颗模拟器到模拟器阵列,再到后续想接更复杂的在线学习算法,硬件式模拟器在灵活性和规模上都开始吃力。另一种思路是用微控制器或FPGA实现“数字忆阻模拟器”:ADC采集端口电压,MCU里跑状态方程dx/dt = f(x, v),再用DAC输出一个等效电阻电流响应。这种实现本质上是一个实时求解差分方程的闭环,好处是换模型只需要改代码,不需要改电路。

有人可能会问,数字模拟器还有意义吗?当然有,尤其在做系统级验证时,你需要的不是某一种器件的精确模型,而是几百个参数各异、可以随时动态调整的忆阻单元。这时候数字化方案的可编程性就是最大优势。实际上,很多做忆阻器阵列图像识别的团队,前期就是用这种“半实物仿真”的方式来标定算法的鲁棒性边界,等算法稳定了,再去争取真实器件资源。这个路线,我认为是当前环境下性价比最高的玩法。

7. 一点个人体会

说回开头那个问题:“忆阻器上哪儿买”。我现在会直接告诉对方,先别急着买,找两块TL084、一片AD633和几个电阻电容,把模拟器搭出来玩明白,你收获的不会比拿到真器件少。因为你在搭的过程中,会对状态变量、相位滞后、蝴蝶曲线、频率收缩这些概念建立非常具体的直觉,这些直觉才是后续做阵列、做图像识别算法时最值钱的东西。

最后再分享一个小技巧:每次搭完模拟器,我都会把当时用的R_lin、R_m、R_int、C_int和激励频率记在示波器截图的文件名里。这套记录习惯帮了我大忙,因为频率和幅度一变,I-V曲线形态差别很大,隔几天回来看数据,没有参数记录的实验等于白做。想复现别人结果的时候,也一定记得先核对对方用的参数条件,而不是只看那张漂亮的蝴蝶图。参数不对,再好的电路也给你脸色看。

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

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

立即咨询