- RS-485-sarjaliikenne
- Tarvittavat komponentit
- Piirikaavio
- STM32F103C8: n ja Arduino UNO: n ohjelmointi RS485-sarjaliikenteeseen
- STM32F103C8: n ja Arduino UNO: n välisen RS485-tiedonsiirron testaaminen:
Tiedonsiirtoprotokollat ovat olennainen osa digitaalista elektroniikkaa ja sulautettua järjestelmää. Aina, kun on olemassa useita mikrokontrollereita ja oheislaitteita, on käytettävä tietoliikenneprotokollaa datan nipun vaihtamiseksi. Sarjayhteyskäytäntöjä on monenlaisia. RS485 on yksi sarjaliikenneprotokollasta ja sitä käytetään teollisuusprojekteissa ja raskaissa koneissa.
Opimme RS485-sarjaliikenteestä Arduino Unon ja Arduino Nanon välillä edellisestä opetusohjelmasta . Tämä opas koskee RS-485-sarjaliikenteen käyttöä STM32F103C8-mikrokontrollerissa. Jos olet uusi STM32-mikrokontrolleri, aloita sitten Aloittaminen STM32: sta käyttämällä Arduino IDE: Vilkkuvaa LEDiä ja tarkista kaikki STM32-projektit täältä.
Tässä opetusohjelmassa Master STM32F103C8: lla on kolme painonappia, joita käytetään ohjaamaan Slave Arduino Unossa olevien kolmen LEDin tilaa RS-485-sarjaliikenteen avulla.
Aloitetaan ymmärtämällä RS-485-sarjaliikenteen toiminta.
RS-485-sarjaliikenne
RS-485 on asynkroninen sarjaliikenneprotokolla, joka ei vaadi kelloa. Se käyttää tekniikkaa, jota kutsutaan differentiaalisignaaliksi, binääridatan siirtämiseksi laitteesta toiseen.
Joten mikä tämä differentiaalinen signaalinsiirtomenetelmä on?
Differentiaalisignaalimenetelmä toimii luomalla differentiaalijännite käyttämällä positiivista ja negatiivista 5V. Se tarjoaa Half-Duplex- tiedonsiirron, kun käytetään kahta johtoa, ja Full-Duplex- tiedonsiirron, kun käytetään neljää johtoa.
Käyttämällä tätä menetelmää:
- RS-485 tukee suurempaa tiedonsiirtonopeutta, enintään 30 Mbps.
- Se tarjoaa myös maksimaalisen tiedonsiirtoetäisyyden RS-232-protokollaan verrattuna. Se siirtää dataa enintään 1200 metriin asti.
- RS-485: n tärkein etu RS-232: een nähden on useita orjia yhden isännän kanssa, kun taas RS-232 tukee vain yhtä orjaa.
- RS-485-protokollaan voi olla kytketty enintään 32 laitetta.
- Toinen RS-485: n etu on immuuni kohinalle, koska ne käyttävät siirtämiseen differentiaalista signaalimenetelmää.
- RS-485 on nopeampi kuin I2C-protokolla.
RS-485-moduuli voidaan liittää mihin tahansa mikrokontrolleriin, jossa on sarjaportti. RS-485-moduulin käyttämiseksi mikro-ohjainten kanssa tarvitaan moduuli nimeltä 5V MAX485 TTL - RS485, joka perustuu Maxim MAX485 IC: een, koska se sallii sarjaliikenteen 1200 metrin pitkällä etäisyydellä ja on kaksisuuntainen ja puoliduplexin tiedonsiirtonopeus on 2,5 Mbps. Tämä moduuli vaatii 5 V: n jännitteen.
RS-485-nastan kuvaus:
PIN-nimi |
Kuvaus |
VCC |
5 V |
A |
Ei-invertoiva vastaanottimen tulo Ei-käänteinen ohjaimen lähtö |
B |
Vastaanottimen tulon kääntäminen Käänteinen ohjaimen lähtö |
GND |
GND (0 V) |
R0 |
Vastaanotin ulos (RX-tappi) |
RE |
Vastaanottimen lähtö (LOW-Enable) |
DE |
Ohjaimen lähtö (HIGH-Enable) |
DI |
Ohjaimen tulo (TX-nasta) |
RS485-moduulilla on seuraavat ominaisuudet:
- Käyttöjännite: 5V
- Sisäänrakennettu MAX485-siru
- Pieni virrankulutus RS485-tiedonsiirtoa varten
- Käännetty nopeus rajoitettu lähetin
- 5,08 mm: n 2P-liitäntä
- Kätevä RS-485-tiedonsiirtoyhteys
- Kaikkia sirunastoja on johdettu, ja niitä voidaan ohjata mikro-ohjaimen kautta
- Levyn koko: 44 x 14 mm
Tämän moduulin käyttäminen STM32F103C8: n ja Arduino UNO: n kanssa on erittäin helppoa. Käytetään mikrokontrollerien laitteistosarjaportteja. STM32: n ja arduino UNO: n laitteistosarjat on annettu alla.
- STM32F103C8: nastat PA9 (TX) ja PA10 (RX)
- Arduino Unossa: Pin 0 (RX) & 1 (TX)
Ohjelmointi on myös yksinkertaista, käytä vain Serial.print (): ää kirjoittaaksesi RS-485: een ja Serial.Read (): a lukemaan RS-485: stä ja RS-485: n nastat DE & RE on MATALA vastaanottaa tietoja ja tehdä KORKEA kirjoita tietoja RS-485-väylään.
Tarvittavat komponentit
- STM32F103C8
- Arduino UNO
- MAX485 TTL - RS485 -muunninmoduuli - (2)
- 10K-potentiometri
- Painike - 3
- LED - 3
- Vastukset
- Leipälauta
- Johtojen liittäminen
Piirikaavio
Tässä opetusohjelmassa STM32F103C8: ta käytetään masterina yhden RS-485-moduulin kanssa ja Arduino UNO: ta orjana toisen RS-485-moduulin kanssa.
Piiriliitäntä RS-485: n ja STM32F103C8: n (Master) välillä:
RS-485 |
STM32F103C8 |
DI |
PA9 (TX1) |
DE RE |
PA3 |
R0 |
PA10 (RX1) |
VCC |
5 V |
GND |
GND |
A |
Orjan RS-485 A: lle |
B |
Orjan RS-485 B: lle |
STM32F103C8 kolmella painikkeella:
Kolme painonappia, joissa on kolme 10 k: n alasvetovastusta, on kytketty STM32F103C8: n tappeihin PA0, PA1, PA2.
Piiriliitäntä RS-485: n ja Arduino UNO: n (Slave) välillä:
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RE |
2 |
R0 |
0 (RX) |
VCC |
5 V |
GND |
GND |
A |
Master RS-485: n A: lle |
B |
Master RS-485: n B: lle |
Kolme LEDiä käytetään, kun 330 ohmin vastuksella toimivien LEDien anodit on kytketty Arduino UNO: n nastoihin 4, 7, 8 ja LEDien katodi on kytketty GND: hen.
STM32F103C8: n ja Arduino UNO: n ohjelmointi RS485-sarjaliikenteeseen
Arduino IDE: tä käytetään molempien levyjen eli STM32: n ja Arduino UNO: n kehittämiseen ja ohjelmointiin. Mutta varmista, että olet valinnut vastaavan PORTIN kohdasta Työkalut-> Portti ja alusta kohdasta Työkalut-> Lauta. Jos löydät vaikeuksia tai epäilet, katso vain STM32: n ohjelmointi ARDUINO IDE -ohjelmassa. Tämän opetusohjelman ohjelmointi koostuu kahdesta osasta STM32F103C8 (Master) ja toisesta Arduino UNO: lle (Slave). Molemmat koodit selitetään yksitellen alla.
STM32F103C8 päällikkönäMaster-puolella painikkeen tila luetaan ja kirjoitetaan sitten nämä arvot sarjaan RS-485-väylään STM32F103C8: n laitteistosarjaporttien 1 (PA9, PA10) kautta. Myöskään ulkoista kirjastoa ei tarvita tällä hetkellä. Arduinolla on kaikki tarvittavat kirjastot sarjaliikennettä varten.
Aloita sarjaliikenne käyttämällä laitteiston sarjaliittimiä (PA9, PA10) buadrate 9600: lla.
Serial1.begin (9600);
Lue painikkeen tila STM32F103C8: n tappeista PA0, PA1, PA2 ja tallenna ne muuttujiin button1val, button2val, button3val. Arvo on HIGH, jos painiketta painetaan, ja LOW, kun sitä ei paineta.
int painike1val = digitalRead (painike1); int button2val = digitalRead (painike2); int button3val = digitalRead (painike3);
Ennen kuin painikearvot lähetetään sarjaporttiin, RS-485: n nastojen DE & RE tulee olla KORKEAT, jotka on liitetty STM32F103C8: n napaan PA3 (jotta nasta PA3 olisi korkea):
digitalWrite (enablePin, HIGH);
Lisää nämä arvot sarjaporttiin ja lähetä arvot sen mukaan, mitä painonappia painetaan, käytä if if else -lauseketta ja lähetä vastaava arvo, kun painiketta painetaan.
Jos ensimmäistä painiketta painetaan, ehto täsmää ja arvo '1' lähetetään sarjaporttiin, johon Arduino UNO on kytketty.
if (painike1val == KORKEA) { int numero1 = 1; Sarja1.println (numero1); }
Vastaavasti, kun painiketta 2 painetaan, arvo 2 lähetetään sarjaportin kautta ja kun painiketta 3 painetaan, arvo 3 lähetetään sarjaportin kautta.
else if (painike2val == KORKEA) { int numero2 = 2; Sarja1.println (numero2); } else if (painike3val == KORKEA) { int numero3 = 3; Sarja1.println (numero3); }
Ja kun mitään painiketta ei paineta, arvo 0 lähetetään Arduino Unolle.
else { int num = 0; Sarja1.println (numero); }
Tämä viimeistelee ohjelmoinnin STM32: n määrittämiseksi Masteriksi.
Arduino UNO orjanaSlave-puolella Arduino UNO vastaanottaa kokonaisluku, joka lähetetään Master STM32F103C8 joka on saatavilla Laitteisto sarjaportin Arduino UNO (P0, 1), jossa RS-485-moduuli on kytketty.
Yksinkertaisesti lue arvo ja tallenna muuttujaan. Vastaanotetusta arvosta riippuen vastaava LED-valo syttyy tai sammuu kytkettynä Arduino GPIO: een.
Saadaksesi arvot Master-laitteelta, tee RS-485-moduulin nastat LOW. Joten Arduino UNO: n pin-2 (enablePin) tehdään LOW.
digitalWrite (enablePin, LOW);
Lue vain sarjaportista saatavat kokonaislukutiedot ja tallenna ne muuttujaan.
int vastaanota = Sarja.parseInt ();
Vastaanotetusta arvosta eli (0, 1, 2, 3) riippuen vastaavasti yksi kolmesta LEDistä palaa.
if (vastaanotto == 1) // Vastaanotetun arvon mukaan vastaava LED-valo syttyy tai sammuu { digitalWrite (ledpin1, HIGH); } else if (vastaanota == 2) { digitalWrite (ledpin2, HIGH); } else if (vastaanota == 3) { digitalWrite (ledpin3, HIGH); } else { digitalWrite (ledpin1, LOW); digitalWrite (ledpin2, LOW); digitalWrite (ledpin3, LOW); }
Tämä viimeistelee Arduino UNO: n ohjelmoinnin ja määrityksen orjaksi. Myös tämä viimeistelee Arduino UNO: n ja STM32: n täydelliset kokoonpanot. Työvideo ja kaikki koodit on liitetty tämän opetusohjelman loppuun.
STM32F103C8: n ja Arduino UNO: n välisen RS485-tiedonsiirron testaaminen:
1. Kun Master STM32 -laitteeseen kytkettyä painiketta 1 painetaan, LED 1 syttyy kytkettynä Slave Arduinoon.
2. Kun Master STM32 -laitteeseen kytkettyä painiketta 2 painetaan, LED 2 syttyy kytkettynä Slave Arduinoon.
3. Vastaavasti, kun painonappia 3 painetaan, LED 3 syttyy kytkettynä Slave Arduinoon.
Tämä viimeistelee RS485-sarjaliikenteen STM32F103C8: n ja Arduino UNO: n välillä. Arduino UNO- ja STM32-levyt ovat laajalti käytettyjä levyjä nopeaan prototyyppien tekemiseen, ja olemme tehneet näille levyille monia hyödyllisiä projekteja. Jos löydät epäilyksiä tai sinulla on ehdotuksia meille, kirjoita ja kommentoi alla.