- Komponenter krävs
- MCP4725 DAC-modul (digital till analog omvandlare)
- I2C-kommunikation i MCP4725
- Kretsschema och förklaring
- Programmering STM32F103C8 för digital till analog konvertering
- Testa DAC med STM32
Vi vet alla att mikrokontrollerna bara arbetar med digitala värden men i verkligheten måste vi hantera analoga signaler. Det är därför ADC (analoga till digitala omvandlare) finns för att konvertera verkliga analoga värden till digital form så att mikrokontroller kan bearbeta signalerna. Men vad händer om vi behöver analoga signaler från digitala värden, så här kommer DAC (Digital till Analog Converter).
Ett enkelt exempel för Digital till Analog-omvandlare är att spela in en sång i studion där en artistsångare använder mikrofon och sjunger en sång. Dessa analoga ljudvågor omvandlas till digital form och lagras sedan i en digital formatfil och när låten spelas med den lagrade digitala filen konverteras dessa digitala värden till analoga signaler för högtalarutgång. Så i detta system används DAC.
DAC kan användas i många applikationer som motorstyrning, LED-lampornas ljusstyrka, ljudförstärkare, videokodare, datainsamlingssystem etc.
Vi har redan kopplat MCP4725 DAC-modulen med Arduino. Idag kommer vi att använda samma MCP4725 DAC IC för att utforma en Digital till Analog-omvandlare med hjälp av STM32F103C8 Microcontroller.
Komponenter krävs
- STM32F103C8
- MCP4725 DAC IC
- 10k potentiometer
- 16x2 LCD-skärm
- Bakbord
- Anslutande ledningar
MCP4725 DAC-modul (digital till analog omvandlare)
MCP4725 IC är en 12-bitars digital till analog omvandlarmodul som används för att generera analoga utspänningar från (0 till 5V) och den styrs med hjälp av I2C-kommunikation. Den levereras också med EEPROM-minne om flyktigt minne.
Denna IC har 12-bitars upplösning. Det betyder att vi använder (0 till 4096) som ingång för att tillhandahålla spänningsutgången med avseende på referensspänning. Max referensspänning är 5V.
Formel för beräkning av utspänning
O / P-spänning = (referensspänning / upplösning) x digitalt värde
Till exempel om vi använder 5V som referensspänning och låt oss anta att det digitala värdet är 2048. Så för att beräkna DAC-utgången.
O / P-spänning = (5/4096) x 2048 = 2,5V
Pinout av MCP4725Nedan är bilden av MCP4725 med tydligt angivande stiftnamn.
Stift av MCP4725 |
Använda sig av |
UT |
Utgångar Analog spänning |
GND |
GND för utdata |
SCL |
I2C seriell klocklinje |
SDA |
I2C Seriell datalinje |
VCC |
Ingångsreferensspänning 5V eller 3,3V |
GND |
GND för inmatning |
I2C-kommunikation i MCP4725
Denna DAC IC kan anslutas till vilken mikrokontroller som helst som använder I2C-kommunikationen. I2C-kommunikation kräver endast två ledningar SCL och SDA. Som standard är I2C-adressen för MCP4725 0x60. Följ länken för att lära dig mer om I2C-kommunikation i STM32F103C8.
I2C-stift i STM32F103C8:
SDA: PB7 eller PB9, PB11.
SCL: PB6 eller PB8, PB10.
Kretsschema och förklaring
Anslutningar mellan STM32F103C8 och 16x2 LCD
LCD-stift nr |
LCD-stiftnamn |
STM32 Pin-namn |
1 |
Mark (GND) |
Mark (G) |
2 |
VCC |
5V |
3 |
VEE |
Stift från Center of Potentiometer för kontrast |
4 |
Registrera Välj (RS) |
PB11 |
5 |
Läs / skriv (RW) |
Mark (G) |
6 |
Aktivera (EN) |
PB10 |
7 |
Databit 0 (DB0) |
Ingen anslutning (NC) |
8 |
Databit 1 (DB1) |
Ingen anslutning (NC) |
9 |
Databit 2 (DB2) |
Ingen anslutning (NC) |
10 |
Databit 3 (DB3) |
Ingen anslutning (NC) |
11 |
Databit 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 |
Mark (G) |
Anslutning mellan MCP4725 DAC IC och STM32F103C8
MCP4725 |
STM32F103C8 |
Multimeter |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
UT |
PA1 |
Positiv sond |
GND |
GND |
Negativ sond |
VCC |
3,3V |
NC |
En potentiometer är också ansluten, med mittstift anslutet till PA1 analog ingång (ADC) på STM32F10C8, vänster stift ansluten till GND och högra högra stift ansluten till 3,3 V STM32F103C8.
I denna handledning kommer vi att ansluta en MCP4725 DAC IC med STM32 och använda en 10k potentiometer för att ge analog ingångsvärde till STM32 ADC-stift PA0. Och använd sedan ADC för att konvertera analogt värde till digital form. Skicka därefter dessa digitala värden till MCP4725 via I2C-buss. Konvertera sedan dessa digitala värden till analoga med DAC MCP4725 IC och använd sedan en annan ADC-stift PA1 på STM32 för att kontrollera den analoga utgången från MCP4725 från stiftet OUT. Slutligen visar båda ADC- och DAC-värdena med spänningar i 16x2 LCD-skärmen.
Programmering STM32F103C8 för digital till analog konvertering
En FTDI-programmerare behövs inte nu för att ladda upp kod till STM32F103C8. Anslut den bara till PC via USB-porten på STM32 och börja programmera med ARDUINO IDE. Besök den här länken för att lära dig mer om programmering av din STM32 i Arduino IDE. Komplett program för denna STM32 DAC-handledning ges i slutet.
Inkludera först biblioteket för I2C och LCD med wire.h, SoftWire.h och liquidcrystal.h- biblioteket. Läs mer om I2C i STM32 Microcontroller här.
#omfatta
Därefter definierar och initialiserar du LCD-stiften enligt de LCD-stift som är anslutna till STM32F103C8
konst int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Definiera sedan I2C-adressen för MCP4725 DAC IC. MCP4725 DAC-standard I2C-adressen är 0x60
#define MCP4725 0x60
I ogiltig installation ()
Börja först I2C-kommunikationen vid stiften PB7 (SDA) och PB6 (SCL) på STM32F103C8.
Wire.begin (); // Börjar I2C-kommunikationen
Ställ sedan in LCD-skärmen i 16x2-läge och visa ett välkomstmeddelande.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); fördröjning (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print ("DAC med MCP4725"); fördröjning (2000); lcd.clear ();
I tomrummet ()
1. Sätt först kontrollbytevärdet i bufferten (0b01000000).
(010-sätter MCP4725 i skrivläge) buffert = 0b01000000;
2. Följande uttalande läser det analoga värdet från stift PA0 och omvandlar det till digitalt värde som sträcker sig från 0 till 4096 eftersom ADC är 12-bitars upplösning och lagras i variabeln adc .
adc = analogRead (PA0);
3. Detta följande uttalande är en formel som används för att beräkna spänningen från ADC-ingångsvärdet (0 till 4096) med referensspänningen 3,3V.
float ipvolt = (3.3 / 4096.0) * adc;
4. Sätt de viktigaste bitvärdena i bufferten genom att flytta 4 bitar åt höger i ADC-variabeln, och minst signifikanta bitvärden i bufferten genom att flytta 4 bitar åt vänster i ADC- variabeln.
buffert = adc >> 4; buffert = adc << 4;
5. Följande uttalande läser det analoga värdet från ADC-stift PA1 i STM32 som är DAC-utgången (MCP4725 DAC IC: s OUTPUT-stift). Denna stift kan också anslutas till multimeter för att kontrollera utspänningen.
osignerad int analogread = analogRead (PA1);
6. Vidare beräknas spänningsvärdet från den variabla analoga läsningen med formeln med följande uttalande.
float opvolt = (3.3 / 4096.0) * analogläs;
7. I samma ogiltiga slinga () finns det få andra uttalanden som förklaras nedan
Börjar överföringen med MCP4725:
Wire.beginTransmission (MCP4725);
Skickar kontrollbyte till I2C
Wire.write (buffert);
Skickar MSB till I2C
Wire.write (buffert);
Skickar LSB till I2C
Wire.write (buffert);
Avslutar överföringen
Wire.endTransmission ();
Visa nu resultaten i LCD 16x2-skärmen med 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 (analogread); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); fördröjning (500); lcd.clear ();
Testa DAC med STM32
När vi varierar ingångs ADC-värdet och spänningen genom att rotera potentiometern ändras också utgångens DAC-värde och spänning. Här visas inmatningsvärdena i första raden och utmatningsvärdena i andra raden på LCD-displayen. En multimeter är också ansluten till MCP4725 utgångsstift för att verifiera den analoga spänningen.
Komplett kod med demonstrationsvideo ges nedan.