新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于ARM和CPLD的開放式數控系統設計

        基于ARM和CPLD的開放式數控系統設計

        作者: 時間:2010-03-08 來源:網絡 收藏

        外接40 MHz時鐘,程序中使用的所有時序均由該時鐘分頻而得。本系統采用數據采樣法的粗精兩級插補結構,插補周期為8 ms,采樣周期為4 ms。因此中斷程序和精插補程序125 Hz時序運行;數據采樣、故障監測和速度位置控制250 Hz時序運行。
        系統數據傳遞如圖3所示。插補是本系統的一個重要環節,因為插補直接影響系統的實時性、運動控制和加工精度。從圖3可見粗插補計算結果從應用程序傳遞到操作系統內核,再由內核發送到進行精插補運算。由于插補是一項硬實時任務,因此數據傳遞必須實時準確。之間以中斷方式保證通信的實時性。而應用程序和操作系統內核通信的實時性則由操作系統的實時性保證。

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


        2 系統中斷控制
        本系統采用基于數據采樣法的粗精兩級插補結構,插補周期為8 ms,采用中斷方式保證通信的實時性。中斷信號由CPLD每隔8 ms定時產生。當接收到CPLD的中斷信號時,把粗插補計算結果寫入CPLD的固定地址。CPLD從固定地址讀取數據計算脈沖數,輸出脈沖信號,完成運動控制。本系統的中斷控制分成3部分:Windows CE中斷服務、應用程序中斷響應程序和CPLD程序。
        2.1 Windows CE中斷服務
        Windows CE是實時操作系統,其實時性體現在6個方面:(1)具有256個線程優先級;(2)應用程序可以控制提供給每個線程的時間片,計時器精確到1 ms;(3)優先級倒置處理機制;(4)支持嵌套中斷;(5)中斷延遲時間短;(6)更細粒度的內存管理控制[4-5]。Windows CE以上機制特別是中斷體系保證了的實時性。
        Windows CE的中斷體系包括核心態的中斷例程ISR和用戶態的中斷線程IST兩部分。ISR主要響應中斷請求,識別中斷源,給操作系統內核返回相應的中斷標識。ISR具有最高的優先級。本系統采用ISR完成中斷服務。進入ISR以后,系統中所有的同級或下級中斷均被屏蔽。為了不降低系統執行多任務的性能,ISR應非常短小精干,以使其他中斷也能夠獲得及時的服務。
        定制Windows CE中斷服務程序步驟如下:
        (1)在操作系統內核中注冊事件hMotor,用于操作系統和應用程序中斷響應的同步。
        (2)在操作系統內核中注冊插補中斷標識號SYSINTR_PWM_READY。
        (3)調用函數InterruptInitialize,使中斷請求和hMotor事件掛鉤,當接收到中斷請求時操作系統自動將事件置為有信號,退出ISR時將事件置為無信號。
        (4)編寫ISR程序。ISR程序框架如下:
        if(IntPendVal==INTSRC_EINT1)//判斷中斷是否來自CPLD
        {
        s2410INT|=BIT_EINT1;//清除中斷請求
        if(PWM_FINISH==TRUE)
        return(SYSINTR_PWM_READY);
        //向內核返回中斷標識號
        rADDR=*pulse_buf;//向CPLD寫數據
        }
        接收到由CPLD發出的中斷請求,操作系統將調用ISR,并將hMotor事件置為有信號。在ISR中將粗插補計算結果寫入CPLD,并向操作系統內核返回中斷標識號。退出ISR時,操作系統將hMotor事件置為無信號。整個ISR程序非常精短,保證了系統其他程序的正常運行。
        2.2 應用程序中斷響應程序
        應用程序無法直接獲知是否有中斷請求。利用hMotor事件使操作系統中斷服務與應用程序中斷響應程序達到同步。通過調用WaitForSingleObject函數查詢該事件狀態,應用程序可獲知是否有中斷請求并及時響應中斷。中斷響應程序框架結構如下:
        while(!IsEnd)//判斷插補是否結束
        {
        ……//粗插補計算
        WaitForSingleObject(hMotor,INFINITE);//無限期等待
        //hMotor事件狀態變為有信號
        DeviceIoControl();//向操作系統傳遞
        //粗插補計算結果,即位置增量
        }
        插補線程啟動后進行插補計算,調用WaitForSingleObject函數阻塞插補線程,等待hMotor事件狀態變為有信號。當操作系統接收到中斷請求后調度ISR,將事件置為有信號。此時WaitForSingleObject函數被返回,插補線程阻塞狀態解除。通過調用DeviceIoControl函數將插補結果傳遞到驅動層,再由操作系統將數據發送到CPLD。插補運算時間遠小于插補周期,因此插補線程經常處于阻塞狀態。WaitForSingleObject函數雖然會阻塞當前線程,但是不會占用任何CPU資源,因此即使插補線程優先級較高,當其被阻塞時也不會影響其他線程的正常運行。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 泸水县| 娄烦县| 夹江县| 贵阳市| 乌拉特前旗| 客服| 沂南县| 罗江县| 桃园市| 阜宁县| 烟台市| 沅陵县| 宿迁市| 龙泉市| 曲沃县| 河北区| 合山市| 永修县| 抚宁县| 拉萨市| 伊宁市| 张家港市| 襄樊市| 维西| 澄迈县| 延庆县| 蒙城县| 高台县| 松阳县| 奉新县| 麻城市| 筠连县| 潼关县| 临洮县| 武清区| 大同市| 新巴尔虎左旗| 宜君县| 习水县| 淮阳县| 清远市|