哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

485 總線硬件設(shè)計(jì):電平匹配、TVS 防護(hù)與 Modbus 庫(kù)應(yīng)用

青山老竹農(nóng) ? 來(lái)源:jf_82863998 ? 作者:jf_82863998 ? 2026-03-25 12:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

工業(yè)物聯(lián)網(wǎng)通信開(kāi)發(fā)中,485 總線搭配 Modbus 協(xié)議的方案應(yīng)用廣泛。今天來(lái)和大家分享下,Air780EHV通信SoC模組,使用485總線通信的硬件設(shè)計(jì)要點(diǎn),以及LuatOS下Modbus協(xié)議的實(shí)操應(yīng)用。

一、485總線接口與UART的關(guān)系

485總線接口本質(zhì)上是UART總線接口的一種應(yīng)用,需要搭配485收發(fā)器芯片實(shí)現(xiàn)。

二、電平匹配問(wèn)題

在UART與485收發(fā)器芯片的搭配中,最常見(jiàn)需要注意的一個(gè)問(wèn)題是電平匹配。

由于上一章節(jié)參考設(shè)計(jì)中Air780EHV和SP3485都是3.3V的IO電平,所以不再需要分立元器件電平轉(zhuǎn)換電路或電平轉(zhuǎn)換芯片。

當(dāng)雙方電平不一致時(shí),則需要分立元器件電平轉(zhuǎn)換電路或電平轉(zhuǎn)換芯片。

常見(jiàn)的分立元器件電平轉(zhuǎn)換電路如下:

Air780EHV 系列模組的相關(guān)參數(shù)說(shuō)明如下:

該模組適配 320*480 LCD 屏、30 萬(wàn)像素?cái)z像頭,具備 CAN、RJ45 以太網(wǎng)、485、USB、UART、SPI、I2C、PWM、GPIO 等豐富接口。

網(wǎng)絡(luò)支持 TCP/UDP、MQTT、HTTP、NTP、Modbus 等多種協(xié)議,集成 4G音頻模塊,可實(shí)現(xiàn)語(yǔ)音通話、錄音播放及 TTS 功能。

工業(yè)通信中非常經(jīng)典的485總線,硬件設(shè)計(jì)中需要注意的細(xì)節(jié),Modbus協(xié)議在LuatOS開(kāi)發(fā)中的應(yīng)用,詳見(jiàn)下文。

三、485總線接口的TVS防護(hù)

工業(yè)現(xiàn)場(chǎng)環(huán)境復(fù)雜,485總線經(jīng)常面臨靜電、浪涌等威脅,因此接口保護(hù)必不可少。

485接口用TVS,可以根據(jù)防護(hù)等級(jí)要求去選擇:

  • ESD等級(jí)防護(hù):適用于一般靜電防護(hù)場(chǎng)景。
  • TVS等級(jí)防護(hù):具備2KV 1.2/50uS浪涌能力。
  • TSS等級(jí)防護(hù):具備4KV 10/700uS浪涌能力。

四、Modbus通信協(xié)議

與485總線接口相關(guān)的通信協(xié)議是Modbus。LuatOS的modbus核心庫(kù),但使用難度較高。而exmodbus擴(kuò)展庫(kù)——在核心庫(kù)的基礎(chǔ)上封裝了更簡(jiǎn)潔易用的API,降低開(kāi)發(fā)難度,易于開(kāi)發(fā)者集成Modbus通信。

exmodbus最新API文檔詳見(jiàn)資料中心

核心示例持續(xù)更新中!

PROJECT = "RTU_MASTER"
VERSION = "001.000.000"

-- 在日志中打印項(xiàng)目名和項(xiàng)目版本號(hào)
log.info("main", PROJECT, VERSION)

local exmodbus = require("exmodbus")

-- 使用 Air8000 開(kāi)發(fā)板測(cè)試打開(kāi)這兩個(gè)
gpio.setup(16, 1)         -- RS485 芯片供電引腳
local rs485_dir_gpio = 17 -- RS485 方向引腳

-- 使用 Air780EPM 開(kāi)發(fā)板測(cè)試打開(kāi)這三個(gè);
-- gpio.setup(1, 1)          -- Air780EPM RS485 芯片供電引腳
-- gpio.setup(23, 1)         -- Air780EPM vref 腳拉高
-- local rs485_dir_gpio = 24 -- Air780EPM RS485 方向引腳(V1.2 是 25,V1.3 是 24)

