2301_80306052 2024-03-30 00:50 采纳率: 0%
浏览 26

555多谐振荡器输出脉冲波

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

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-03-30 00:50
    关注

    引自免费微信小程序:皆我百晓生

    针对555多谐振荡器输出脉冲波的问题,下面是一个基本的原理分析以及详细的解决方案步骤:

    原理介绍:

    单极性多谐振荡器,也被称为正弦波发生器,其主要工作原理是通过改变晶体管的导通状态来产生正弦波信号。这个振荡器由两个PN结组成,一个是控制极A,另一个是漏极B。当两个PN结都处于截止状态时,整个电路就是一个简单的正弦波发生器。由于只有一个极性的控制端,多谐振荡器会产生一个与输入电压的相位差为π/2的频率响应。

    对于555多谐振荡器来说,主要包含三个部分:1)晶体管VT1,2)R7和C1,3)电源VDD、EXT、VDD3、U1和I1等元件。

    1. 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; // 
        
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月30日