1. 程式人生 > 其它 >通訊介面應用筆記2:MAX3160實現多協議通訊

通訊介面應用筆記2:MAX3160實現多協議通訊

  在一些應用需求中,我們需要對外部提供序列通訊埠,但這些埠所通訊的目標裝置各有不同,介面協議也有RS232以及RS485和RS422多種。面對這種情況,我們當然可以同時設計多個串列埠以適應不同需要,但無疑對硬體資源是一種浪費。我們希望能夠動態配置介面型別以適應不同需求,這一篇中我們就來討論使用MAX3160實現這樣的多協議介面通訊的問題。

1、原理簡述

  MAX3160是一款可程式設計RS232、RS485和RS422多協議收發器。可以通過引腳配置來實現雙通道RS-232,單通道的RS-485和RS-422以及帶硬體流控制的單通道RS-232介面。MAX3160採用獨特的低壓差發送輸出級和內部雙電荷泵結構,在3V到5.5V的單電源供電時,可滿足RS-232和RS-485以及RS-422的介面協議要求。其引腳定義及封裝如下:

  從上述的引腳定義中我們可以知道, 我們可以通過RS485/RS232、HDPLX等引腳來確定介面的工作模式。當RS485/RS232和HDPLX引腳配置為低電平時,MAX3160工作在RS-232模式。當RS485/RS232引腳配置在高電平時,HDPLX引腳為高電平工作在RS485模式,HDPLX引腳為低電平工作在RS422模式。官方給出的配置方式如下圖所示:

  我們在應用MAX3160時,根據我們的應用需求來配置RS485/RS232和HDPLX引腳就能得到我們想要的介面模式。我們也可以通過MCU來控制這些引腳以便在需要時動態修改介面模式。

2、應用設計

  有了前面關於MAX3160的基礎知識,我們來根據需求設計我們的需要的應用。在官方給出的資料手冊中提供了了一個應用參考,在其中能實現帶硬體流控制的RS-232介面和RS-422之間的切換電路圖:

  在上述電路圖中,雖然闡述了介面模式切換的原理,但我們計劃的應用並沒有這麼複雜。在我們的應用需求中,我們希望可以實現RS-232和RS-485介面的動態切換,我們只需要一組RS-232介面也沒有RS-422的應用需求,同時我們也不考慮硬體流控制。在應用於RS-485模式時,我們需要使用15腳來控制RS-485的收發方向,而且在RS-485和RS422模式下第7腳是不使用的,所以我們可以設計相關的應用如下圖:

  在上述電路圖中,我們實現了RS-232和RS-485的切換,我們通過MCU來控制RS485/RS232引腳和HDPLX引腳以實現動態切換。

3、設計驗證

  我們設計了MAX3160動態切換RS-232和RS-485的介面電路,至於是否能夠正確的執行還需要進行驗證。我們設計簡單的應用軟體來驗證一下上述的電路設計是否正確。

  首先我們來驗證RS-232介面模式。在RS-232介面模式下,我們需要將RS485/RS232引腳設定為低電平,並且將HDPLX引腳也設定為低電平。我們在MCU程式中配置如下:

  MCEF_RS232_ALLOW(); //配置為RS232模式

  MCEF_FULLDUPLEX_ALLOW(); //全雙工

  接下來我們來驗證一下RS-485介面模式。在RS-485介面模式下,我們需要將RS485/RS232引腳設定為高電平,並且將HDPLX引腳也設定為高電平。我們在MCU程式中配置如下:

  MCEF_RS485_ALLOW(); //RS485模式

  MCEF_HALFDUPLEX_ALLOW(); //半雙工

  MCEF_RECIEVE_ALLOW(); //接收

  其他的配置如校驗位、波特率等是完全一樣的。在這次的應用中,我們設定波特率為115200,8位資料位,1位停止位,無校驗的模式。具體配置如下:

/* UART5初始化 */
static void UART5_Init_Configuration(void)
{
  huart5.Instance = UART5;
  huart5.Init.BaudRate = 115200;
  huart5.Init.WordLength = UART_WORDLENGTH_8B;
  huart5.Init.StopBits = UART_STOPBITS_1;
   huart5.Init.Parity = UART_PARITY_NONE;
  huart5.Init.Mode = UART_MODE_TX_RX;
  huart5.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart5.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart5) != HAL_OK)
  {
​    Error_Handler();
  }
  
  /*啟用串列埠接收中端*/
  __HAL_UART_ENABLE_IT(&huart5,UART_IT_RXNE);
}

  我們在應用層採用Modbus RTU協議,對於RS-485介面和RS-232介面,這部分是沒有區別的。我們在設計中實現了一個94個保持暫存器的從站。

4、小結

  我們在配置為RS-232模式和RS-485模式時,分別使用RS-232介面和RS-485介面與電腦相連,並使用Modbus主站軟體讀取下位機的資料,在兩種模式下除了介面選擇不一樣外,其它都是一樣的。獲取到的資料都是完全正確的,說明電路設計本身是可以執行的。

  我們在兩種模式下分別運行了一段時間,每種模式大約進行了3000次左右的訪問,沒有出現丟包和錯誤,穩定性也基本可以保證。

歡迎關注: