- Komponenter, der kræves
- MCP4725 DAC-modul (digital til analog konverter)
- I2C-kommunikation i MCP4725
- Kredsløbsdiagram og forklaring
- Programmering STM32F103C8 til digital til analog konvertering
- Test af DAC med STM32
Vi ved alle, at mikrokontrollerne kun arbejder med digitale værdier, men i den virkelige verden skal vi håndtere analoge signaler. Derfor er ADC (analoge til digitale konverterere) der for at konvertere analoge værdier i den virkelige verden til digital form, så mikrocontrollere kan behandle signalerne. Men hvad hvis vi har brug for analoge signaler fra digitale værdier, så her kommer DAC (Digital til Analog Converter).
Et simpelt eksempel på Digital til Analog konverter er at optage en sang i studiet, hvor en kunstnersanger bruger mikrofon og synger en sang. Disse analoge lydbølger konverteres til digital form og gemmes derefter i en fil i digitalt format, og når sangen afspilles ved hjælp af den gemte digitale fil, konverteres disse digitale værdier til analoge signaler til højttaleroutput. Så i dette system bruges DAC.
DAC kan bruges i mange applikationer såsom motorkontrol, lysstyrke på LED-lys, lydforstærker, videokodere, dataopsamlingssystemer osv.
Vi har allerede interfacet MCP4725 DAC-modulet med Arduino. I dag bruger vi den samme MCP4725 DAC IC til at designe en Digital til Analog konverter ved hjælp af STM32F103C8 Microcontroller.
Komponenter, der kræves
- STM32F103C8
- MCP4725 DAC IC
- 10k Potentiometer
- 16x2 LCD-skærm
- Brødbræt
- Tilslutning af ledninger
MCP4725 DAC-modul (digital til analog konverter)
MCP4725 IC er et 12-bit digitalt til analogt konvertermodul, der bruges til at generere analoge udgangsspændinger fra (0 til 5V), og det styres ved hjælp af I2C-kommunikation. Den leveres også med EEPROM om ikke-flygtig hukommelse.
Denne IC har 12-bit opløsning. Dette betyder, at vi bruger (0 til 4096) som input til at levere spændingsoutputtet i forhold til referencespænding. Maks. Referencespænding er 5V.
Formel til beregning af udgangsspænding
O / P spænding = (reference spænding / opløsning) x digital værdi
For eksempel hvis vi bruger 5V som referencespænding, og lad os antage, at den digitale værdi er 2048. Så for at beregne DAC-output.
O / P spænding = (5/4096) x 2048 = 2,5V
Pinout af MCP4725Nedenfor er billedet af MCP4725 med tydeligt angivende pinnavne.
Stifter af MCP4725 |
Brug |
UD |
Udgange analog spænding |
GND |
GND for output |
SCL |
I2C seriel ur linje |
SDA |
I2C seriel datalinje |
VCC |
Indgangsspænding 5V eller 3,3V |
GND |
GND til input |
I2C-kommunikation i MCP4725
Denne DAC IC kan være grænseflade med enhver mikrocontroller, der bruger I2C-kommunikationen. I2C-kommunikation kræver kun to ledninger SCL og SDA. Som standard er I2C-adressen til MCP4725 0x60. Følg linket for at vide mere om I2C-kommunikation i STM32F103C8.
I2C-ben i STM32F103C8:
SDA: PB7 eller PB9, PB11.
SCL: PB6 eller PB8, PB10.
Kredsløbsdiagram og forklaring
Forbindelser mellem STM32F103C8 og 16x2 LCD
LCD-stift nr |
LCD-pin-navn |
STM32 Pin-navn |
1 |
Jord (GND) |
Jord (G) |
2 |
VCC |
5V |
3 |
VEE |
Pin fra Center of Potentiometer for kontrast |
4 |
Registrer Vælg (RS) |
PB11 |
5 |
Læs / skriv (RW) |
Jord (G) |
6 |
Aktivér (EN) |
PB10 |
7 |
Databit 0 (DB0) |
Ingen forbindelse (NC) |
8 |
Databit 1 (DB1) |
Ingen forbindelse (NC) |
9 |
Databit 2 (DB2) |
Ingen forbindelse (NC) |
10 |
Databit 3 (DB3) |
Ingen forbindelse (NC) |
11 |
Data Bit 4 (DB4) |
PB0 |
12 |
Databit 5 (DB5) |
PB1 |
13 |
Databit 6 (DB6) |
PC13 |
14 |
Databit 7 (DB7) |
PC14 |
15 |
LED Positiv |
5V |
16 |
LED negativ |
Jord (G) |
Forbindelse mellem MCP4725 DAC IC og STM32F103C8
MCP4725 |
STM32F103C8 |
Multimeter |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
UD |
PA1 |
Positiv sonde |
GND |
GND |
Negativ sonde |
VCC |
3.3V |
NC |
Der er også tilsluttet et potentiometer, hvor midterstiften er tilsluttet PA1 analog indgang (ADC) på STM32F10C8, venstre pin tilsluttet til GND og højre højre pin tilsluttet til 3,3 V STM32F103C8.
I denne vejledning forbinder vi en MCP4725 DAC IC med STM32 og bruger et 10k potentiometer til at give analog indgangsværdi til STM32 ADC pin PA0. Og brug derefter ADC til at konvertere analog værdi til digital form. Derefter sendes disse digitale værdier til MCP4725 via I2C-bus. Konverter derefter disse digitale værdier til analog ved hjælp af DAC MCP4725 IC, og brug derefter en anden ADC-pin PA1 på STM32 til at kontrollere den analoge udgang fra MCP4725 fra pin OUT. Vis endelig begge ADC- og DAC-værdier med spændinger i 16x2 LCD-displayet.
Programmering STM32F103C8 til digital til analog konvertering
En FTDI-programmør er ikke nødvendig nu for at uploade kode til STM32F103C8. Tilslut den blot til pc via USB-port på STM32, og start programmeringen med ARDUINO IDE. Besøg dette link for at lære mere om programmering af din STM32 i Arduino IDE. Komplet program til denne STM32 DAC-tutorial gives i slutningen.
Inkluder først bibliotek til I2C og LCD ved hjælp af wire.h, SoftWire.h og liquidcrystal.h- biblioteket. Lær mere om I2C i STM32 Microcontroller her.
#omfatte
Derefter defineres og initialiseres LCD-stifter i henhold til LCD-stifter, der er forbundet med STM32F103C8
konst int rs = PB11, da = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Definer derefter I2C-adressen på MCP4725 DAC IC. MCP4725 DAC-standard I2C-adressen er 0x60
#definer MCP4725 0x60
I tomrumsopsætningen ()
Start først I2C-kommunikationen ved stifterne PB7 (SDA) og PB6 (SCL) i STM32F103C8.
Wire.begin (); // Begynder I2C-kommunikationen
Indstil derefter LCD-displayet i 16x2-tilstand, og vis en velkomstmeddelelse.
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 hulrummet ()
1. Først i buffer sætte kontrolbyteværdien (0b01000000).
(010-sæt MCP4725 i skrivetilstand) buffer = 0b01000000;
2. Efterfølgende erklæring læser den analoge værdi fra pin PA0 og konverterer den til digital værdi i området fra 0 til 4096, da ADC er 12-bit opløsning og gemmes i den variable adc .
adc = analogRead (PA0);
3. Denne følgende erklæring er en formel, der bruges til at beregne spændingen fra ADC-indgangsværdien (0 til 4096) med referencespændingen på 3,3V.
flyde ipvolt = (3.3 / 4096.0) * adc;
4. Sæt de mest betydningsfulde bitværdier i buffer ved at skifte 4 bit til højre i ADC-variablen, og mindst signifikante bitværdier i buffer ved at skifte 4 bit til venstre i ADC- variablen.
buffer = adc >> 4; buffer = adc << 4;
5. Følgende udsagn læser den analoge værdi fra ADC-pin PA1 i STM32, der er DAC-udgangen (MCP4725 DAC ICs OUTPUT-pin). Denne pin kan også tilsluttes multimeter for at kontrollere udgangsspændingen.
usigneret int analogread = analogRead (PA1);
6. Desuden beregnes spændingsværdien fra den variable analoge læs ved hjælp af formlen med følgende udsagn.
float opvolt = (3.3 / 4096.0) * analoglæs;
7. I den samme ugyldige loop () er der få andre udsagn, der forklares nedenfor
Begynder transmission med MCP4725:
Wire.beginTransmission (MCP4725);
Sender kontrolbyte til I2C
Wire.write (buffer);
Sender MSB til I2C
Wire.write (buffer);
Sender LSB til I2C
Wire.write (buffer);
Afslutter transmissionen
Wire.endTransmission ();
Vis disse resultater nu på LCD 16x2-skærmen ved hjælp af 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 (analoglæs); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); forsinkelse (500); lcd.clear ();
Test af DAC med STM32
Når vi varierer indgangs ADC-værdien og spændingen ved at dreje potentiometeret, ændres output DAC-værdien og spændingen også. Her vises inputværdierne i første række og outputværdier i anden række på LCD-displayet. Et multimeter er også tilsluttet MCP4725-udgangsstiften for at kontrollere den analoge spænding.
Komplet kode med demonstrationsvideo er angivet nedenfor.