關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 基于STM32的MIT-BIH心電數據的D/A回放

        基于STM32的MIT-BIH心電數據的D/A回放

        作者: 時間:2012-02-08 來源:網絡 收藏

        D/A系統模塊設計中,共使用了3個端點,分別為端點0,2和3。端點0為USB設備默認的控制端點,采用了控制傳輸方式,主要完成設備的枚舉。端點2、3均為批量傳輸端點,傳輸采用的是批量傳輸方式,分別接收上位機發送來的信號和呼吸信號。定時器是一節拍發生器,作為DAC的外部事件觸發源。定時時鐘的預裝載值和時鐘分頻系數由原數字信號的抽樣頻率來決定。在D/A系統中,使用了兩個通用定時器3,4,分別作為信號和呼吸信號數據DA數模轉換的觸發源。DAC的配置為12位數據右對齊輸入,電壓輸出的雙通道模式。其中,通道1完成信號數據的D/A,通道2完成呼吸信號數據的D/A,選擇定時器作為外部事件觸發源,在一個定時周期內完成一次數據的DA實現。DMA模塊主要是完成數據的轉移,USB模塊接收端點中斷接受的數據,利用DMA方式從端點緩存中送入DAC的DAC_DHRyyD寄存器中,經過相應的移位后,寫入的數據被轉存到DHR1和DHR2寄存器中,隨后通過定時器的外部事件觸發傳輸到DORx寄存器中,在經過時間tsetting后,輸出即有效。在數據傳輸過程中,采用了雙緩沖機制,在RAM中開辟了2個緩存buffer,USB模塊接收數據放在一個buffer中,DMA傳輸即DAC階段,處理的數據是另一個buffer中的數據,這樣,使接收數據和處理數據并行進行,保證了轉換后波形的連續不間斷性。雙緩沖的實現大致如下(以心電信號數據為例):初始化空閑buffer位為buffer1,DMA源初始化配置為buffer1。端點2接收一數據包放入buffer1中,判斷是否為第一次接收數據,如果是第一次接收,改變空閑buffer位為buffer2,并允許下一數據包的接收;如果不是第一次,中斷直接返回。繼續接收第二個數據包,放入buffer2中,判斷是否第一次DMA傳輸,如果是,改變空閑buffer位為buffer1,開啟DMA傳輸,并使能定時器;如果不是,中斷返回。當DMA傳輸完成進入中斷時,首先判斷空閑buffer位,再重新配置DMA,包括DMA源和傳輸數目的改變,最后改變空閑buffer位,并允許端點的繼續接收。心電信號數據接收處理流程圖如圖6所示。對于呼吸信號數據,做同樣的處理。

        本文引用地址:http://www.104case.com/article/161152.htm

        e.jpg



        3 設備驅動和應用程序的設計
        本系統的USB驅動程序采用WDM模型,選用的開發工具是Windows XP DDK(Build 2600),Driver Studio 3.2和VC 6.0。驅動程序開發平臺搭建成功后,根據實際需要,用DriverWorks自帶的DriverWizard生成驅動程序框架和Read,Write函數,在DeviceIoControl函數中添加設備控制程序,完成自定義的功能。
        上位機應用程序是采用VC 6.0創建的一個MFC的多文檔界面應用程序,主要分為數據管理模塊,模塊等基本模塊。Win32應用程序與設備驅動程序之間的通信是通過接口(API)函數來實現的,應用程序不需要為了和USB設備通信去了解復雜的USB協議,把USB接口當做文件來操作,從而輕而易舉的實現USB接口通信。

        4 系統回放結果分析
        按照固件程序的設計寫入USB設備,插入主機并加載相應的驅動程序,打開上位機程序,讀取數據庫中220.dat文件,傳輸到完成D/A,原始心電信號波形與示波器回放波形的比較如圖7所示。

        f.jpg


        D/A模塊較好的完成了回放功能。通過示波器實時分析,回放波形周期及幅度亦滿足要求,即時序性滿足要求。

        5 結語
        心電數據D/A回放的設計,在硬件和固件應用程序兩方面實現了比較完美的結合,對原始數據的D/A回放取得了良好的運行效果。同時主控芯片F103RE內部集成的豐富的功能模塊,降低了開發的難度,也保證了系統的穩定性,使得該回放系統在醫學研究和工業生產中有廣泛的應用前景。


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 随州市| 探索| 肥东县| 吉安市| 连南| 久治县| 桐庐县| 乾安县| 乌兰察布市| 富裕县| 成武县| 永春县| 阿鲁科尔沁旗| 昌黎县| 大冶市| 襄垣县| 格尔木市| 增城市| 南安市| 大埔区| 和平县| 宜兰市| 大英县| 阜康市| 当阳市| 涪陵区| 和硕县| 阳高县| 沂水县| 龙山县| 宜川县| 三河市| 平谷区| 澳门| 衢州市| 乌鲁木齐市| 大丰市| 新巴尔虎左旗| 芜湖市| 隆尧县| 盐源县|