我有一个快速的尝试建模一个简单的运算放大器失真电路的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;
}二极管功能还没有使用,它只是在那里,如果我曾经设法使这个工作!我正在写文件,所以我可以在matlab中绘制输出,尽管现在,作为输出,我只是得到疯狂的振荡!“电源”以+/-15v为限,欢迎任何帮助!
我想知道为什么输出不是相对于R1和R2比率的输入的缩放版本?
发布于 2014-01-18 21:41:09
你对运算放大器建模的方式给了它一个无限的旋转速率和非常慢的反馈。输出可以在零时间内从-VS立即切换到+VS,但输入需要非零时间才能看到这种变化的效果。一个真正的放大器并不是这样工作的,我不确定它是否能像你尝试的那样被正确地建模。您可以尝试放慢输出转速,将输出的变化限制在电源电压的1%左右,然后使用一个非常慢的、幅度很小的输入。一旦你得到了合理的东西,你就可以绕开限制参数。
最好的方法是:用香料代替。
发布于 2014-01-13 15:17:33
OpAmp函数看起来很可疑。与AOL的乘法使运算变得非常非常高或非常非常低(例如在+700000或-700000中),然后将它夹到+-15。你确定你有适合AOL的单位吗?
https://stackoverflow.com/questions/21094463
复制相似问题