Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言编程运算放大器_C - Fatal编程技术网

用C语言编程运算放大器

用C语言编程运算放大器,c,C,我正在快速尝试用C语言模拟一个简单的运算放大器失真电路,很像:。目前,我只是想模拟一个标准的非反相放大器 我已经写了我认为应该作为代码使用的东西,尽管我可能在某些地方大错特错了 #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; }

我正在快速尝试用C语言模拟一个简单的运算放大器失真电路,很像:。目前,我只是想模拟一个标准的非反相放大器

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

#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;
}
#包括
#包括
#包括
浮动二极管(浮动IP){
如果(IP0.7)返回IP-0.7;
}
浮点运算放大器(浮点VI,浮点VN){
恒浮AOL=100000;
常量浮点VNS=-15,VPS=15;
浮点数OP=0;
OP=AOL*(VN-VI);
如果(OP>VPS)OP=VPS;

if(OPOpAmp函数似乎可疑。与AOL相乘使OP变得非常、非常高或非常、非常低(如+700000或-700000左右),然后将其钳制到+-15。你确定你有正确的AOL装置吗?

你对运放建模的方式给了它一个无限的转换速率,反馈非常慢。输出可以在零时间内瞬间从-VS摆动到+VS,但输入需要非零时间才能看到这种变化的效果。一个真正的放大器是不会停止的通过这种方式,我不确定它是否能够以您尝试的方式正确建模。您可以尝试通过将输出的变化限制在电源电压的1%来降低输出转换速率,然后使用一个非常缓慢变化的小幅度输入。一旦得到合理的结果,您可以旋转回转限制参数


最好的办法:改用SPICE。

这里有问题吗?考虑到带运算放大器的笔和纸设计的标准近似方法是将它们视为受反馈回路约束的无限增益元件,这可能是一个有趣的挑战。我向abelenky道歉,我想知道为什么输出不是输入w的缩放版本关于R1和R2的比例,以及我如何可能将其合并!@Pyrohaz为了获得更好的答案,请用您的上述评论更新您的帖子,并提出一个问题-带“?”的问题。AOL只是为了实现开环增益,这可能是我实现错误的地方吗?