Sartorius mérleg olvasása RS232 TTL konverterrel

TE4101 mérleget szeretnénk Arduino-val/Rapberry-vel olvasni. Először is egy könnyen beszerezhető RS232 to USB kábellel (CH340 csippel szerelt) próbáltam összeköttetést kialakítani a mérleg és egy PC között. A kábel csatlakoztatása után a megfelelő driver automatikusan települ, ha nem akkor ezt manuálisan kell megtennünk. Sikeres telepítés után a következőt kell látnunk:

USB-Serial CH340 (COM4)
1. ábra

Ezt a Start menü → Vezérlőpult → Eszközkezelő menü alatt találjuk meg. A COM14-es porton találjuk az eszközünket, ez persze eltérhet.

A port olvasásához a CoolTerm programot használom (http://freeware.the-meiers.org/) a következő beállításokkal:

Port COM14
Baudrate 9600
Data Bits 7
Parity odd
Stop Bits 1

Ezeknek a beállításoknak egyeznie kell a mérleg beállításaival, ott az alapbeállítás 1200 bit/second, ezzel nekem nem működött ezért átállítottam 9600-ra. Itt megtalálod a kezelési útmutatót és a kommunikációs protokollt:

Description of the Interface for GD, GE and TESartorius_GD_GE

Sartorius_GD_GE

Természetesen mivel egy Sartorius termékről van szó, így nem követi a szabványt, amire a mérleg hátulján lévő felirat is figyelmeztet.

TE4101
2. ábra

Egy kis átkötésre lesz szükség, hogy működésre bírjuk. Első körben szükségünk lesz egy átalakító kábelre, ami a 25 pines kimenetet leredukálja  9-re.

25 pin to 9 pin serial adapter
3. ábra

Ezt a 9 pines female-t, ha közvetlenül összekötjük az RS232-USB kábelünk male felével akkor sajnos nem fog működni, ezért egy kis átkötésre lesz szükség. Itt a pin kiosztás a  csatlakozókhoz:

RS232 - USB 25 pin to 9 female

Itt látszik, hogy ezzel a Tx-et a Tx-hez kapcsolnánk, ezért ezt fel kell cserélni, ehhez egy MINI GENDERCHANGER-t használok így a tüskéket female jumper wire-rel könnyen össze tudom kötni. Ezután a CoolTerm nevű programmal már tudtam olvasni, de parancsot sajnos még nem sikerült küldeni a mérlegnek. A mérlegen be lehet azt is állítani, hogy folyamatosan küldje az adatokat.

CoolTerm data logger
6. ábra

Ez tehát fél siker, de reméljük az adatküldés is hamar megoldódik.

Lássuk akkor ugyanezt Arduino-val, ehhez egy RS232 to TTL átalakítóra lesz szükségünk, ami így néz ki:

RS232 to TTL
7. ábra

Ez MAX3232 csippel van szerelve, beépítésre én MAX232N használtam, egy másik project-hez. A legtöbb mikrokontroller manapság UART-tal szerelt (universally asynchronous receiver/transmitter) ilyen az Arduino és a Raspberry is. A TTL-UART-nál csak 3 vezeték kell a kétoldalú soros kommunikációhoz. Egy Adás (Transmit-TX) egy Vétel (Receive-RX) és egy közös föld (GND) vezeték. A TX vonalon küldjük el az adatot a másik eszköznek, és az RX vonalon a másik eszköz küld adatot nekünk. TTL serial (transistor-transistor logic) kommunikációnál a feszültség érték leggyakrabban 3,3 és 5 volt, ez reprezentálja a logikai magas értéket (1) míg a 0V a logikai alacsony (0) értéknek felel meg.  Az RS232 esetében pont fordított a helyzet, itt a logikai 1 negatív tartományban van ez -3 és -25 között bárhol lehet, a logikai 0 érték pedig a pozitív tartományban van +3 és +25 volt között.

RS232 to ttl

rs232 to ttl

Az RS-232 egy 9 pólusú ún. D-Sub csatlakozót használ. Az aszinkron soros kommunikáció során ebből csak hármat használunk.

• RxD : adatfogadás, 3-as láb
• TxD : adatküldés, 2-es láb
• Föld (GND): 5-ös láb

Itt kitérnék egy picit a kapcsolat tesztelésére. Van ez a RS232 to ttl átalakítónk, ezt közvetlenül össze tudjuk kötni USB serial RS232 konverterrel (így néz ki). Az egyik ablakban megnyitjuk az Arduino-hoz, a másikban a RS232-USB átalakítóhoz tartozó soros monitort. Ebben az esetben ez COM23 és COM20.  Arduino-ra feltöltjük a következő kódot.

Ez annyit csinál, hogy folyamatosan küld egy 15-ös számot, amit a COM20 porton látunk, amit meg a innen küldünk az a COM23-on lesz látható. Ha mindent jól csatlakoztattunk, jól állítottuk be a baudrate-et, és ennek ellenére nem működik, akkor kapjunk elő egy voltmérőt és mérjük meg a feszültséget a Tx-GND és Rx-GND között. RS232 to ttl átalakító esetében ez -5,984V (Tx-GND) és 0V (Rx-GND). Az egyik hibás modulnál pl. +2,5 és +2,5 volt. Az USB serial RS232 konverter esetében -9,047V (Tx-GND) és 0V (Rx-GND). Tehát akkor gyanús ha a Tx-GND pozitív tartományban van, vagy ha a Rx-GND nem nulla.

Vissza a mérleghez. A 3. ábrán látható kábellel, egy male to male átalakítóval és egy RS232 to TTL konverter segítségével kialakítjuk a kapcsolatot az Arduino és a mérleg között.

Arduino - balance communication

Az Rx megy az Arduino 2-es a Tx a 3-as pinjére.

A mintakód igen egyszerű, ezzel kiolvassuk a mérleg által küldött karaktereket és decimálisban megjelenítjük.

 

A felső sorban a beérkezett adat decimálisban, az alatta lévő az ASCII megfelelője, vagyis nem teljesen mert a 176 megfelelője a °, a 174-é pedig a ®. Ez most vagy kommunikációs félreértés a két eszköz között, vagy a Sartorius sajátossága. Az érték az 0.0 g. A 32-es karakter = SP – Space én “_” jelöltem.

32 32 32 32 32 32 32 176 174 176 32 103 32 32 13 138
 _  _ _ _ _ _ _ 0 . 0 _ g _ _ CR  Š

 

Egy másik példa, itt az érték 10.8 g

 171 32 32 32 32 32 49 176 174 56 32 103 32 32 13 138
 + _ _ _ _ _ 1 0 . 8 _ g _ _  CR Š

 

Itt sem teljesen egyértelmű, mert a 171 megfelelője a « és nem +, holott ennek kellene lennie.

Ehhez kellene majd írni egy programot, ami átkonvertálja a megfelelő értékre, majd I2C-n keresztül kérésre továbbítja a raspberry felé.

2017.01.15.

Közben megjött a válasz a korábbi kérdésre, hogy miért nem egyezik a decimálisból ACSII-ra átváltott karakterek. A 176, 174, 138-as számok esetében volt csak probléma. Ezekből a számértékekből, ha levonunk 128-at akkor stimmel: 176-128 = 48 (ASCII megfelelője 0). Ez a paritás bit miatt van. A számérték bináris értékében ha az egyesek száma páros akkor az első helyi értékű bitet 1 re állítja. Ezt kell majd 0-ra állítani és akkor rendben lesz.

48 binárisan 00110000, ebben két egyes van, tehát az egyesek száma páros, ezért az első helyi érték 1-re változott, így 10110000, ami 176.

Felhasznált irodalom

https://www.sparkfun.com/tutorials/215
http://www.hobbielektronika.hu/cikkek/egyszeru_soros_kommunikacio_avr-rel_uart.html?pg=2
http://www.aboutmyip.com/AboutMyXApp/AsciiChart.jsp

Share This:

 
Loading Facebook Comments ...

Leave a Comment