李毅銘,杜冬梅
(華北電力大學能源動力與機械工程學院,北京 102206)
振動信號是檢測機械設備的重要技術參數,許多故障都反映在異常的振動信號中[1]。目前利用嵌入式技術對振動信號進行采集的系統都存在一些問題,高端的系統存在結構復雜、操作困難、價格偏高等問題[2],而低端數據采集裝置存在精度不滿足要求,通用性差等問題[3]。
針對這些問題,本文選擇使用STM32F767內置的模數轉換器(A/D),合理配置A/D的性能參數,實現多通道、高精度的數據采集,這不僅有利于降低成本,而且還具有一定實用性[4]。
本文選擇高性能ARM Cortex-M7 32位 RISC 內核的STM32F767作為主控制器,工作頻率高達216 MHz。Cortex-M7內核具有浮點運算單元(Float Point Unit,簡稱FPU),支持ARM雙精度和單精度數據處理指令和數據類型。它還可實現一套完整的數字信號處理 (Digital Signal Processing,簡稱DSP)指令和一個內存保護單元(Memory Protection Unit,簡稱MPU),增強了應用程序的安全性[5]。
對于絕大部分振動信號,10 kHz的最大采樣率就可以滿足實際需求,而更高的采樣頻率一般用在12位以上的A/D中。對于它內置的12位A/D來說,最大轉換速率為2.4 MHz,也就是轉換時間最小為0.41 μs(在A/D時鐘頻率設置為最大的36 MHz,采樣周期設置最小的3個A/D時鐘周期下得到),完全滿足一般情況的數據采集頻率需求。同時每個A/D包含19個復用通道,可測量來自16個外部源、兩個內部源和UBAT通道的信號,在通道數上也完全符合采樣需要。各個通道的A/D轉換還有多個工作模式可供選擇,分別是:單次轉換、連續轉換、掃描轉換和間斷轉換[8]。
A/D的作用是將模擬信號轉化為數字信號。大多數A/D的自身輸入都是來自外部傳感的電壓信號,輸出轉換后的數字信號[9]。本文討論的數據采集方法都基于STM32F767內部自帶的模數轉換器。A/D的關鍵技術參數包括采樣時間、采樣精度、分辨率和轉換速率等。
1.2.1 采樣時間
A/D時序圖如圖1所示。A/D在開始精確轉換之前需要一段穩定時間TSTAB,隨后等待觸發信號,當轉換開啟后,經過總轉換時間,EOC位置1,將轉換結果保存至A/D的數據寄存器中,最后用軟件對EOC位進行清零,等待下一次轉換。

