- Nepieciešamās sastāvdaļas
- MCP4725 DAC modulis (digitālais uz analogo pārveidotāju)
- I2C komunikācija MCP4725
- Shēmas shēma un paskaidrojums
- STM32F103C8 programmēšana digitālajai analogai pārveidošanai
- DAC testēšana ar STM32
Mēs visi zinām, ka mikrokontrolleri darbojas tikai ar digitālajām vērtībām, bet reālajā pasaulē mums ir jārisina analogie signāli. Tāpēc ADC (Analog to Digital Converter) ir paredzēts, lai reālās pasaules analogās vērtības pārveidotu digitālā formā, lai mikrokontrolleri varētu apstrādāt signālus. Bet ko tad, ja mums ir nepieciešami analogie signāli no digitālajām vērtībām, tāpēc šeit parādās DAC (Digital to Analog Converter).
Vienkāršs pārveidotāja Digital to Analog pārveidotāja piemērs ir dziesmas ierakstīšana studijā, kur mākslinieks dziedātājs izmanto mikrofonu un dzied dziesmu. Šie analogie skaņas viļņi tiek pārveidoti digitālā formā un pēc tam saglabāti digitālā formāta failā, un, kad dziesma tiek atskaņota, izmantojot saglabāto digitālo failu, šīs digitālās vērtības tiek pārveidotas par analogiem signāliem skaļruņu izejai. Tātad šajā sistēmā tiek izmantots DAC.
DAC var izmantot daudzās lietojumprogrammās, piemēram, motora vadībā, LED apgaismojuma vadības spilgtumā, audio pastiprinātājā, video kodētājos, datu iegūšanas sistēmās utt.
Mēs jau esam sasaistījuši MCP4725 DAC moduli ar Arduino. Šodien mēs izmantosim to pašu MCP4725 DAC IC, lai izstrādātu pārveidotāju no digitālā uz analogo, izmantojot mikrokontrolleru STM32F103C8.
Nepieciešamās sastāvdaļas
- STM32F103C8
- MCP4725 DAC IC
- 10k potenciometrs
- 16x2 LCD displejs
- Maizes dēlis
- Vadu savienošana
MCP4725 DAC modulis (digitālais uz analogo pārveidotāju)
MCP4725 IC ir 12 bitu digitālā analogā pārveidotāja modulis, ko izmanto, lai ģenerētu izejas analogo spriegumu no (0 līdz 5 V), un to kontrolē, izmantojot I2C sakarus. Tas arī nāk ar iebūvētu nepastāvīgo atmiņu EEPROM.
Šim IC ir 12 bitu izšķirtspēja. Tas nozīmē, ka mēs izmantojam (0 līdz 4096) kā ievadi, lai nodrošinātu izejas spriegumu attiecībā pret atsauces spriegumu. Maksimālais standartspriegums ir 5V.
Formula izejas sprieguma aprēķināšanai
O / P spriegums = (atsauces spriegums / izšķirtspēja) x digitālā vērtība
Piemēram, ja mēs izmantojam 5V kā atskaites spriegumu un pieņemsim, ka digitālā vērtība ir 2048. Tātad, lai aprēķinātu DAC izeju.
O / P spriegums = (5/4096) x 2048 = 2,5 V
MCP4725 pinoutZemāk ir MCP4725 attēls ar skaidri norādītiem tapu nosaukumiem.
MCP4725 tapas |
Izmantot |
OUT |
Izejas analogais spriegums |
GND |
GND izejai |
SCL |
I2C sērijveida pulksteņa līnija |
SDA |
I2C sērijas datu līnija |
VCC |
Ieejas atsauces spriegums 5 V vai 3,3 V |
GND |
GND ievadei |
I2C komunikācija MCP4725
Šo DAC IC var sasaistīt ar jebkuru mikrokontrolleru, izmantojot I2C komunikāciju. I2C komunikācijai nepieciešami tikai divi vadi SCL un SDA. Pēc noklusējuma MCP4725 I2C adrese ir 0x60. Izpildiet saiti, lai uzzinātu vairāk par I2C komunikāciju STM32F103C8.
I2C tapas STM32F103C8:
SDA: PB7 vai PB9, PB11.
SCL: PB6 vai PB8, PB10.
Shēmas shēma un paskaidrojums
Savienojumi starp STM32F103C8 un 16x2 LCD
LCD tapa Nr |
LCD tapas nosaukums |
STM32 tapas nosaukums |
1 |
Zeme (Gnd) |
Zeme (G) |
2 |
VCC |
5V |
3 |
VEE |
Piespraude no potenciometra centra kontrastam |
4 |
Reģistrēties Atlasīt (RS) |
PB11 |
5 |
Lasīt / rakstīt (RW) |
Zeme (G) |
6 |
Iespējot (EN) |
PB10 |
7 |
Datu bits 0 (DB0) |
Nav savienojuma (NC) |
8 |
1. datu bits (DB1) |
Nav savienojuma (NC) |
9 |
2. datu bits (DB2) |
Nav savienojuma (NC) |
10 |
3. datu bits (DB3) |
Nav savienojuma (NC) |
11 |
4. datu bits (DB4) |
PB0 |
12 |
5. datu bits (DB5) |
PB1 |
13 |
6. datu bits (DB6) |
PC13 |
14 |
7. datu bits (DB7) |
PC14 |
15 |
LED pozitīvs |
5V |
16 |
LED negatīvs |
Zeme (G) |
Savienojums starp MCP4725 DAC IC un STM32F103C8
MCP4725 |
STM32F103C8 |
Multimetrs |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
OUT |
PA1 |
Pozitīvā zonde |
GND |
GND |
Negatīvā zonde |
VCC |
3.3V |
NC |
Ir pievienots arī potenciometrs ar centrālo tapu, kas savienota ar STM32F10C8 PA1 analogo ieeju (ADC), kreiso kontaktu, kas savienota ar GND, un labo, lielāko tapu, kas savienota ar STM32F103C8 3,3 V.
Šajā apmācībā mēs savienosim MCP4725 DAC IC ar STM32 un izmantosim 10k potenciometru, lai nodrošinātu analogās ieejas vērtību STM32 ADC tapai PA0. Pēc tam izmantojiet ADC, lai pārveidotu analogo vērtību digitālā formā. Pēc tam nosūtiet šīs digitālās vērtības uz MCP4725 caur I2C kopni. Pēc tam pārveidojiet šīs digitālās vērtības analogām, izmantojot DAC MCP4725 IC, un pēc tam izmantojiet citu STM32 ADC tapu PA1, lai pārbaudītu MCP4725 analogo izeju no tapas OUT. Visbeidzot, parādiet abas ADC un DAC vērtības ar spriegumiem 16x2 LCD displejā.
STM32F103C8 programmēšana digitālajai analogai pārveidošanai
FTDI programmētājs tagad nav nepieciešams, lai augšupielādētu kodu STM32F103C8. Vienkārši pievienojiet to datoram, izmantojot STM32 USB portu, un sāciet programmēt ar ARDUINO IDE. Apmeklējiet šo saiti, lai uzzinātu vairāk par STM32 programmēšanu Arduino IDE. Pilnīga šīs STM32 DAC apmācības programma ir dota beigās.
Vispirms iekļaujiet I2C un LCD bibliotēku, izmantojot wire.h, SoftWire.h un liquidcrystal.h bibliotēku. Uzziniet vairāk par I2C STM32 mikrokontrollerī šeit.
# iekļaut
Pēc tam definējiet un inicializējiet LCD tapas atbilstoši LCD tapām, kas savienotas ar STM32F103C8
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Pēc tam definējiet MCP4725 DAC IC I2C adresi. MCP4725 DAC noklusējuma I2C adrese ir 0x60
#define MCP4725 0x60
Tukšajā iestatījumā ()
Vispirms sāciet I2C komunikāciju pie STM32F103C8 tapām PB7 (SDA) un PB6 (SCL).
Wire.begin (); // Sākas I2C komunikācija
Pēc tam iestatiet LCD displeju 16x2 režīmā un parādiet sveiciena ziņojumu.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); kavēšanās (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print ("DAC ar MCP4725"); kavēšanās (2000); lcd.clear ();
Tukšuma cilpā ()
1. Vispirms buferī ievietojiet kontroles baita vērtību (0b01000000).
(010-iestata MCP4725 rakstīšanas režīmā) buferis = 0b01000000;
2. Šis paziņojums nolasa analogo vērtību no tapas PA0 un pārvērš to ciparu vērtībā no 0 līdz 4096, jo ADC ir 12 bitu izšķirtspēja un tiek saglabāta mainīgajā adc .
adc = analogRead (PA0);
3. Šis paziņojums ir formula, ko izmanto, lai aprēķinātu spriegumu no ADC ieejas vērtības (no 0 līdz 4096) ar atskaites spriegumu 3,3 V.
pludiņš ipvolt = (3,3 / 4096,0) * adc;
4. Ievietojiet buferī vissvarīgākās bitu vērtības, ADC mainīgajā mainot 4 bitus pa labi, bet vismazāk buferī - vismazāk nozīmīgās bitu vērtības, mainot ADC mainīgajā 4 bitus pa kreisi.
buferis = adc >> 4; buferis = adc << 4;
5. Šis paziņojums nolasa analogo vērtību no STM32 ADC tapas PA1, kas ir DAC izeja (MCP4725 DAC IC OUTPUT pin). Šo tapu var arī savienot ar multimetru, lai pārbaudītu izejas spriegumu.
neparakstīts int analoglasījums = analogRead (PA1);
6. Turpmāk sprieguma vērtību no mainīgā analogrindas aprēķina, izmantojot formulu ar šo paziņojumu.
float opvolt = (3.3 / 4096.0) * analogais lasījums;
7. Tajā pašā void loop () ir daži citi paziņojumi, kas ir paskaidroti turpmāk
Pārraidi sāk ar MCP4725:
Wire.beginTransmission (MCP4725);
Nosūta vadības baitu uz I2C
Wire.write (buferis);
Nosūta MSB uz I2C
Wire.write (buferis);
Nosūta LSB uz I2C
Wire.write (buferis);
Beidz pārraidi
Wire.endTransmission ();
Tagad parādiet šos rezultātus LCD 16x2 displejā, izmantojot 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 (analogais); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); kavēšanās (500); lcd.clear ();
DAC testēšana ar STM32
Kad mēs mainām ieejas ADC vērtību un spriegumu, pagriežot potenciometru, mainās arī izejas DAC vērtība un spriegums. Šeit ieejas vērtības tiek parādītas LCD displeja pirmajā rindā un izejas vērtības otrajā rindā. Lai pārbaudītu analogo spriegumu, MCP4725 izejas tapai ir pievienots arī multimetrs.
Pilns kods ar demonstrācijas video ir norādīts zemāk.