Labo 3: operationele versterker
3.0 Omgeving in orde brengen
In dit labo gaan we een sinus versterken. Om deze sinus te genereren, maken we gebruik van de extra bibliotheek DacESP32. Deze bibliotheek kun je, net zoals in het vorige laboratorium, installeren via de Arduino IDE. We gebruiken een DAC van de ESP32 om de sinus te genereren.
Installeer de bibliotheek en upload de onderstaande code naar je ESP. Op pin 25 wordt de gegenereerde sinus uitgezonden met een offset van ongeveer 1.8V, terwijl op pin 26 een vaste spanning van 1.8V wordt uitgezonden. Deze vaste spanning wordt later gebruikt tijdens de opdrachten met de opamp schakelingen.
Er is een extra pin (2) gedefinieerd zodat je de functionaliteit van de sinus kort kunt testen in je seriƫle monitor/plotter. Verbind eenvoudigweg pin 25 of 26 met pin 2. Je kan altijd extra pinnen definiƫren om meerdere signalen tegelijkertijd te tonen.

DacESP32 library

Sinus wave

ESP setup
#include <DacESP32.h>
#include <SPI.h>
#include <TFT_eSPI.h> // Hardware-specific library
TFT_eSPI tft = TFT_eSPI(); // Constructor for the TFT library
// Define the DACs
DacESP32 dac1(GPIO_NUM_25); // used to generate sine wave
DacESP32 dac2(GPIO_NUM_26); // used as DAC bias (DC offset)
int readPin = 2;
void setup() {
Serial.begin(115200);
pinMode(readPin, INPUT);
tft.init();
tft.setRotation(3); //setRotation: 2: Screen upside down in landscape
// fixed DC offset at 1.8 V
dac2.outputVoltage(uint8_t(128));
dac2.setCwScale(DAC_CW_SCALE_8);
dac2.setCwOffset(0);
// Scale CW to leverage full range of DAC
dac1.setCwScale(DAC_CW_SCALE_8);
dac1.setCwOffset(0);
dac1.outputCW(100);
tft.fillScreen(TFT_BLACK); //Fill screen with random colour
drawSineWave();
}
void loop() {
int read_sine = analogRead(readPin);
Serial.print(0);
Serial.print(" ");
Serial.print(5000);
Serial.print(" ");
Serial.println(read_sine);
delay(100);
}
void drawSineWave() {
tft.fillScreen(TFT_BLACK); // Clear the screen with black color
tft.drawCentreString("Sine Wave", tft.width() / 2, 10, 2); // Draw title
int amplitude = 50; // Amplitude of the sine wave
int offset = tft.height() / 2; // Vertical offset to center the wave
float frequency = 0.1; // Frequency of the sine wave
for (int x = 0; x < tft.width(); x++) {
int y = offset + amplitude * sin(frequency * x);
tft.drawPixel(x, y, TFT_WHITE); // Draw the sine wave pixel by pixel
}
}