-- 創(chuàng)建 RTU 主站配置參數(shù);
-- 說(shuō)明:創(chuàng)建 RTU 主站時(shí)只需要配置如下參數(shù)即可;
local create_config = {
-- 串口配置參數(shù);
mode = exmodbus.RTU_MASTER,      -- 通信模式
uart_id = 1,                     -- UART 端口號(hào)
baud_rate = 115200,              -- 波特率
data_bits = 8,                   -- 數(shù)據(jù)位
stop_bits = 1,                   -- 停止位
parity_bits = uart.None,         -- 校驗(yàn)位
byte_order = uart.LSB,           -- 字節(jié)順序
rs485_dir_gpio = rs485_dir_gpio, -- RS485 方向引腳
rs485_dir_rx_level = 0,          -- RS485 接收方向電平
}

-- 初始化從站 1 數(shù)據(jù)結(jié)構(gòu)
-- 用于記錄從站 1 保持寄存器 0-1 的值;
local slave1_data = {}

-- 配置讀取從站 1 保持寄存器 0-1 的值;
local read_config = {
raw_request = string.char(
0x01,       -- 從站地址
0x03,       -- 功能碼:讀取保持寄存器
0x00, 0x00, -- 寄存器起始地址
0x00, 0x02, -- 寄存器數(shù)量
0xC4, 0x0B  -- CRC16校驗(yàn)碼
),
timeout = 1000  -- 超時(shí)時(shí)間 1000 ms
}

-- 創(chuàng)建 RTU 主站實(shí)例
local rtu_master = exmodbus.create(create_config)

-- 判斷主站是否創(chuàng)建成功并記錄日志
if not rtu_master then
log.info("exmodbus_test", "rtu_master 創(chuàng)建失敗")
else
log.info("exmodbus_test", "rtu_master 創(chuàng)建成功")
end

-- 讀取從站 1 保持寄存器數(shù)據(jù)的函數(shù)
local function read_slave1_holding_registers()
log.info("exmodbus_test", "開(kāi)始讀取從站 1 保持寄存器 0-1 的值")

-- 執(zhí)行讀取操作
local read_result = rtu_master:read(read_config)

-- 根據(jù)返回狀態(tài)處理結(jié)果
if read_result.status == exmodbus.STATUS_SUCCESS then
local resp = read_result.raw_response

-- 特別說(shuō)明:
-- 接下來(lái)的判斷是針對(duì) modbus RTU 標(biāo)準(zhǔn)響應(yīng)格式的應(yīng)答原始幀來(lái)解析的
-- 在實(shí)際項(xiàng)目中,應(yīng)根據(jù)自己項(xiàng)目中的實(shí)際應(yīng)答原始幀格式進(jìn)行解析
-- 如果實(shí)際格式與此處演示的格式不一致,需要修改接下來(lái)的解析代碼

