首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C语言编写运放程序

用C语言编写运放程序
EN

Stack Overflow用户
提问于 2014-01-13 15:03:11
回答 2查看 2.2K关注 0票数 0

我有一个快速的尝试建模一个简单的运算放大器失真电路的C,很像:原理图。目前,我只是试图模拟一个标准的非逆变放大器。

我已经写了一些我认为应该作为代码工作的东西,尽管我在某个地方可能大错特错了!

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

float Diode(float IP){
    if(IP<0.7) return 0;
    if(IP>0.7) return IP-0.7;
}

float OpAmp(float VI, float VN){
    const float AOL = 100000;
    const float VNS = -15, VPS = 15;
    float OP = 0;

    OP = AOL*(VN - VI);
    if(OP>VPS) OP = VPS;
    if(OP<VNS) OP = VNS;

    return OP;
}

int main()
{
    float C, OP = 0, IVI = 0;
    const float R1 = 100, R2 = 100;

    FILE *f, *f2;

    f = fopen("wf.txt", "w");
    f2 = fopen("ws.txt", "w");

    for(C = 0; C<8*M_PI; C+=0.1){
         //Inverting input variable   
        IVI = OP*R2/(R1+R2);
        printf("%f\n", IVI);

        OP = OpAmp(IVI, sinf(C));

        fprintf(f, "%.2f\n", OP);
        fprintf(f2, "%.2f\n", sinf(C));
    }

    fclose(f);
    fclose(f2);

    return 0;
}

二极管功能还没有使用,它只是在那里,如果我曾经设法使这个工作!我正在写文件,所以我可以在matlab中绘制输出,尽管现在,作为输出,我只是得到疯狂的振荡!“电源”以+/-15v为限,欢迎任何帮助!

我想知道为什么输出不是相对于R1和R2比率的输入的缩放版本?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-18 21:41:09

你对运算放大器建模的方式给了它一个无限的旋转速率和非常慢的反馈。输出可以在零时间内从-VS立即切换到+VS,但输入需要非零时间才能看到这种变化的效果。一个真正的放大器并不是这样工作的,我不确定它是否能像你尝试的那样被正确地建模。您可以尝试放慢输出转速,将输出的变化限制在电源电压的1%左右,然后使用一个非常慢的、幅度很小的输入。一旦你得到了合理的东西,你就可以绕开限制参数。

最好的方法是:用香料代替。

票数 1
EN

Stack Overflow用户

发布于 2014-01-13 15:17:33

OpAmp函数看起来很可疑。与AOL的乘法使运算变得非常非常高或非常非常低(例如在+700000或-700000中),然后将它夹到+-15。你确定你有适合AOL的单位吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21094463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档