- Tarvittavat komponentit
- MCP4725 DAC-moduuli (digitaalinen-analoginen muunnin)
- I2C-tiedonsiirto MCP4725: ssä
- Piirikaavio ja selitys
- STM32F103C8: n ohjelmointi digitaalisesta analogiseen muuntamiseen
- DAC: n testaaminen STM32: lla
Me kaikki tiedämme, että mikro-ohjaimet toimivat vain digitaalisten arvojen kanssa, mutta todellisessa maailmassa meidän on käsiteltävä analogisia signaaleja. Siksi ADC (analogisista digitaalimuuntimiin) on olemassa muuntamaan reaalimaailman analogiset arvot digitaalimuodoksi, jotta mikro-ohjaimet voivat käsitellä signaaleja. Mutta entä jos tarvitsemme analogisia signaaleja digitaalisista arvoista, niin tässä tulee DAC (Digital to Analog Converter).
Yksinkertainen esimerkki Digital to Analog -muuntimeen on kappaleen nauhoittaminen studiossa, jossa taiteilijalaulaja käyttää mikrofonia ja laulaa kappaletta. Nämä analogiset ääniaallot muunnetaan digitaalisiksi ja tallennetaan sitten digitaalimuodossa olevaan tiedostoon, ja kun kappale toistetaan tallennettua digitaalitiedostoa käyttämällä, nämä digitaaliset arvot muunnetaan analogisignaaleiksi kaiutinlähtöä varten. Joten tässä järjestelmässä käytetään DAC: tä.
DAC: tä voidaan käyttää monissa sovelluksissa, kuten moottorin ohjauksessa, LED-valojen kirkkauden säätämisessä, äänivahvistimessa, videokoodereissa, tiedonkeruujärjestelmissä jne.
Olemme jo liittäneet MCP4725 DAC -moduulin Arduinoon. Tänään käytämme samaa MCP4725 DAC IC: tä suunnittelemaan digitaalinen-analoginen muunnin STM32F103C8-mikrokontrollerilla.
Tarvittavat komponentit
- STM32F103C8
- MCP4725 DAC-IC
- 10k potentiometri
- 16x2 LCD-näyttö
- Leipälauta
- Johtojen liittäminen
MCP4725 DAC-moduuli (digitaalinen-analoginen muunnin)
MCP4725 IC on 12-bittinen digitaalinen - analoginen muunninmoduuli, jota käytetään tuottamaan analogisia lähtöjännitteitä (0 - 5 V) ja jota ohjataan I2C-tiedonsiirron avulla. Sen mukana tulee myös aluksella oleva haihtumaton muisti EEPROM.
Tällä IC: llä on 12-bittinen tarkkuus. Tämä tarkoittaa, että käytämme (0 - 4096) tulona jännitelähdön tuottamiseksi suhteessa vertailujännitteeseen. Suurin vertailujännite on 5 V.
Kaava lähtöjännitteen laskemiseksi
O / P-jännite = (vertailujännite / -resoluutio) x digitaalinen arvo
Esimerkiksi, jos käytämme 5 V vertailujännitteenä ja oletetaan, että digitaalinen arvo on 2048. Joten lasketaan DAC-lähtö.
O / P-jännite = (5/4096) x 2048 = 2,5 V.
MCP4725: n pinoutAlla on kuva MCP4725: stä, jossa on selkeästi ilmaistut pin-nimet.
MCP4725: n nastat |
Käyttää |
OUT |
Lähtö analoginen jännite |
GND |
GND tuotokselle |
SCL |
I2C-sarjakellolinja |
SDA |
I2C Serial Data -rivi |
VCC |
Tulon vertailujännite 5 V tai 3,3 V |
GND |
GND tuloa varten |
I2C-tiedonsiirto MCP4725: ssä
Tämä DAC-IC voidaan liittää mihin tahansa I2C-tietoliikennettä käyttävään mikro-ohjaimeen. I2C-tiedonsiirto vaatii vain kaksi johtoa SCL ja SDA. Oletuksena MCP4725: n I2C-osoite on 0x60. Seuraa linkkiä saadaksesi lisätietoja I2C-viestinnästä STM32F103C8: ssa.
I2C-nastat mallissa STM32F103C8:
SDA: PB7 tai PB9, PB11.
SCL: PB6 tai PB8, PB10.
Piirikaavio ja selitys
Liitännät STM32F103C8: n ja 16x2 LCD: n välillä
LCD-nasta nro |
LCD-nastan nimi |
STM32-nastan nimi |
1 |
Maa (Gnd) |
Maa (G) |
2 |
VCC |
5 V |
3 |
VEE |
Tappi potentiometrin keskiosasta kontrastia varten |
4 |
Rekisteröinti Valitse (RS) |
PB11 |
5 |
Lue / kirjoita (RW) |
Maa (G) |
6 |
Ota käyttöön (EN) |
PB10 |
7 |
Databitti 0 (DB0) |
Ei yhteyttä (NC) |
8 |
Databitti 1 (DB1) |
Ei yhteyttä (NC) |
9 |
Databitti 2 (DB2) |
Ei yhteyttä (NC) |
10 |
Databitti 3 (DB3) |
Ei yhteyttä (NC) |
11 |
Databitti 4 (DB4) |
PB0 |
12 |
Databitti 5 (DB5) |
PB1 |
13 |
Databitti 6 (DB6) |
PC13 |
14 |
Databitti 7 (DB7) |
PC14 |
15 |
LED positiivinen |
5 V |
16 |
LED negatiivinen |
Maa (G) |
Yhteys MCP4725 DAC IC: n ja STM32F103C8: n välillä
MCP4725 |
STM32F103C8 |
Yleismittari |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
OUT |
PA1 |
Positiivinen koetin |
GND |
GND |
Negatiivinen koetin |
VCC |
3,3 V |
NC |
Potentiometri on myös kytketty siten, että keskitappi on kytketty STM32F10C8: n PA1-analogiatuloon (ADC), vasen nasta on kytketty GND: hen ja oikeanpuoleisin nasta on kytketty STM32F103C8: n 3,3 V: iin.
Tässä opetusohjelmassa yhdistämme MCP4725 DAC IC: n STM32: n kanssa ja annamme 10 k: n potentiometrillä analogisen tuloarvon STM32 ADC -nastalle PA0. Muunna sitten analoginen arvo digitaaliseksi ADC: llä. Sen jälkeen lähetä nämä digitaaliset arvot MCP4725: lle I2C-väylän kautta. Muunna sitten digitaaliset arvot analogisiksi DAC MCP4725 IC: llä ja tarkista sitten STM32: n toisen ADC-nastan PA1 avulla MCP4725: n analoginen lähtö nasta OUT: sta. Näytä lopuksi molemmat ADC- ja DAC-arvot jännitteillä 16x2 LCD-näytössä.
STM32F103C8: n ohjelmointi digitaalisesta analogiseen muuntamiseen
FTDI-ohjelmoijaa ei tarvita nyt koodin lähettämiseen STM32F103C8: een. Liitä se vain tietokoneeseen STM32: n USB-portin kautta ja aloita ohjelmointi ARDUINO IDE: llä. Tästä linkistä saat lisätietoja STM32: n ohjelmoinnista Arduino IDE: ssä. Tämän STM32 DAC -opetusohjelman täydellinen ohjelma on annettu lopussa.
Sisällytä ensin kirjasto I2C: lle ja LCD: lle käyttämällä wire.h-, SoftWire.h- ja liquidcrystal.h- kirjastoa. Lisätietoja I2C: stä STM32-mikrokontrollerissa on täällä.
#sisältää
Määritä ja alusta seuraavaksi LCD-nastat STM32F103C8: een liitettyjen LCD-nastojen mukaan
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Määritä sitten MCP4725 DAC IC: n I2C-osoite. MCP4725 DAC: n oletusarvoinen I2C-osoite on 0x60
#define MCP4725 0x60
Tyhjässä asennuksessa ()
Aloita I2C-tiedonsiirto ensin STM32F103C8: n nastoista PB7 (SDA) ja PB6 (SCL).
Wire.begin (); // Aloittaa I2C-viestinnän
Aseta seuraavaksi LCD-näyttö 16x2-tilaan ja näytä tervetuloviesti.
lcd-alku (16,2); lcd.print ("CIRCUIT DIGEST"); viive (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print ("DAC ja MCP4725"); viive (2000); lcd.clear ();
Tyhjässä silmukassa ()
1. Laita ensin puskuriin ohjaustavun arvo (0b01000000).
(010-asettaa MCP4725 kirjoitustilassa) puskuri = 0b01000000;
2. Seuraava lause lukee analogisen arvon nastasta PA0 ja muuntaa sen digitaaliseksi arvoksi, joka vaihtelee välillä 0 - 4096, koska ADC on 12-bittinen resoluutio ja tallentaa muuttujaan adc .
adc = analoginen luku (PA0);
3. Tämä seuraava lause on kaava, jota käytetään laskemaan jännite ADC-tuloarvosta (0 - 4096) vertailujännitteellä 3,3 V.
float ipvolt = (3.3 / 4096.0) * adc;
4. Aseta merkittävimmät bittiarvot puskuriin siirtämällä 4 bittiä oikealle ADC-muuttujassa ja vähiten merkitsevät bittiarvot puskuriin siirtämällä 4 bittiä vasemmalle adc- muuttujassa.
puskuri = adc >> 4; puskuri = adc << 4;
5. Seuraava lause lukee analogisen arvon STM32: n ADC-nastasta PA1, joka on DAC-lähtö (MCP4725 DAC IC: n OUTPUT-tappi). Tämä tappi voidaan myös liittää yleismittariin lähtöjännitteen tarkistamiseksi.
allekirjoittamaton int analogread = analogRead (PA1);
6. Lisäksi jännitteen arvo muuttuvasta analogisesta lukemasta lasketaan seuraavan kaavan avulla.
kelluva opvoltti = (3,3 / 4096,0) * analoginen lukema;
7. Samassa void-silmukassa () on muutama muu lause, joka selitetään alla
Aloittaa lähetyksen MCP4725: llä:
Wire.beginTransmission (MCP4725);
Lähettää ohjaustavun I2C: lle
Wire.write (puskuri);
Lähettää MSB: n I2C: lle
Wire.write (puskuri);
Lähettää LSB: n I2C: lle
Wire.write (puskuri);
Lopettaa lähetyksen
Wire.endTransmission ();
Näytä nyt tulokset LCD 16x2 -näytössä käyttämällä 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 (analoginen); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvoltti); viive (500); lcd.clear ();
DAC: n testaaminen STM32: lla
Kun vaihdamme ADC-tulon arvoa ja jännitettä kiertämällä potentiometriä, myös ulostulon DAC-arvo ja jännite muuttuvat. Tässä tuloarvot näytetään LCD-näytön ensimmäisellä rivillä ja lähtöarvot toisella rivillä. MCP4725-lähtöliittimeen on myös kytketty yleismittari analogisen jännitteen tarkistamiseksi.
Täydellinen koodi esittelyvideolla on alla.