2021年6月27日星期日

Arduino RS232

 RS232 with Arduino

 

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

 

RS232 介紹

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

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

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

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

 

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

 

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

 

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

1.      ttl轉RS232晶片型號

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 Rs232的port

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

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

Step3、寫程式

 

※測試接收發送

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

程式碼燒錄完後開啟arduino IDE 的 COMPRT及Realterm,在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

沒有留言:

發佈留言

打賞按讚