圖1 A/D時序圖
對于A/D內部要轉換的通道來說,首先要確定的就是采樣時間。A/D會在多個fA/D CLK周期內對輸入電壓進行采樣,采樣時間的周期數可以通過修改寄存器的配置位進行修改。它可以被配置為3,15,28,56,84,112,144,480個周期。每個通道均可以使用不同的采樣時間進行采樣[10]。
A/D單個通道的轉換時間:
Tcon=采樣時間+12個周期
(1)
對于配置多通道進行采集的A/D來說,A/D的總轉換時間:
應用HITACHI HI VISON Preirus彩色多普勒超聲診斷儀,高頻探頭頻率5.0~13.0 MHz。患者取仰臥位,頭部后仰或墊高肩部充分暴露頸前區[1]。平靜呼吸,甲狀腺二維超聲掃查發現結節后,首先用二維超聲觀察其形態、大小、邊界、內部回聲、有無鈣化等,然后切換到彈性模式,行甲狀腺超聲彈性成像檢查。顯示結節并盡量固定探頭位置,手持探頭在結節部位做微小運動,使顯示屏壓力指示條的數字控制在3~4[2],并使感興趣區域大于結節的2~3倍[3],用雙幅實時顯示功能動態觀察聲像圖,對甲狀腺結節進行彈性分級。
(2)
式中N——通道數;fA/D CLK——A/D的時鐘頻率,此時鐘來自于經可編程預分頻器分頻的APB2時鐘,fA/D CLK最大配置頻率為36 MHz,超過該頻率就會使采樣數據精度顯著下降。
對于每個要轉換的通道,都需要盡可能讓采樣時間長一點,以保證數據有較高的準確度,但是同時也會降低A/D的轉換速率。尤其在使用多通道進行數據采集時,合理地配置采樣時間成為關鍵。本文選擇將A/D的采樣時間配置為3個周期,最大化A/D的轉換速率,降低A/D的總轉換時間,同時也滿足大多數數據采集場景所需的精度。
1.2.2 采樣精度
STM32F767的A/D輸入范圍UREF≤UIN≤UREF+,UREF的輸入范圍:1.8V~UDDA。UDDA為模擬電源輸入,等于UDD:當全速運行時,2.4 V≤UDDA≤UDD(3.6 V);當低速運行時,1.8V≤UDDA≤UDD(3.6 V)。當設置參考電壓值為3.3 V的情況下,12位A/D的采集精度如用于采集3.3 V電壓,那么理想情況下的識別精度為0.8 mV。
STM32F767有一個內部參考電壓Urefint,相當于標準電壓測點,在內部和A/D 1的通道17相連。也就是說,可以通過這個通道對其余A/D通道采集的值進行漂移校準,但使用內部參考電壓校準就需要多開一路內部A/D 1_IN17。
對于采樣精度為12位的A/D來說:
Uchx=UA/Dhx×Urefint/UADrefint
(3)
式中Uchx——計算后的實際電壓值,V;UA/Dhx——A/D通道采樣值;Urefint=4 095×1.2/3.3=1 489 mV,其中1.2 V是標準電壓測點的電壓值,不隨外部供電電壓變化;UADrefint——A/D 1的第17個通道A/D 1_IN17采集的A/D值。
對于提高穩定性來說,一般分為硬件和軟件兩種方式,硬件上可以在A/D引腳和GND間跨接一個1 μF的電容或者選擇濾波器。軟件的方式是選擇跟自身系統匹配的軟件濾波器。
1.2.3 采樣頻率
本文選擇使用PWM定時器觸發A/D進行采樣,這樣就可以通過控制PWM定時器的觸發頻率來調節所需的AD采樣頻率。對于STM32F767的定時器來說,除了TIM6和TIM7,其他的定時器都可以用來產生脈沖寬度調制(PWM)輸出,其中定時器TIM1和TIM8可以同時產生多達7路的輸出。
定時器的溢出時間:
(4)
式中arr——自動裝載值;psc——分頻系數;fTIMCLK——定時器的輸入時鐘頻率,Hz。
定時器的觸發頻率即為溢出時間的倒數,用來對A/D進行觸發。這樣A/D的采樣頻率就是定時器觸發頻率,要注意A/D的總轉換時間要小于定時器的溢出時間。
直接存儲器訪問直接存儲器存取 (Direct Memory Access,簡稱DMA)傳輸將數據從一個地址空間復制到另一個地址空間,提供在外設和存儲器之間或者存儲器和存儲器之間的高速數據傳輸。CPU作為系統運作的核心有著轉移數據、計算、控制程序轉移等功能。獨立的DMA通道提供了一條數據道路,可以直接將數據A拷貝到B,不經過CPU處理。DMA的作用就是防止當出現大量數據轉移時過度消耗CPU資源,使CPU可以更專注于更加實用的操作、計算、控制等。
DMA傳輸工作的開始,首先需要將總線的權限給予DMA模塊,然后再結束時將總線權限還給CPU。完整的DMA傳輸包括:請求;響應;傳輸;結束。DMA數據傳輸流程如圖2所示。

