Op-Amp Experimentation 1: Op-Amp Basics

Op-Amp Experimentation 2: Basic Circuit Math

Op-Amp Experimentation 3: Op-Amp Applications

Op-Amp Experimentation 4: From Ideal to Real

Op-Amp Experimentation 5: Integrator

Op-Amp Experimentation 6: Differentiator

Op Amp Experimentation 7: PID Controller – coming soon

Okay, let’s test some of this out. For the record, I am using Visual Studio 2015 and a Teensy 3.2 for these tests. The first thing I want to try out is the integrator.

The equation for this is: {V_{out}} =  - {1 \over {{R_2}{C_1}}}\int {{V_{in}}\left( t \right)dt}

Here is the circuit that I made for doing some integration:

OpAmpIntegrator

I had the A14 pin on the Teensy write a simple sine wave, and recorded the input. Here is the resulting output:

OpAmpIntegrationRawResult OpAmpIntegrationResult

 

As you can see, if the OUTPUT is a sine wave, the INPUT is the integration of that sine wave. It works! Here is the Arduino code I made:

/******************************
   Op Amp Integration
   by Taylor Schweizer

   This program is meant to be
   a way of testing an op-amp
   integration circuit.
   See my website learn-cnc.com
   for more details on the circuit.
 ******************************/

//Pin declarations!
//PWM_Sense - analog pin for measuring PWM pin
//OPAMP_Pin - analog pin for measuring op-amp output
//PWM pin - ...pwm pin
//Start_Interrupt - pin used for starting a test
int SINE_INPUT = 14;
int OPAMP_INPUT = 15;
int INTERRUPT_PIN = 4;

void setup()
{
  //Options for the Teensy 3.2, not sure if it'll work with your microcontroller
  analogReference(DEFAULT);
  analogReadResolution(16);
  analogReadAveraging(8);

  //Begin serial, print some information
  Serial.begin(9600);

  //Setup pins
  pinMode(SINE_INPUT, INPUT);
  pinMode(OPAMP_INPUT, INPUT);
  pinMode(A14, OUTPUT);
  pinMode(INTERRUPT_PIN, INPUT_PULLUP);
  analogWrite(A14, 128);
}


void loop()
{
  //Basically just a simple psuedo interrupt code
  if (digitalRead(INTERRUPT_PIN) == LOW) {
    delay(1000);
    startTest();
  }

}


void startTest() {


  long startTime = micros();
  //Begin a sine wave so the op-amp can reach a stable value
  //It kept climbing when I first tried this out, so this just
  //lets the signal stabilize
  for (int j = 1; j < 100; j++) {
    for (float i = 0.01; i < 6.28; i = i + 0.01) {
      analogWrite(A14, (sin(i) * 100.0 + 128.0));
    }
  }

  //Here is the actual test. Open the Serial Monitor,
  //And push the button in the schematic to begin the test
  startTime = micros();
  for (int j = 1; j < 10; j++) {
    for (float i = 0.01; i < 6.28; i = i + 0.001) {
      analogWrite(A14, (sin(i) * 100.0 + 128.0));
      Serial.print(micros() - startTime);
      Serial.print("\t");
      Serial.print(analogRead(SINE_INPUT));;
      Serial.print("\t");
      Serial.println(analogRead(OPAMP_INPUT));
    }
  }
  delay(1000);
}

Previous: Op-Amp Experimentation 4: From Ideal to Real

Next: Op-Amp Experimentation 6: Differentiator

 

Op-Amp Experimentation 5: Integrator
Tagged on:     

Leave a Reply