- Kinakailangan ang Mga Bahagi
- MCP4725 DAC Module (Digital sa Analog Converter)
- I2C Komunikasyon sa MCP4725
- Circuit Diagram at Paliwanag
- Programming STM32F103C8 para sa Digital to Analog Conversion
- Pagsubok sa DAC sa STM32
Alam nating lahat na ang mga Microcontroller ay gumagana lamang sa mga digital na halaga ngunit sa totoong mundo kailangan nating harapin ang mga analog signal. Iyon ang dahilan kung bakit ang ADC (Analog sa Digital Converter) ay naroroon upang i-convert ang totoong mga halaga ng Analog sa Digital form upang ang mga microcontroller ay maaaring maproseso ang mga signal. Ngunit paano kung kailangan natin ng mga signal ng Analog mula sa mga digital na halaga, kaya narito ang DAC (Digital to Analog Converter).
Isang simpleng halimbawa para sa Digital to Analog converter ay ang pagrekord ng isang kanta sa studio kung saan ang isang mang-aawit ng artista ay gumagamit ng mikropono at kumakanta ng isang kanta. Ang mga analog na alon ng tunog na ito ay na-convert sa digital form at pagkatapos ay nakaimbak sa isang digital format file at kapag ang kanta ay pinatugtog gamit ang nakaimbak na digital file na mga digital na halaga ay na-convert sa mga analog signal para sa output ng speaker. Kaya sa sistemang ito ginagamit ang DAC.
Ang DAC ay maaaring magamit sa maraming mga application tulad ng Motor control, Control Brightness ng LED Lights, Audio Amplifier, Video Encoder, Mga Data acquisition System atbp.
Na-interfaced na namin ang MCP4725 DAC Module kay Arduino. Ngayon gagamitin namin ang parehong MCP4725 DAC IC upang magdisenyo ng isang Digital to Analog converter gamit ang STM32F103C8 Microcontroller.
Kinakailangan ang Mga Bahagi
- STM32F103C8
- MCP4725 DAC IC
- 10k Potensyomiter
- 16x2 LCD display
- Breadboard
- Mga Koneksyon sa Mga Wires
MCP4725 DAC Module (Digital sa Analog Converter)
Ang MCP4725 IC ay isang 12-Bit Digital sa Analog Converter Module na ginagamit upang makabuo ng mga output analog voltages mula (0 hanggang 5V) at kinokontrol ito ng paggamit ng komunikasyon ng I2C. Ito rin ay kasama ng board na hindi masalitaw na memorya ng EEPROM.
Ang IC na ito ay may 12-Bit na resolusyon. Nangangahulugan ito na ginagamit namin ang (0 hanggang 4096) bilang input upang maibigay ang output ng boltahe patungkol sa boltahe ng sanggunian. Ang maximum na boltahe ng sanggunian ay 5V.
Formula upang makalkula ang Output Voltage
O / P Boltahe = (Sanggunian Boltahe / Resolusyon) x Halaga ng Digital
Halimbawa Halimbawa kung gagamitin namin ang 5V bilang sanggunian boltahe at ipagpalagay natin na ang digital na halaga ay 2048. Kaya upang makalkula ang output ng DAC.
O / P Boltahe = (5/4096) x 2048 = 2.5V
Pinout ng MCP4725Nasa ibaba ang imahe ng MCP4725 na may malinaw na nagpapahiwatig ng mga pangalan ng pin.
Mga Pin ng MCP4725 |
Gamitin |
PALABAS |
Mga output ng Analog Boltahe |
GND |
GND para sa Output |
SCL |
Linya ng I2C Serial Clock |
SDA |
Linya ng Serial Data ng I2C |
VCC |
Input Reference Voltage 5V o 3.3V |
GND |
GND para sa pag-input |
I2C Komunikasyon sa MCP4725
Ang DAC IC na ito ay maaaring ma-interfaced sa anumang microcontroller gamit ang I2C na komunikasyon. Ang komunikasyon ng I2C ay nangangailangan lamang ng dalawang wires na SCL at SDA. Bilang default, ang I2C address para sa MCP4725 ay 0x60. Sundin ang link upang malaman ang higit pa tungkol sa komunikasyon ng I2C sa STM32F103C8.
I2C pin sa STM32F103C8:
SDA: PB7 o PB9, PB11.
SCL: PB6 o PB8, PB10.
Circuit Diagram at Paliwanag
Mga koneksyon sa pagitan ng STM32F103C8 & 16x2 LCD
LCD Pin Hindi |
Pangalan ng LCD Pin |
Pangalan ng STM32 Pin |
1 |
Lupa (Gnd) |
Lupa (G) |
2 |
VCC |
5V |
3 |
VEE |
I-pin mula sa Center of Potentiometer para sa kaibahan |
4 |
Pagpili ng Rehistro (RS) |
PB11 |
5 |
Basahin / Isulat (RW) |
Lupa (G) |
6 |
Paganahin (EN) |
PB10 |
7 |
Data Bit 0 (DB0) |
Walang Koneksyon (NC) |
8 |
Data Bit 1 (DB1) |
Walang Koneksyon (NC) |
9 |
Data Bit 2 (DB2) |
Walang Koneksyon (NC) |
10 |
Data Bit 3 (DB3) |
Walang Koneksyon (NC) |
11 |
Data Bit 4 (DB4) |
PB0 |
12 |
Data Bit 5 (DB5) |
PB1 |
13 |
Data Bit 6 (DB6) |
PC13 |
14 |
Data Bit 7 (DB7) |
PC14 |
15 |
Positive na LED |
5V |
16 |
Negatibo sa LED |
Lupa (G) |
Ang koneksyon sa pagitan ng MCP4725 DAC IC at STM32F103C8
MCP4725 |
STM32F103C8 |
Multimeter |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
PALABAS |
PA1 |
Positibong Probe |
GND |
GND |
Negatibong Probe |
VCC |
3.3V |
NC |
Nakakonekta din ang isang potensyomiter, na may koneksyon sa pin na koneksyon sa PA1 analog input (ADC) ng STM32F10C8, Kaliwang Pin na konektado sa GND at kanang kanang pin na konektado sa 3.3V ng STM32F103C8.
Sa tutorial na ito ikonekta namin ang isang MCP4725 DAC IC na may STM32 at gagamit ng isang 10k potentiometer upang magbigay ng halaga ng analog na pag-input sa STM32 ADC pin PA0. At pagkatapos ay gamitin ang ADC upang mai-convert ang halagang analog sa digital form. Pagkatapos nito ay ipadala ang mga digital na halagang iyon sa MCP4725 sa pamamagitan ng I2C bus. Pagkatapos ay i-convert ang mga digital na halagang iyon sa analog gamit ang DAC MCP4725 IC at pagkatapos ay gumamit ng isa pang ADC pin PA1 ng STM32 upang suriin ang analog na output ng MCP4725 mula sa pin OUT. Panghuli ipakita ang parehong mga halaga ng ADC & DAC na may mga voltages sa 16x2 LCD display.
Programming STM32F103C8 para sa Digital to Analog Conversion
Ang isang FTDI programmer ay hindi kinakailangan ngayon upang mag-upload ng code sa STM32F103C8. Ikonekta lamang ito sa PC sa pamamagitan ng USB port ng STM32 at simulan ang programa sa ARDUINO IDE. Bisitahin ang link na ito upang malaman ang higit pa tungkol sa Programming iyong STM32 sa Arduino IDE. Kumpletuhin ang programa para sa STM32 DAC tutorial na ito ay ibinigay sa dulo.
Isama muna ang silid - aklatan para sa I2C at LCD gamit ang wire.h, SoftWire.h at library ng liquidcrystal.h. Dagdagan ang nalalaman tungkol sa I2C sa STM32 Microcontroller dito.
# isama
Susunod na tukuyin at gawing simula ang mga LCD pin ayon sa mga LCD pin na konektado sa STM32F103C8
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Pagkatapos tukuyin ang I2C address ng MCP4725 DAC IC. Ang MCP4725 DAC default I2C address ay 0x60
# tukuyin ang MCP4725 0x60
Sa void setup ()
Simulan muna ang komunikasyon ng I2C sa mga pin PB7 (SDA) at PB6 (SCL) ng STM32F103C8.
Wire.begin (); // Nagsisimula ang komunikasyon sa I2C
Susunod na itakda ang LCD display sa 16x2 mode at ipakita ang isang maligayang mensahe.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); pagkaantala (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); lcd.setCursor (0,1); lcd.print ("DAC na may MCP4725"); pagkaantala (2000); lcd.clear ();
Sa void loop ()
1. Una sa buffer ilagay ang control byte na halaga (0b01000000).
(010-Sets MCP4725 sa mode na Sumulat) buffer = 0b01000000;
2. Ang sumusunod na pahayag ay binabasa ang halagang analog mula sa pin PA0 at ginawang ito sa digital na halaga mula 0 hanggang 4096 habang ang ADC ay 12-bit na resolusyon at nag-iimbak sa variable adc .
adc = analogRead (PA0);
3. Ang sumusunod na pahayag ay isang pormula na ginamit upang makalkula ang boltahe mula sa halaga ng pag-input ng ADC (0 hanggang 4096) na may boltahe ng sanggunian na 3.3V.
float ipvolt = (3.3 / 4096.0) * adc;
4. Ilagay ang Pinaka-makabuluhang halaga ng bit sa buffer sa pamamagitan ng paglilipat ng 4 na mga bits sa kanan sa variable ng ADC, at Pinakait na makabuluhang halaga ng bit sa buffer sa pamamagitan ng paglilipat ng 4 na bit sa kaliwa sa variable ng adc .
buffer = adc >> 4; buffer = adc << 4;
5. Ang sumusunod na pahayag ay binabasa ang halagang analog mula sa ADC pin PA1 ng STM32 na ang DAC output (MCP4725 DAC IC's OUTPUT pin). Ang pin na ito ay maaari ding maiugnay sa multimeter upang suriin ang boltahe ng output.
unsigned int analogread = analogRead (PA1);
6. Dagdag dito ang halaga ng boltahe mula sa variable analogread ay kinakalkula gamit ang formula na may sumusunod na pahayag.
float opvolt = (3.3 / 4096.0) * analogread;
7. Sa parehong void loop () mayroong ilang iba pang mga pahayag na ipinaliwanag sa ibaba
Nagsisimula sa paghahatid sa MCP4725:
Wire.beginTransmission (MCP4725);
Ipinapadala ang control byte sa I2C
Wire.write (buffer);
Ipinapadala ang MSB sa I2C
Wire.write (buffer);
Ipinapadala ang LSB sa I2C
Wire.write (buffer);
Nagtatapos sa paghahatid
Wire.endTransmission ();
Ipakita ngayon ang mga resulta sa display na LCD 16x2 gamit ang lcd.print ()
lcd.setCursor (0,0); lcd.print ("Isang 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); pagkaantala (500); lcd.clear ();
Pagsubok sa DAC sa STM32
Kapag binago namin ang halaga ng input ng ADC at boltahe sa pamamagitan ng pag-ikot ng potensyomiter, nagbabago rin ang halaga ng output DAC at boltahe. Narito ang mga halaga ng pag-input ay ipinapakita sa unang hilera at mga halaga ng output sa pangalawang hilera ng LCD display. Ang isang multimeter ay konektado din sa MCP4725 Output Pin upang i-verify ang boltahe ng analog.
Kumpletong code na may demonstrasyon Ang video ay ibinibigay sa ibaba.