2021年6月27日星期日

Arduino RS232

 RS232 with Arduino

 

今天來聊一下RS232這個介面,這個介面至今也還在工廠或是一些設備上可以發現,那不免除的還是要來了解一下歷史,根據網路上查到的資料,可以先從它的物理特性來認識。

 

RS232 介紹

RS-232是美國電子工業聯盟(EIA)制定的序列資料通訊的介面標準,它被廣泛用於電腦序列介面外設連接,像是早期電腦的ComportPLC 通訊或是現在的工業電腦也都還看的到。

那為甚麼工廠設備會喜歡使用RS232介面呢?

1.      電壓允許範圍: 訊號大小在正的和負的315v之間

2.      傳輸距離較ttl遠,約15米以內

 

雖然現在較多工廠開始轉成透過RJ45 或是無線的方式,為了方便擴充或布置,詳細的細節請看這裡https://zh.wikipedia.org/wiki/RS-232

 

電壓可以跟據電路設計,從3-15V之間,在有些場合或環境下,通訊間的電壓,提高,有助於避免通訊時被干擾。

 

常見的RS232 模組在使用時需要注意

1.      ttlRS232晶片型號

2.      該模組設計的電壓為多少

3.      支援的baudrate 到多少

4.      TxRx有沒有接對

RS232 通訊波形

這邊我先透過邏輯分析儀觀察TTL的波形,再用示波器觀察波形









(透過comport 發送’F’,在邏輯分析上得到的波形及結果)


(RS232 TX上面量測到的波形)


這邊可能會有人有疑惑波形怎麼不像,不過沒關係,透過示波器的反向功能就可以了















(反向完的結果與TTL的波形相同)


 材料

1.      USB RS232

2.      RS232 TTL

3.      Arduino NANO

4.      Arduino NANO 擴展版

5.      杜邦線若干條



 










軟體

1.      Arduino IDE

2.      Realtern

軟體載點連結

https://www.arduino.cc/en/software

https://sourceforge.net/projects/realterm/


 Realterm教學

安裝完後開啟

1.      點選port->找到USB to Rs232port

2.      設定通訊相關參數




 












3.      發送ASCII 文字

















實驗目標

        透過RS232 控制arduino NANO 上的 LED

 

Step1 了解模組晶片

先看一下晶片模組晶片的規格

 

晶片規格






















結論

1.      使用arduino 板子上的5V供電-OK

2.      BaudRate 不可以開超過120000


 

Step2、接線

接線說明

要注意有些模組的TX RX腳位沒有替換掉,如果照下面接線沒有反應,記得把TX pin RX Pin對調一下(ps因為我這個模組試完之後需要Rx Rx才有資料)

 

Arduino NANO

RS232 模組

5V

Vcc

D10

Rx

D11

Tx

Gnd

Gnd

這邊先說解說一下,可能有讀者覺得奇怪,D10D11不是數位腳位嗎?為甚麼可以接RS232模組的RxTx,原因是因為這是透過控制IO的輸出入控制來達到接收發送資料,細節下次再寫一篇跟大家分享。

Step3、寫程式

 

※測試接收發送

透過接收來自usb to RS232的資料並顯示在arduino comport

程式碼燒錄完後開啟arduino IDE COMPRTRealterm,在arduino IDE COMPORT丟資料可以顯示在Realterm上面,Realterm傳送資料可以顯示在arduino IDE COMPORT上。這邊沒有問題後才可以進到下一步。

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

 

void setup()

{

  // Open serial communications and wait for port to open:

  Serial.begin(9600);

  while (!Serial) {

    ; // wait for serial port to connect. Needed for Native USB only

  }

  // set the data rate for the SoftwareSerial port

  mySerial.begin(9600);

}

 

void loop() // run over and over

{

  if (mySerial.available())

    Serial.write(mySerial.read());

  if (Serial.available())

    mySerial.write(Serial.read());

}


 測試結果照片,發送AAA,BBB測試






















※設定LED

void setup()裡面加入        pinMode(13,OUTPUT);

void setup()

{

  // Open serial communications and wait for port to open:

  Serial.begin(9600);

  while (!Serial) {

    ; // wait for serial port to connect. Needed for Native USB only

  }

  // set the data rate for the SoftwareSerial port

  mySerial.begin(9600);

 

  pinMode(13,OUTPUT);

}


 

※撰寫控制命令

        String cmd="";

void loop() // run over and over

{

  if (mySerial.available())

  {

    char recive = mySerial.read();

      Serial.write(Serial.read());

    if(recive=='\n')

    {

       if(cmd.equals("HIGH"))

        digitalWrite(13,HIGH);

       else if(cmd.equals("LOW"))

        digitalWrite(13,LOW);

      

       cmd="";

    }

    else

      cmd+=recive;

  }

  if (Serial.available())

    mySerial.write(Serial.read());

}

結果影片



 程式碼

https://github.com/windyman24/Arduino_RS232

 

參考資料

https://makerpro.cc/2019/08/the-difference-between-rs232-and-uart/

https://zh.wikipedia.org/zh-tw/RS-232

沒有留言:

發佈留言

打賞按讚