背景
很多傳感器現(xiàn)在都做成了串口模塊,如激光測(cè)距傳感器TOF050,在開發(fā)時(shí)使用串口功能模塊不僅大大加快了我們的開發(fā)進(jìn)度,還能降低功能模塊直接的耦合度,專業(yè)是功能交給專業(yè)的模塊做,也能保證質(zhì)量。圖:TOF050激光測(cè)距模塊
以TOF050模塊為例,當(dāng)我們同時(shí)需要接4個(gè)激光測(cè)距模塊時(shí),顯然需要使用4個(gè)UART串口,分別讀取距離值,這限制了我們可以外接的模塊數(shù)量。
基于modbus協(xié)議,對(duì)UART串口進(jìn)行改造,就可以實(shí)現(xiàn)單個(gè)串口同時(shí)外接多個(gè)UART設(shè)備,互不干擾。
MODBUS協(xié)議介紹
modbus介紹可以參考如下:https://cloud.tencent.com/developer/article/1540241
簡(jiǎn)而言之,在串口中使用modbus協(xié)議,主機(jī)需要先發(fā)送要讀取的設(shè)備編號(hào),相應(yīng)設(shè)備編號(hào)的設(shè)備回傳主機(jī)要讀取的數(shù)據(jù),而不符合該設(shè)備編號(hào)的設(shè)備保持靜默狀態(tài)。在主設(shè)備讀取從設(shè)備時(shí),遵循下面的通信協(xié)議:
UART接口改一對(duì)多
參考如下鏈接:https://blog.csdn.net/Ajisa_i/article/details/124731439
UART為點(diǎn)對(duì)點(diǎn)通信,直接將多個(gè)從機(jī)的TX線接到主機(jī)的RX上,是不能通信的。原因如下:
- 主機(jī)發(fā)送信息: 當(dāng)主機(jī)發(fā)送信息時(shí),由于主機(jī)TX上接了多個(gè)從機(jī)RX,每個(gè)RX都處于接收狀態(tài),因此都可以正常接收到TX發(fā)送的信息。
- 從機(jī)發(fā)送信息: 當(dāng)從機(jī)發(fā)送信息時(shí),由于多個(gè)從機(jī)的TX連在了一起,當(dāng)其中一個(gè)從機(jī)TX發(fā)送信息時(shí),另一個(gè)從機(jī)的TX沒發(fā)送信息,沒發(fā)送信息的從機(jī)TX為空閑狀態(tài)處于高電平,會(huì)影響發(fā)送信息的從機(jī),導(dǎo)致從機(jī)TX無(wú)法發(fā)送信息到主機(jī)的RX。
因此需要做如下改造:
這樣改造后的原理是:
- 當(dāng)從機(jī)都不發(fā)送信息時(shí),從機(jī)的TX端都為高電平,主機(jī)的RX端為弱上拉,因此主機(jī)RX處于等待接收狀態(tài)。
- 當(dāng)從機(jī)1的TX發(fā)送信息時(shí),從機(jī)1的TX會(huì)首先發(fā)送一個(gè)低電平起始位,由于從機(jī)1的二極管上端RX為高電平,下端從機(jī)1的TX發(fā)送了一個(gè)低電平的起始位,因此二極管導(dǎo)通,TX端電壓為0V,則主機(jī)RX端收到的電壓為0V加二極管壓降0.26V。因此主機(jī)RX可以正確收到低電平信號(hào)。當(dāng)從機(jī)1的TX發(fā)送高電平時(shí),由于主機(jī)RX存在弱上拉,因此二極管不導(dǎo)通時(shí),RX端會(huì)收到高電平。
注意注意注意:
上拉電阻1K必不可少,如果不上拉,115200波特率時(shí)RX總線上波形如下:
加上1K上拉電阻之后,115200波特率時(shí),總線上電平如下:
這樣,結(jié)合MODBUS協(xié)議,從機(jī)同時(shí)只會(huì)有1個(gè)在發(fā)送數(shù)據(jù),不會(huì)互相干擾。
其中,二極管的選型較為關(guān)鍵,如果選擇的二極管壓降較大,如為1.4V,則從機(jī)TX發(fā)送低電平時(shí),主機(jī)RX收到的電壓為1.4V,因此不能正常通信。二極管的速度也應(yīng)當(dāng)足夠快,才能滿足通信要求。
結(jié)合以上要求,二極管可以選用肖特基二極管SS14,其壓降只有0.26V,響應(yīng)速度10ns,實(shí)際測(cè)試,可以支持2Mbps的串口波特率。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-720873.html
參考鏈接
MODBUS協(xié)議介紹
UART改一對(duì)多文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-720873.html
到了這里,關(guān)于單片機(jī)UART一對(duì)多:同時(shí)讀取多個(gè)傳感器基于modbus協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!