2014-01-13 3 views
0

C에서 간단한 연산 증폭기 왜곡 회로를 모델링하는 데 빠른 시도가 있습니다. 바로 Schematic과 같습니다. 지금은 표준 비 반전 증폭기를 시뮬레이션하려고하고 있습니다.C에서 op 앰프 프로그래밍

코드로 작동해야한다고 생각하는 부분을 작성했습니다. 어딘가에서 크게 틀렸을 것입니다. 내가 얻을 관리하는 경우

#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의 비율과 관련하여 입력의 크기 조정 버전이 아닌 이유가 궁금합니다.

+2

여기에 *** 질문 ***이 있습니까? – abelenky

+0

연산 증폭기가있는 연필 및 종이 디자인의 표준 근사값이 피드백 루프에 의해 제약 된 무한 이득 요소로 취급된다는 점을 감안할 때 이것은 흥미로운 도전 일 수 있습니다. – keshlam

+0

내 사과 @abelenky, 왜 출력 R1과 R2의 비율과 관련하여 입력의 크기가 조정되지 않습니다 궁금하네요 어떻게 내가 그것을 통합 할 수 있습니다! – Pyrohaz

답변

1

귀하가 연산 증폭기를 모델링 한 방식은 매우 느린 피드백을 갖는 무한 슬 루율을 제공합니다. 출력은 0V에서 순간적으로 -VS에서 + VS까지 스윙 할 수 있지만 입력 값이 0이 아닌 시간이 지나면 그 변화의 효과를 볼 수 있습니다. 실제 앰프는 이런 방식으로 작동하지 않으며, 실제로 시도하는 방식으로 올바르게 모델링 될 수 있는지 확신 할 수 없습니다. 출력의 변화를 전원 전압의 1 %로 제한 한 다음 작은 진폭으로 매우 느리게 변경되는 입력을 사용하여 출력 슬 루율을 낮추십시오. 일단 당신이 합리적인 무언가를 얻으면, 당신은 패러미터를 제한하는 회전을 왜곡시킬 수 있습니다.

최상의 아이디어 : 대신 SPICE를 사용하십시오.

0

OpAmp 기능이 의심스러운 것 같습니다. AOL과의 곱셈은 OP가 매우, 매우 높거나 매우 낮게 (약 +700000 또는 -700000 정도), + 15로 고정시킵니다. AOL에 대한 올바른 장치를 가지고 있습니까?

+0

AOL은 오픈 루프 게인을 의미합니다. 구현이 잘못되었을 수 있습니까? – Pyrohaz