-- 1. 檢查總長(zhǎng)度:必須為 9 字節(jié)(1 地址 + 1 功能碼 + 1 字節(jié)數(shù) + 4 數(shù)據(jù) + 2 CRC)
if #resp ~= 9 then
log.info("exmodbus_test", "響應(yīng)長(zhǎng)度錯(cuò)誤,期望 9 字節(jié),實(shí)際:", #resp)
return
end

-- 2. 檢查從站地址
if string.byte(resp, 1) ~= 0x01 then
log.info("exmodbus_test", "從站地址不匹配,收到:", string.byte(resp, 1))
return
end

-- 3. 檢查功能碼
local func_code = string.byte(resp, 2)
if func_code == 0x83 then
local exc_code = string.byte(resp, 3)
log.info("exmodbus_test", "從站返回異常響應(yīng),異常碼:", exc_code)
return
elseif func_code ~= 0x03 then
log.info("exmodbus_test", "功能碼錯(cuò)誤,收到:", func_code)
return
end

-- 4. 檢查字節(jié)數(shù)字段(應(yīng)為 4)
local byte_count = string.byte(resp, 3)
if byte_count ~= 4 then
log.info("exmodbus_test", "字節(jié)數(shù)字段錯(cuò)誤,期望 4,實(shí)際:", byte_count)
return
end

-- 5. 校驗(yàn)CRC
-- 計(jì)算前 7 字節(jié)的 CRC
local crc_calculated = crypto.crc16_modbus(resp:sub(1, 7))
-- 提取接收到的 CRC
local crc_received = string.unpack("< I2", resp, 8)
-- 比較 CRC
if crc_calculated ~= crc_received then
log.info("exmodbus_test", "CRC 校驗(yàn)錯(cuò)誤,計(jì)算值:", crc_calculated, ",接收值:", crc_received)
return
end

-- 6. 解析寄存器數(shù)據(jù)(從第 4 字節(jié)開(kāi)始,大端序)
local data1 = string.unpack(" >I2", resp, 4) -- 寄存器 0,偏移 4
local data2 = string.unpack(" >I2", resp, 6) -- 寄存器 1,偏移 6

-- 7. 記錄數(shù)據(jù)
slave1_data[0] = data1
slave1_data[1] = data2

-- 8. 記錄日志
log.info("exmodbus_test", "成功讀取到從站 1 保持寄存器 0-1 的值,寄存器 0 數(shù)值為", slave1_data[0], ",寄存器 1 數(shù)值為", slave1_data[1])

elseif read_result.status == exmodbus.STATUS_TIMEOUT then
log.info("exmodbus_test", "未收到從站 1 的響應(yīng)(超時(shí))")
end

end

-- 定時(shí)任務(wù)函數(shù):每 2 秒調(diào)用一次讀取函數(shù)
local function task()
while true do
if rtu_master then
-- 每 2 秒調(diào)用一次讀取函數(shù)
read_slave1_holding_registers()
else
log.info("exmodbus_test", "rtu_master 未創(chuàng)建,無(wú)法執(zhí)行 read_slave1_holding_registers()")
end
sys.wait(2000)
end
end

-- 初始化任務(wù)
sys.taskInit(task)

-- 用戶代碼已結(jié)束---------------------------------------------
-- 結(jié)尾總是這一句
sys.run()
-- sys.run()之后后面不要加任何語(yǔ)句!!!!

今天的分享就到這里啦~

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • MODBUS
    +關(guān)注

    關(guān)注

    28

    文章

    2502

    瀏覽量

    83693
  • 485總線
    +關(guān)注

    關(guān)注

    1

    文章

    34

    瀏覽量

    17181
  • LuatOS
    +關(guān)注

    關(guān)注

    0

    文章

    168

    瀏覽量

    2738
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RS485總線的兩級(jí)防護(hù)電路圖

    以下為RS485總線的兩級(jí)防護(hù)電路圖。當(dāng)雷擊發(fā)生時(shí),感應(yīng)過(guò)電壓由兩端引入,GDT做一級(jí)防護(hù),此時(shí)過(guò)電壓被大大削弱到數(shù)百伏左右,再經(jīng)過(guò)PPTC限浪,T
    發(fā)表于 04-09 10:37 ?1.1w次閱讀
    RS<b class='flag-5'>485</b><b class='flag-5'>總線</b>的兩級(jí)<b class='flag-5'>防護(hù)</b>電路圖

    電平設(shè)計(jì)基礎(chǔ):電平匹配設(shè)計(jì)

    單端邏輯電平匹配是我們平時(shí)在硬件設(shè)計(jì)中最經(jīng)常碰到的,我們?cè)凇禩TL&CMOS電平》章節(jié)中已經(jīng)對(duì)TTL和COMS電平
    的頭像 發(fā)表于 06-25 14:52 ?4850次閱讀
    <b class='flag-5'>電平</b>設(shè)計(jì)基礎(chǔ):<b class='flag-5'>電平</b><b class='flag-5'>匹配</b>設(shè)計(jì)

    RS-485總線電平異常解決方案解析

    各位工程師是否會(huì)遇到這樣的情況,測(cè)試單個(gè)RS-485設(shè)備數(shù)據(jù)無(wú)異常,但設(shè)備組網(wǎng)后,就出現(xiàn)通訊數(shù)據(jù)異?;蜻B接失敗等情況。出錯(cuò)的原因是什么?本文將從門(mén)限電平為你揭秘RS-485組網(wǎng)異常。RS-48
    的頭像 發(fā)表于 10-12 08:06 ?3487次閱讀
    RS-<b class='flag-5'>485</b><b class='flag-5'>總線</b><b class='flag-5'>電平</b>異常解決方案解析

    rs485總線隔離應(yīng)用與選型指南

    還是不用,由現(xiàn)場(chǎng)人員來(lái)設(shè)定。當(dāng)然,具體怎么區(qū)分第一個(gè)節(jié)點(diǎn)還是最后一個(gè)節(jié)點(diǎn),還得有待現(xiàn)場(chǎng)的專家們來(lái)解答呵。)TVS我們一般選用6.8V的,這個(gè)我們會(huì)在后面進(jìn)一步的講解。   RS-485標(biāo)準(zhǔn)定義信號(hào)閾值的上下限為±200mV。即當(dāng)A-B>200mV時(shí),
    發(fā)表于 07-27 11:08

    RS-485接口的防護(hù)電路設(shè)計(jì)

    發(fā)射器和接收器,信號(hào)傳輸為寬范圍電平-7V~+12V?;赗S-485電性能參數(shù),其典型高浪涌防護(hù)等級(jí)的解決方案為兩極防護(hù),其中第一級(jí)可采用浪拓電路保護(hù)部門(mén)的陶瓷氣體放電管GDT用于旁
    發(fā)表于 11-12 14:36

    嫌布線太麻煩,不妨考慮"RS485總線+無(wú)線+Modbus RTU協(xié)議" ?

    增加了更多的成本。"RS485總線+無(wú)線+Modbus RTU協(xié)議"既兼容了"RS485總線",又兼容了"無(wú)線",還兼容全世界公認(rèn)
    發(fā)表于 02-19 13:41

    RS-485端口通用保護(hù)電路

    如圖所示, 三級(jí)防護(hù)方案提供了最佳的方案。 它使 RS-485收發(fā)器承受更高等級(jí)的防護(hù)。此方案采用氣體放電管作初級(jí)防護(hù),TVS二極管作次級(jí)
    發(fā)表于 06-21 17:19

    RS-485接口電路的硬件設(shè)計(jì)

    1)總線匹配。  總線匹配有兩種方法,一種是加匹配電阻,位于總線兩端的差分端口VA與VB之間應(yīng)
    發(fā)表于 11-21 16:39

    PSM712,RS-485端口EMC防護(hù)專用TVS

    : 400W· 非對(duì)稱斷態(tài)電壓符合RS-485收發(fā)器規(guī)格· 低動(dòng)態(tài)電阻(0.5Ω TYP)提供出色的箝位性能· 75pF(最大)最低電容負(fù)載應(yīng)用:· RS-485· 現(xiàn)場(chǎng)總線· Modbus
    發(fā)表于 11-11 15:40

    RS-485端口EMC防護(hù)方案設(shè)計(jì)詳解

    在工業(yè)、電力、自動(dòng)化及儀器儀表實(shí)際應(yīng)用中,RS-485總線標(biāo)準(zhǔn)是目前業(yè)內(nèi)應(yīng)用最廣泛的物理層總線設(shè)計(jì)標(biāo)準(zhǔn)之一。為了確保數(shù)據(jù)端口能夠在極其惡劣的電磁環(huán)境中正常運(yùn)行,RS-485端口
    發(fā)表于 01-03 17:34

    RS485總線接口常見(jiàn)三種保護(hù)電路

    在實(shí)際的工業(yè)、電力、自動(dòng)化及儀器儀表應(yīng)用中,RS-485總線標(biāo)準(zhǔn)是使用最廣泛的物理層總線設(shè)計(jì)標(biāo)準(zhǔn)之一,由于其會(huì)在惡劣電磁環(huán)境下工作,為了確保這些數(shù)據(jù)端口能夠在最終安裝環(huán)境中正常工作,它們必須符合相關(guān)
    發(fā)表于 02-23 10:10

    RS485 Modbus協(xié)議的硬件電路有哪些

    一、硬件1、傳感器:為液壓傳感器,12vDC,RS485數(shù)據(jù)輸出,采用Modbus協(xié)議通信2、根據(jù)傳感器屬性,電路主要是兩部分,通信和電源(1)485電路:由于
    發(fā)表于 07-26 06:42

    關(guān)于RS-485總線電平異常解決方案解析

    RS-485總線電平異常解決方案解析
    的頭像 發(fā)表于 01-15 17:05 ?1.2w次閱讀

    485總線匹配電阻怎么接

    485總線是一種常用的通信總線標(biāo)準(zhǔn),在工業(yè)現(xiàn)場(chǎng)常被使用于對(duì)遠(yuǎn)程傳感器、控制設(shè)備和其他外圍設(shè)備進(jìn)行數(shù)據(jù)傳輸和通信。為了確保信號(hào)質(zhì)量和抗干擾能力,485
    的頭像 發(fā)表于 12-20 09:44 ?1.4w次閱讀

    LuatOS:485 總線硬件設(shè)計(jì)要點(diǎn)與 exmodbus 庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)

    與 UART 的關(guān)聯(lián)、電平匹配處理及不同防護(hù)等級(jí)的 TVS 器件選型,同時(shí)介紹 LuatOS 輕量化的 exmodbus 擴(kuò)展庫(kù),并給出該
    的頭像 發(fā)表于 03-19 17:57 ?187次閱讀
    LuatOS:<b class='flag-5'>485</b> <b class='flag-5'>總線</b><b class='flag-5'>硬件</b>設(shè)計(jì)要點(diǎn)與 exmodbus <b class='flag-5'>庫(kù)</b>開(kāi)發(fā)實(shí)戰(zhàn)
    慈溪市| 巴林左旗| 辽宁省| 兴宁市| 泗阳县| 彭水| 成都市| 荆州市| 达拉特旗| 碌曲县| 临邑县| 平泉县| 宜都市| 拜城县| 沭阳县| 泾川县| 上饶市| 安宁市| 灵丘县| 乐安县| 丘北县| 滦平县| 全椒县| 壤塘县| 新竹县| 仙居县| 南阳市| 广灵县| 寿宁县| 岳阳县| 石棉县| 海晏县| 白沙| 靖宇县| 蓬莱市| 宁远县| 武威市| 汽车| 长治县| 宁河县| 清水河县|