- Komunikasyon ng Serial na RS-485
- Kinakailangan ang Mga Bahagi
- Diagram ng Circuit
- Programming STM32F103C8 at Arduino UNO para sa RS485 Serial Communication
- Pagsubok sa komunikasyon ng RS485 sa pagitan ng STM32F103C8 at Arduino UNO:
Ang mga protocol ng komunikasyon ay ang mahalagang bahagi ng isang digital electronics at naka-embed na system. Kung saan man mayroong pag-interfacing ng maraming microcontroller at peripherals, dapat gamitin ang protocol ng komunikasyon upang makipagpalitan ng bungkos ng data. Maraming uri ng magagamit na serial protocol ng komunikasyon. Ang RS485 ay isa sa mga serial protocol ng komunikasyon at ginagamit sa mga proyektong pang-industriya at mabibigat na makinarya.
Nalaman namin ang tungkol sa RS485 Serial Communication sa pagitan ng Arduino Uno at Arduino Nano sa nakaraang tutorial . Ang tutorial na ito ay tungkol sa paggamit ng isang RS-485 Serial na komunikasyon sa STM32F103C8 Microcontroller. Kung bago ka sa STM32 Microcontroller pagkatapos magsimula sa Pagsisimula sa STM32 gamit ang Arduino IDE: Blinking LED at suriin ang lahat ng mga proyekto sa STM32 dito.
Sa tutorial na ito Master STM32F103C8 ay may tatlong mga pindutan ng push na ginagamit upang makontrol ang katayuan ng tatlong mga LED na naroroon sa Slave Arduino Uno sa pamamagitan ng paggamit ng RS-485 Serial na komunikasyon.
Magsimula tayo sa pamamagitan ng pag-unawa sa pagtatrabaho ng RS-485 Serial na komunikasyon.
Komunikasyon ng Serial na RS-485
Ang RS-485 ay isang asynchronous na serial na komunikasyon na proteksyon na hindi nangangailangan ng orasan. Gumagamit ito ng diskarteng tinatawag na kaugalian signal upang ilipat ang binary data mula sa isang aparato patungo sa isa pa.
Kaya't ano ang Differential Signal Transfer Method na ito ??
Gumagawa ang pagkakaiba-iba na paraan ng signal sa pamamagitan ng paglikha ng isang boltahe ng kaugalian sa pamamagitan ng paggamit ng positibo at negatibong 5V. Nagbibigay ito ng isang komunikasyon na Half-Duplex kapag gumagamit ng dalawang wires at Full-Duplex na komunikasyon kapag gumagamit ng apat na wires.
Sa pamamagitan ng paggamit ng pamamaraang ito:
- Sinusuportahan ng RS-485 ang mas mataas na rate ng paglipat ng data na maximum na 30Mbps.
- Nagbibigay din ito ng maximum na distansya ng paglipat ng data kumpara sa RS-232 na protocol. Naglilipat ito ng data hanggang sa 1200-meter na maximum.
- Ang pangunahing bentahe ng RS-485 kaysa sa RS-232 ay ang maraming alipin na may solong Master habang ang RS-232 ay sumusuporta lamang sa solong alipin.
- Maaaring magkaroon ng maximum na 32 mga aparato na konektado sa RS-485 na protocol.
- Ang isa pang bentahe ng RS-485 ay immune sa ingay habang gumagamit sila ng kaugalian na pamamaraan ng signal upang ilipat.
- Ang RS-485 ay mas mabilis kumpara sa I2C protocol.
Ang RS-485 Module ay maaaring konektado sa anumang microcontroller na mayroong serial port. Para sa paggamit ng module na RS-485 na may microcontrollers isang module na tinatawag na 5V MAX485 TTL hanggang RS485 na batay sa Maxim MAX485 IC ay kinakailangan dahil pinapayagan nito ang serial na komunikasyon sa malayong distansya na 1200 metro at ito ay bidirectional at kalahating duplex ay may rate ng paglipat ng data na 2.5 Mbps. Ang module na ito ay nangangailangan ng isang boltahe ng 5V.
Paglalarawan ng RS-485 Pin:
Pangalan ng Pin |
Paglalarawan |
VCC |
5V |
A |
Hindi Inververt na Input ng Receiver Non-Inverting Driver Output |
B |
Inverting Receiver Input Pagbalik-tanaw ng Output ng Driver |
GND |
GND (0V) |
R0 |
Receiver Out (RX pin) |
RE |
Receiver Output (LOW-Enable) |
DE |
Output ng Driver (MATAAS-Paganahin) |
DI |
Input ng Driver (pin na TX) |
Ang modyul na RS485 ay may mga sumusunod na tampok:
- Operating boltahe: 5V
- On-board MAX485 chip
- Isang mababang paggamit ng kuryente para sa komunikasyon ng RS485
- Limit-rate na limitadong transceiver
- 5.08mm pitch 2P terminal
- Maginhawa ang mga kable ng komunikasyon sa RS-485
- Ang lahat ng mga pin ng maliit na tilad ay pinangunahan na maaaring makontrol sa pamamagitan ng microcontroller
- Laki ng board: 44 x 14mm
Napakadali ng paggamit ng modyul na ito sa STM32F103C8 at Arduino UNO. Ginagamit ang mga serial serial port ng mga microcontroller. Ang mga serial serial pin sa STM32 at arduino UNO ay ibinibigay sa ibaba.
- Sa STM32F103C8: Pins PA9 (TX) & PA10 (RX)
- Sa Arduino Uno: Pin 0 (RX) & 1 (TX)
Ang programa ay simple din gamitin lamang ang Serial.print () upang sumulat sa RS-485 at Serial. Basahin () upang basahin mula sa RS-485 at ang mga pin na DE & RE ng RS-485 ay ginawang Mababa upang makatanggap ng data at ginawang TAAS sa sumulat ng data sa RS-485 bus.
Kinakailangan ang Mga Bahagi
- STM32F103C8
- Arduino UNO
- MAX485 TTL hanggang RS485 Converter Module - (2)
- 10K Potensyomiter
- Pindutan ng Push - 3
- LED - 3
- Mga lumalaban
- Breadboard
- Mga Koneksyon sa Mga Wires
Diagram ng Circuit
Sa tutorial na ito ang STM32F103C8 ay ginagamit bilang Master na may isang RS-485 module at ang Arduino UNO ay ginagamit bilang Slave na may isa pang module na RS-485.
Koneksyon sa Circuit sa pagitan ng RS-485 at STM32F103C8 (Master):
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE RE |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5V |
GND |
GND |
A |
Sa A ng Alipin RS-485 |
B |
Sa B ng Alipin RS-485 |
STM32F103C8 na may pindutang Tatlong Push:
Tatlong mga pindutan ng Push na may tatlong Pull Down Resistor na 10k ay konektado sa mga pin na PA0, PA1, PA2 ng STM32F103C8.
Koneksyon sa Circuit sa pagitan ng RS-485 at Arduino UNO (Alipin):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
2 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
A |
Sa A ng Master RS-485 |
B |
Sa B ng Master RS-485 |
Ginagamit ang Tatlong LEDs kung saan ang mga Anode ng LED na may risistor ng 330 ohm ay konektado sa mga pin 4, 7, 8 ng Arduino UNO at ang Cathode ng LEDs ay konektado sa GND.
Programming STM32F103C8 at Arduino UNO para sa RS485 Serial Communication
Ang Arduino IDE ay ginagamit para sa pag-unlad at pagprograma ng parehong board ie STM32 at Arduino UNO. Ngunit tiyaking napili mo ang kaukulang PORT mula sa Tools-> Port at Board mula sa Tools-> Board. Kung nakakita ka ng anumang mga paghihirap o pag-aalinlangan mag-refer lamang sa Programming iyong STM32 sa ARDUINO IDE. Ang programa para sa tutorial na ito ay binubuo ng Dalawang seksyon isa para sa STM32F103C8 (Master) at iba pa para sa Arduino UNO (Alipin). Parehong ipinapaliwanag ang parehong mga code sa ibaba.
STM32F103C8 bilang MasterSa panig ng Master, ang katayuan ng Push Button ay nabasa at pagkatapos ay nakasulat nang seryal ang mga halagang iyon sa RS-485 bus sa pamamagitan ng Hardware Serial Ports 1 (PA9, PA10) ng STM32F103C8. Gayundin walang kailangan ng panlabas na silid-aklatan sa ngayon. Ang Arduino ay mayroong lahat ng kinakailangang silid-aklatan para sa serial na komunikasyon.
Simulan ang Serial Communication gamit ang Hardware Serial Pins (PA9, PA10) sa buadrate ng 9600.
Serial1.begin (9600);
Basahin ang katayuan ng pindutan ng push sa mga pin na PA0, PA1, PA2 ng STM32F103C8 at iimbak ang mga ito sa isang variable na button1val, button2val, button3val. Ang halaga ay TAAS kung ang pindutan ay pinindot at Mababa kapag hindi pinindot.
int button1val = digitalRead (button1); int button2val = digitalRead (button2); int button3val = digitalRead (button3);
Bago ipadala ang mga halaga ng pindutan sa serial port, ang mga pin na DE & RE ng RS-485 ay dapat na TAAS na konektado sa pin PA3 ng STM32F103C8 (To Make pin PA3 HIGH):
digitalWrite (paganahin angPin, TAAS);
Susunod na ilagay ang mga halagang iyon sa Serial Port at magpadala ng mga halaga depende sa aling push button ang pinindot gamitin kung iba pa ang pahayag at ipadala ang kaukulang halaga kapag pinindot ang pindutan.
Kung ang unang pindutan ay pinindot pagkatapos ang kundisyon ay tumutugma at ang halagang '1' ay ipinadala sa serial port kung saan nakakonekta ang Arduino UNO.
kung (button1val == MATAAS) { int num1 = 1; Serial1.println (num1); }
Katulad nito, kapag pinindot ang pindutan 2 ang halaga 2 ay ipinadala sa serial port at kapag pinindot ang pindutan 3 ang halaga 3 ay ipinadala sa serial port.
kung hindi man (button2val == MATAAS) { int num2 = 2; Serial1.println (num2); } iba pa kung (button3val == MATAAS) { int num3 = 3; Serial1.println (num3); }
At kapag walang pinindot na pindutan ang halaga 0 ay ipinadala sa Arduino Uno.
kung hindi man { int num = 0; Serial1.println (num); }
Tinatapos nito ang programa upang mai-configure ang STM32 bilang Master.
Arduino UNO bilang AlipinSa panig ng Alipin, ang Arduino UNO ay tumatanggap ng isang integer na halaga na ipinadala mula sa Master STM32F103C8 na magagamit sa Hardware Serial port ng Arduino UNO (P0, 1) kung saan nakakonekta ang module na RS-485.
Basahin lamang ang halaga at itabi sa isang variable. Nakasalalay sa halagang natanggap ang kaukulang LED ay naka-ON o OFF na konektado sa Arduino GPIO.
Upang matanggap ang mga halaga mula sa Master gawin lamang ang mga pin na DE & RE ng RS-485 module na Mababa. Kaya't ang pin-2 (enablePin) ng Arduino UNO ay ginawang Mababa.
digitalWrite (enablePin, LOW);
Ngayon basahin lamang ang data ng integer na magagamit sa Serial Port at iimbak ang mga ito sa isang variable.
int makatanggap = Serial.parseInt ();
Nakasalalay sa halagang hal na (0, 1, 2, 3) na natanggap, ang kaukulang isa sa tatlong LED ay ON.
kung (makatanggap == 1) // Depende Sa Natanggap na halaga ang kaukulang LED ay naka-ON o OFF { digitalWrite (ledpin1, HIGH); } iba pa kung (makatanggap == 2) { digitalWrite (ledpin2, HIGH); } iba pa kung (makatanggap == 3) { digitalWrite (ledpin3, HIGH); } iba pa { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
Tinatapos nito ang pag-program at pag-configure ng Arduino UNO bilang Alipin. Tinatapos din nito ang kumpletong mga pagsasaayos para sa Arduino UNO at STM32. Ang gumaganang video at lahat ng mga code ay nakakabit sa pagtatapos ng tutorial na ito.
Pagsubok sa komunikasyon ng RS485 sa pagitan ng STM32F103C8 at Arduino UNO:
1. Kapag ang Push button-1, na konektado sa Master STM32, ay pinindot ang LED 1 Turn ON na konektado sa Slave Arduino.
2. Kapag ang Push button-2, na konektado sa Master STM32, ay pinindot ang LED 2 Turn ON na konektado sa Slave Arduino.
3. Katulad din kapag ang Push button-3 ay pinindot ang LED 3 Turns ON na konektado sa Slave Arduino.
Tinatapos nito ang serial komunikasyon ng RS485 sa pagitan ng STM32F103C8 at Arduino UNO. Ang mga board ng Arduino UNO at STM32 ay malawakang ginagamit na mga board para sa mabilis na prototyping at nagawa namin ang maraming mga kapaki-pakinabang na proyekto sa mga board na ito. Kung nakakita ka ng anumang mga pagdududa o may anumang mungkahi para sa amin pagkatapos ay sumulat at magkomento sa ibaba.