- Komponenter kreves
- MCP4725 DAC-modul (digital til analog omformer)
- I2C-kommunikasjon i MCP4725
- Kretsdiagram og forklaring
- Programmering STM32F103C8 for digital til analog konvertering
- Testing av DAC med STM32
Vi vet alle at mikrokontrollerne bare fungerer med digitale verdier, men i den virkelige verden må vi håndtere analoge signaler. Derfor er ADC (analoge til digitale omformere) der for å konvertere analoge verdier i den virkelige verden til digital form slik at mikrokontrollere kan behandle signalene. Men hva om vi trenger analoge signaler fra digitale verdier, så her kommer DAC (Digital til Analog Converter).
Et enkelt eksempel for Digital til Analog-omformer er å spille inn en sang i studio der en kunstnersanger bruker mikrofon og synger en sang. Disse analoge lydbølgene blir konvertert til digital form og deretter lagret i en fil i digitalt format, og når sangen spilles ved hjelp av den lagrede digitale filen, konverteres de digitale verdiene til analoge signaler for høyttalerutgang. Så i dette systemet brukes DAC.
DAC kan brukes i mange applikasjoner som motorstyring, kontrolllysstyrke på LED-lysene, lydforsterker, videokodere, datainnsamlingssystemer etc.
Vi har allerede grensesnitt MCP4725 DAC-modul med Arduino. I dag vil vi bruke den samme MCP4725 DAC IC for å designe en Digital til Analog-omformer ved hjelp av STM32F103C8 Microcontroller.
Komponenter kreves
- STM32F103C8
- MCP4725 DAC IC
- 10k potensiometer
- 16x2 LCD-skjerm
- Brettbrett
- Koble ledninger
MCP4725 DAC-modul (digital til analog omformer)
MCP4725 IC er en 12-bit digital til analog omformermodul som brukes til å generere analoge utgangsspenninger fra (0 til 5V) og den styres ved hjelp av I2C-kommunikasjon. Den leveres også ombord med ikke-flyktig minne EEPROM.
Denne IC har 12-biters oppløsning. Dette betyr at vi bruker (0 til 4096) som inngang for å levere spenningsutgangen med hensyn til referansespenning. Maks referansespenning er 5V.
Formel for å beregne utgangsspenning
O / P-spenning = (referansespenning / oppløsning) x digital verdi
For eksempel hvis vi bruker 5V som referansespenning og la oss anta at digital verdi er 2048. Så for å beregne DAC-utgangen.
U / P-spenning = (5/4096) x 2048 = 2,5V
Pinout av MCP4725Nedenfor er bildet av MCP4725 med tydelig angivende pin-navn.
Pins av MCP4725 |
Bruk |
UTE |
Utganger Analog spenning |
GND |
GND for utgang |
SCL |
I2C seriell klokkelinje |
SDA |
I2C Seriell datalinje |
VCC |
Inngangsreferansespenning 5V eller 3,3V |
GND |
GND for inngang |
I2C-kommunikasjon i MCP4725
Denne DAC IC kan grensesnittes med hvilken som helst mikrokontroller som bruker I2C-kommunikasjonen. I2C-kommunikasjon krever bare to ledninger SCL og SDA. Som standard er I2C-adressen for MCP4725 0x60. Følg lenken for å vite mer om I2C-kommunikasjon i STM32F103C8.
I2C-pinner i STM32F103C8:
SDA: PB7 eller PB9, PB11.
SCL: PB6 eller PB8, PB10.
Kretsdiagram og forklaring
Forbindelser mellom STM32F103C8 og 16x2 LCD
LCD-pinne nr |
LCD-pinnens navn |
STM32 Pin-navn |
1 |
Bakken (GND) |
Bakken (G) |
2 |
VCC |
5V |
3 |
VEE |
Pin fra Center of Potentiometer for kontrast |
4 |
Registrer Velg (RS) |
PB11 |
5 |
Les / skriv (RW) |
Bakken (G) |
6 |
Aktiver (EN) |
PB10 |
7 |
Databit 0 (DB0) |
Ingen tilkobling (NC) |
8 |
Databit 1 (DB1) |
Ingen tilkobling (NC) |
9 |
Databit 2 (DB2) |
Ingen tilkobling (NC) |
10 |
Databit 3 (DB3) |
Ingen tilkobling (NC) |
11 |
Data Bit 4 (DB4) |
PB0 |
12 |
Databit 5 (DB5) |
PB1 |
1. 3 |
Databit 6 (DB6) |
PC13 |
14 |
Databit 7 (DB7) |
PC14 |
15 |
LED-positiv |
5V |
16 |
LED negativ |
Bakken (G) |
Forbindelse mellom MCP4725 DAC IC og STM32F103C8
MCP4725 |
STM32F103C8 |
Multimeter |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
UTE |
PA1 |
Positiv sonde |
GND |
GND |
Negativ sonde |
VCC |
3,3V |
NC |
Et potensiometer er også koblet til, med midtpinnen koblet til PA1 analog inngang (ADC) på STM32F10C8, Venstre pinne koblet til GND og høyre pinne koblet til 3,3 V på STM32F103C8.
I denne opplæringen vil vi koble en MCP4725 DAC IC med STM32 og bruke et 10k potensiometer for å gi analog inngangsverdi til STM32 ADC-pin PA0. Og bruk deretter ADC for å konvertere analog verdi til digital form. Deretter sender du de digitale verdiene til MCP4725 via I2C-buss. Konverter deretter de digitale verdiene til analoge ved hjelp av DAC MCP4725 IC, og bruk deretter en annen ADC-stift PA1 på STM32 for å sjekke den analoge utgangen til MCP4725 fra pinnen OUT. Vis til slutt begge ADC- og DAC-verdiene med spenninger i 16x2 LCD-skjermen.
Programmering STM32F103C8 for digital til analog konvertering
En FTDI-programmerer er ikke nødvendig nå for å laste opp kode til STM32F103C8. Bare koble den til PC via USB-port på STM32 og start programmeringen med ARDUINO IDE. Besøk denne lenken for å lære mer om programmering av STM32 i Arduino IDE. Komplett program for denne STM32 DAC-opplæringen er gitt til slutt.
Først inkluderer biblioteket for I2C og LCD ved bruk av wire.h, SoftWire.h og liquidcrystal.h- biblioteket. Lær mer om I2C i STM32 Microcontroller her.
#inkludere
Neste definer og initialiser LCD-pinnene i henhold til LCD-pinnene som er koblet til STM32F103C8
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Definer deretter I2C-adressen til MCP4725 DAC IC. MCP4725 DAC-standard I2C-adresse er 0x60
#definer MCP4725 0x60
I ugyldig oppsett ()
Først begynner I2C-kommunikasjonen ved pinnene PB7 (SDA) og PB6 (SCL) på STM32F103C8.
Wire.begin (); // Begynner I2C-kommunikasjonen
Sett deretter LCD-skjermen i 16x2-modus og vis en velkomstmelding.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); forsinkelse (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print ("DAC med MCP4725"); forsinkelse (2000); lcd.clear ();
I tomrommet ()
1. Først i buffer setter du kontrollbyteverdien (0b01000000).
(010-Setter MCP4725 i skrivemodus) buffer = 0b01000000;
2. Følgende uttalelse leser den analoge verdien fra pin PA0 og konverterer den til digital verdi som strekker seg fra 0 til 4096 da ADC er 12-biters oppløsning og lagres i den variable adc .
adc = analogRead (PA0);
3. Denne påstanden nedenfor er en formel som brukes til å beregne spenningen fra ADC-inngangsverdien (0 til 4096) med referansespenningen på 3,3V.
flyte ipvolt = (3.3 / 4096.0) * adc;
4. Sett de mest betydningsfulle bitverdiene i buffer ved å skifte 4 bits til høyre i ADC-variabelen, og minst viktige bitverdier i bufferen ved å skifte 4 bits til venstre i ADC- variabelen.
buffer = adc >> 4; buffer = adc << 4;
5. Følgende uttalelse leser analog verdi fra ADC-pin PA1 til STM32 som er DAC-utgangen (MCP4725 DAC ICs OUTPUT-pin). Denne pinnen kan også kobles til multimeter for å kontrollere utgangsspenningen.
usignert int analogread = analogRead (PA1);
6. Videre beregnes spenningsverdien fra den variable analoglesen ved hjelp av formelen med følgende utsagn.
float opvolt = (3.3 / 4096.0) * analogread;
7. I den samme ugyldige sløyfen () er det få andre utsagn som blir forklart nedenfor
Begynn overføring med MCP4725:
Wire.beginTransmission (MCP4725);
Sender kontrollbyte til I2C
Wire.write (buffer);
Sender MSB til I2C
Wire.write (buffer);
Sender LSB til I2C
Wire.write (buffer);
Avslutter overføringen
Wire.endTransmission ();
Vis nå resultatene i 16x2 LCD-skjermen ved hjelp av lcd.print ()
lcd.setCursor (0,0); lcd.print ("A IP:"); lcd.print (adc); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvolt); lcd.setCursor (0,1); lcd.print ("D OP:"); lcd.print (analoglesing); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); forsinkelse (500); lcd.clear ();
Testing av DAC med STM32
Når vi varierer inngangs-ADC-verdien og spenningen ved å rotere potensiometeret, endres også utgangs-DAC-verdien og spenningen. Her vises inngangsverdiene på første rad og utgangsverdier i andre rad på LCD-skjerm. Et multimeter er også koblet til MCP4725 utgangsstift for å verifisere den analoge spenningen.
Komplett kode med demonstrasjonsvideo er gitt nedenfor.