圖2 DMA數據傳輸過程圖
本文使用的STM32F767模塊包含兩個DMA控制器,共16個數據流(每個DMA控制8個數據流),每一個DMA控制器都用于管理一個或者多個外設的存儲器訪問請求。DMA的每個數據流總共可以有多達8個通道(或請求)。每個數據流通道還配有一個仲裁器,用于處理DMA不同通道間的優先級。在每次傳輸中還可以配置獨占尺寸,設置獨占尺寸的通道優先級最高,并且在傳輸完獨占尺寸規定的數據后,傳輸才會停止,轉向下一個優先級通道的傳輸。
DMA對于數據傳輸,需要確定的4個核心參數是:數據源地址、數據傳輸位置的目標地址、傳輸的數據量和數據傳輸的次數。
當用戶將參數配置好,主要對源地址、目標地址、傳輸數據量進行配置,DMA控制器就會啟動傳輸,當完成所需的數據傳輸量,就結束DMA傳輸,并對外設接口發出中斷。當DMA設置為循環傳輸模式時,DMA每次到達傳輸終點都會重新開啟DMA傳輸。
本文的主要工作為數據采集和數據傳輸。首先應該完成數據采集前的驅動初始化,包括A/D初始化、DMA初始化和系統初始化。A/D的初始化是采集過程中至關重要的一步。本文啟用了4個A/D轉換通道,轉換后的數據存放在專屬寄存器A/D_DR中,每次轉換之前都要進行初始化。而DMA初始化是因為要將前面寄存器中保存的轉換數據搬運至內存中,這樣提高了數據的傳輸效率。系統初始化包括系統時鐘初始化、中斷源配置、GPIO端口配置和定時器初始化及其參數配置。數據采集過程是系統啟動,并進入初始化過程,當完成初始化后,A/D開始進入數據采集過程,然后通過DMA搬運數據,不斷循環,直至系統發出停止命令結束。數據采集流程圖如圖3所示。

圖3 數據采集流程圖
為了檢驗經過配置后STM32F767內置的A/D多通道采集穩定性和測量精度,本文使用信號發生器GFG-8019G作為信號源,對其發出的符合采集量程的正弦波進行采集測試。正弦波峰值測試值結果如表1所示。表1中的信號頻率為50 Hz,采樣頻率為800 Hz,并通過示波器DS1102C進行同步采集進行結果比較。比較結果表明,STM32F767的內置A/D在合理配置的情況下可以進行多路數據采集,并滿足一定的精度要求。 電壓峰值誤差在2%以內。

表1 正弦波峰值測試表
當使用A/D的多個通道進行數據采集時,需配置掃描模式,即多個通道按照配置的順序進行循環采集,同時相鄰通道間還存在一定的信號串擾,這些因素使得相鄰進行采集的通道間不可避免地存在一定延遲,造成一定誤差,影響采集的同步性。這些差異會增大后期信號處理的誤差,因此考察相鄰采集通道的同步性是個非常重要的問題。
為了驗證經過配置后A/D多個通道采集的同步性,本文使用STM32F767中的A/D 3中的通道4和通道5,使用信號發生器GFG-8019G作為信號源,對其發出的符合采集量程的正弦波進行采集同步性測試。
測試一個周期內兩相鄰通道的采集誤差如表2所示。信號頻率設置為100 Hz,采樣頻率設置為1 600 Hz,偏置電壓為0.5 V。測試結果表明,STM32F767自帶的A/D在合理配置的情況下,相鄰通道的延遲誤差較小,同步性也可以得到保證。

表2 相鄰通道電壓值對比表
針對數據采集系統中對于高精度、高速率的要求,選擇使用STM32F767為主控芯片,利用自帶的A/D進行數據采集。最后驗證了其4通道同步模數轉換的能力,并且具有一定靈活性,同時可以對其通道數、采樣時間、采樣頻率進行更改。經過試驗測試,電壓峰值誤差小于2%,頻率測試精度和多通道采集的同步性也滿足絕大部分采集過程中的要求。