为什么我的仿真总出错?明明和给的范例是一样的 教教我吧求解答 想提个问要求好多啊

关注引自免费微信小程序:皆我百晓生
针对555多谐振荡器输出脉冲波的问题,下面是一个基本的原理分析以及详细的解决方案步骤:
原理介绍:
单极性多谐振荡器,也被称为正弦波发生器,其主要工作原理是通过改变晶体管的导通状态来产生正弦波信号。这个振荡器由两个PN结组成,一个是控制极A,另一个是漏极B。当两个PN结都处于截止状态时,整个电路就是一个简单的正弦波发生器。由于只有一个极性的控制端,多谐振荡器会产生一个与输入电压的相位差为π/2的频率响应。
对于555多谐振荡器来说,主要包含三个部分:1)晶体管VT1,2)R7和C1,3)电源VDD、EXT、VDD3、U1和I1等元件。
VT1:控制极连接和输出电路
VT1通常用于锁存和保持当前输出频率。具体电路结构可以参考以下示例:
Vcc = 1.0伏;
Vdd = 3.3伏;
R7 = 10kΩ;
C1 = 1nF;
// VT1: 输入级
R0 = 100Ω;
A = R7 * (R7 + R0) / 2; // 结点电容C1在VT1内部储能
// VT1: 输出级
R2 = 10kΩ;
XSC1 = 10u^2;
R9 = 1u^2;
XFG = 1u^2;
D2 = 1u^2;
W = 1u^2;
D1 = 1u^2;
Key = "A";
// VT1: 调整锁定时间(TL)
THR = 0.1μF;
Vcc饱和延时THRE = 1uS; // 设置锁定时间延长到1微秒,使多谐振荡器更稳定
// VT1: 控制源电流(I1)
I1 = Vcc * THRE / 2; // 进行环流控制
// VT1: 接地电阻接地(RG)
RG = 10uΩ;
key(B): {"BG": RG, "CI": I1};
// 组合逻辑:保持信号VDD3恒定且与VT1同步
SW = [R7, C1];
SW[0].D = [R7, C1]; // 第1脚引脚驱动VT1的输入级,同时设置晶体管VT1作为比较寄存器
SW[1].D = [R2, C1]; // 第2脚引脚驱动VT1的输出级,同时设置晶体管VT1作为比较寄存器
SCL = SW[1].out; // 接入外部时钟信号SCL
// 低频调制:通过TTL门控调制器设定多谐振荡器输出频率
TSL = [[1], [0]];
TLG = [[1], [0]];
// 高频调制:通过运算放大器和比较寄存器实现直接加法和异或运算,计算频率并转换为模拟信号输出
WM = [[0, 0], [0, 0]];
AM = [[0, 0], [0, 0]];
AC = [[0, 0], [0, 0]];
BC = [[0, 0], [0, 0]];
CM = [[0, 0], [0, 0]];
CM[0][0] = [WM[0][0], WM[1][0]];
CM[0][1] = [WM[0][1], WM[1][1]];
CM[1][0] = [WM[0][0], WM[0][1]];
CM[1][1] = [WM[0][1], WM[1][0]];
CM[2][0] = [WM[0][0], WM[1][1]];
CM[2][1] = [WM[0][1], WM[0][0]];
RB = CM;
RB[0][0] = [AM[0][0], AM[1][0]];
RB[0][1] = [AM[0][1], AM[1][1]];
RB[1][0] = [AM[0][0], AM[0][1]];
RB[1][1] = [AM[0][1], AM[0][0]];
RB[2][0] = [AM[0][0], AM[1][1]];
RB[2][1] = [AM[0][1], AM[0][0]];
TB = RB;
TB[0][0] = [CM[0][0], CM[1][0]];
TB[0][1] = [CM[0][1], CM[1][1]];
TB[1][0] = [CM[0][0], CM[0][1]];
TB[1][1] = [CM[0][1], CM[0][0]];
TB[2][0] = [CM[0][0], CM[1][1]];
TB[2][1] = [CM[0][1], CM[0][0]];
// 初始参数设置
for (let i = 0; i < 12; i++) {
XV = random(0, 1); // 随机选取角度
XV *= 2; // 旋转变换,增加角速度变化幅度
let MV = random(-100, 100); // 随机选择初始幅度
MV /= 16; // 将步长缩小至1/16,降低冲击性和失真程度
MV = XV + MV; // 翻转振荡周期,增加初始振幅
SV = random(-100, 100); // 随机选择初始振幅
SV /= 16; // 将步长缩小至1/16,降低冲击性和失真程度
MV += SV; // 增加倍增率,进一步翻转振荡周期
// 对于XSC1的负载,设置不同的阈值,对应VCC输入电压的不同范围
if (Vcc > 2.5) { // 允许VCC输入大于2.5V
XSC1 threshold = 1uV; // 阈值设置为1uV
} else if (Vcc > 1.5) { // 允许VCC输入大于1.5V
XSC1 threshold = 0.5uV; // 阈值设置为0.5uV
} else { // 不允许VCC输入超过1V
XSC1 threshold = 0uV; // 阈值设置为0uV
}
}
// 输出频率定时器:调整初始频率和VCC输入电压进行定时启动
TSW = [[1], [0]];
TLG = [[1], [0]];
TF = [[0, 0], [0, 0]];
TF[0].D = [0, 0]; // 初始化零电平触发信号
TF[1].D = [0, 0];
// 当外部时钟信号SCL达到预定值时,触发多谐振荡器初始化过程
while (!TF[0].on) {
SW[0].D = [SW[1].out, 0];
SW[1].D = [SW[0].out, 0];
SCL = SW[1].out; // 更新外部时钟信号SCL
// 计算预设的时间常数(TCP),减去TTL门控延迟(TTL-TLS)
TCP = (TTL - TLG[0][1]) * 1e-3; // 计算预设的周期常数
// 如果TCP小于或等于初始频率确定的最小正反馈时间,进入负反馈
if (TCP <= THRE) { // 正反馈时间不足,进入负反馈
break; // 断开循环
}
// 开始倒计时,每经过一定时间执行一下初始化操作
for (let t = 0; t < TCP / THRE; t++) {
TLG[0][1] = RLG; // 阶段延迟,反转TRI触发信号
TLG[1][1] = RLG; // 同理,反转THI触发信号
TF[0].D = [TSL[0][0], 0];
TF[1].D = [TF[0].out, 0];
TSW[0].D = [0, 0];
TSW[1].D = [0, 0];
TF[0].out = RF; // 邮件速率设置为最大时钟频率,防止输入电流过大导致硬件过热
TF[1].out = RF; //