新聞動(dòng)態(tài)???News
聯(lián)系我們???Contact

如何通過(guò)單片機串口輸出模擬量?

2024/4/28 14:42:11??????點(diǎn)擊:

    一、前言

    如果在電子線(xiàn)路設計中,碰到一個(gè)情況,那就是,單片機沒(méi)有DAC資源,也沒(méi)有多余的 PWM 端口可以使用。只剩下一個(gè) 串口還能用。那么如何通過(guò)該端口輸出模擬電壓呢?

    利用單片機的端口,輸出一個(gè)占空比可以調節的方波信號,經(jīng)過(guò)RC低通濾波器,去除其中的交流分量之后,便可以輸出方波信號中的直流信號。那么就剩下一個(gè)問(wèn)題了,如何應用 UART 輸出一個(gè)高電平占空比可以改變的方波信號呢?

    單片機的串口發(fā)送一個(gè)字節的信號波形中,包括一個(gè)bit 的起始位,一個(gè)bit 的停止位。它們分別是0 和 1,這是無(wú)法改變的。中間八個(gè)bit的數據位是可以改變的。比如發(fā)送0x44,其中就會(huì )包含有兩位高電平。這樣就有了8個(gè)可以被控制的高低電平的數據位。那么這就可以實(shí)現 3bit 位的 DAC輸出了。如果想實(shí)現 8bit 的 DAC輸出。則需要 256個(gè)可以被控制的數據位。這樣只要將連續32個(gè)發(fā)送字節合在一起,變可以形成256位可以控制高低電平的信號波形。從而實(shí)現 8bit 的 DAC 輸出了。下面通過(guò)單片機測試一下這種串口輸出模擬量的性能。

    二、測試電路

    設計基于STM32F103的測試電路板。這顆芯片我手邊有很多,所以選擇它進(jìn)行實(shí)驗。利用它的 串口2 進(jìn)行測試。串口1用于程序的下載。使用RC低通濾波器對 TXD2信號進(jìn)行濾波。實(shí)際上 RXD2 是沒(méi)有使用的。另外,還將兩路ADC引導端口。這樣,可以利用ADC對外邊送入的信號進(jìn)行采集之后,再從 TXD2 送出,驗證一下對音頻信號的采集與合成的功能。布置單面測試電路板。其中包括一個(gè)飛線(xiàn),使用 0 歐姆電阻進(jìn)行跳線(xiàn)。

    一分鐘之后獲得了兩塊測試PCB電路板,其中有一塊有點(diǎn)過(guò)腐蝕。使用另外一塊比較正常的進(jìn)行測試。

    接下來(lái),焊接電路,放置在面包板上進(jìn)行測試,面包板直接給測試電路提供 3.3V的工作電源,程序通過(guò)探針夾子進(jìn)行下載。

    三、軟件測試

    設置單片機的 UART2 的基本參數。輸出波特率為 1MHz。這樣可以提高輸出信號的更新率。通過(guò)示波器可以測量到輸出信號 每一位的時(shí)間 為1微秒,對應 1MHz的波特率。啟動(dòng)DMA輸出模式,UART2 便可以通過(guò)DMA持續發(fā)送內存中 32 個(gè)字節內容。


    將32個(gè)字節設置為0,輸出的電壓波形,經(jīng)過(guò)濾波之后測得的直流電壓為 0.326V。其中看到的脈沖是每個(gè)字節的停止位對應的高電平脈沖。設置32個(gè)字節都為 0xff,看到的低脈沖是每個(gè)字節的起始位。讀取的濾波后的直流電壓為 2.9V。設置32個(gè)字節為 0x55。此時(shí)出現正負交替的脈沖波形,濾波之后的直流電壓為 1.61V。

    下面分別設置32個(gè)字節中,高電平位數從0變化到255,測量濾波之后的輸出直流電壓??梢钥吹诫S著(zhù)位數的增加,輸出直流電壓線(xiàn)性上升。由于串口發(fā)送字節存在著(zhù)起始位和停止位,所以對應的直流信號不是從零開(kāi)始,最高電平也不是輸出信號的最高值。

    設置輸出DMA中的32個(gè)字節的 1 的位數按照正弦波變化,串口信號濾波之后輸出完美的正弦波形。設置輸出數據遞增,濾波后的波形呈現鋸齒波形。在下降沿出現緩變,這是因為輸出RC低通濾波引起的。這是輸出高低電平的情況,RC低通濾波在上升和下降沿都引起緩變。


    四、總結

    本文測試了利用單片機串口輸出PWM波形,然后通過(guò)低通濾波形成直流電壓。利用這種方式,的確可以在特殊的情況下,給單片機產(chǎn)生一個(gè)DAC的端口。