董 瑩
(青海民族大學, 青海 西寧 810007)
ARM處理器以其體積小、低耗能、成本低、性能高等優(yōu)勢廣泛占領了在嵌入式系統(tǒng)領域。μC/OS-II 提供了如郵箱、隊列、信號量、固定大小的內存分區(qū)等多項系統(tǒng)服務并在醫(yī)療設備領域、發(fā)動機控制領域、網(wǎng)絡設備領域、自動提款機設置領域及工業(yè)機器人設計領域等諸多生活以及工業(yè)領域獲得了廣泛的應用。王燕東等人(2016)提出了三路步進電機控制系統(tǒng)的設計思路,在提高基礎系統(tǒng)的實用性以及后期拓展功能的前提之下,完善了系統(tǒng)的實時性,提高了系統(tǒng)的可控性以及穩(wěn)定性[1]。常博博等人(2017)介紹了控制系統(tǒng)的發(fā)展歷程,針對不同的控制對象,將ARM技術應用于不同控制系統(tǒng)中,并提出了SoC功能的控制系統(tǒng)實際工作情況,并對芯片處理器的優(yōu)勢做出簡單介紹[2]。張金玲等人(2017)將ARM技術應用于傳感器控制系統(tǒng)中,設計了無刷直流電機控制系統(tǒng),從而完成了控制系統(tǒng)實際運行過程中對于機器的轉速以及電流調控[3]。綜上所示,目前ARM技術在步進電機控制中的設計研究目前處于空白狀態(tài),筆者主要研究ARM處理器及其編程模型,及嵌入式實時操作系統(tǒng)μC/OS-II的內核結構,實現(xiàn)μC/OS-II在ARM上的移植,并在此平臺上進行步進電機控制程序設計,控制步進電機啟停、正反轉及加減速。
μC/OS-II在應用于某一類特定處理器時的移植工作將工作重點設置在多任務切換上,這是由于計算機設備的讀寫寄存器是不能采用C語言完成代碼保存與恢復工作的,也有一部分計算機處理系統(tǒng)只允許利用特定的處理器匯編語言來恢復處理器現(xiàn)場,在這兩類情況發(fā)生時,需要采取μC/OS-II移植到ARM處理器的方式來解決問題,這一處理方式只需要修改三個與體系結構相關的數(shù)據(jù)文件即可達到效果。數(shù)據(jù)文件是來定義堆棧單位的,步進定義了需要保護以及恢復的數(shù)據(jù)類型,還提出了文件需要與寄存器長度一致的要求。處理器的堆棧增長方式有兩種:從上向下和從下向上。此處選擇1表示從上向下增長(高地址到低地址),反之0表示從下向上增長。
OS_CPU.c的項目移植工作由三個工作步驟組成,第一步需要完成任務堆棧初始化,這一步主要是通過調用OSTaskCreate()或OSTaskCreateExt()這兩個具體函數(shù)來完成。第二部需要利用ARM體系結構,保存任務堆??臻g的初始化數(shù)據(jù)。第三步,在初始化工作結束后,需要將OSTaskStkInit()函數(shù)撤回到新的堆棧任務中,并完成任務的保存。OSTaskStkInit()初始化后的堆棧內容如圖1所示。
圖1 OSTaskStkInit()初始化后的堆棧內容關系
OS_CPU_A.s的項目移植共分為以下幾步:首先需要確定時鐘節(jié)拍中斷服務函數(shù),這一函數(shù)主要是用來確定系統(tǒng)的額外開銷工作的,時鐘節(jié)拍率與系統(tǒng)的額外開銷呈正比關系。本次測試所設計的系統(tǒng)采用S3C2410的timer 0作為時鐘節(jié)拍源。其次,需要進行OSTimeTick()函數(shù)的調用,如果在系統(tǒng)工作的過程中有優(yōu)先級更高的任務插入,則需要中斷嵌套的最后一層。最后需要退出臨界區(qū)域,而宏ARMDisableInt需要在系統(tǒng)進入臨界狀態(tài)之前關閉中斷狀態(tài),在系統(tǒng)退出臨界區(qū)時重新恢復中斷狀態(tài)。
設計選用二相四拍步進電機系統(tǒng),通過使用控制換相順序的方式來完成對步進電機的控制,由于所使用的S3C2410 的GPIO驅動能力有限,所以使用ULN2003達林頓集成驅動芯片來驅動步進電機。ULN2003是高耐壓、大電流、內部由七個硅NPN達林頓管組成的驅動芯片,其每一對達林頓都串聯(lián)一個2.7KΩ的基極電阻。驅動系統(tǒng)要求信號必須為脈沖信號,沒有脈沖的時候,步進電機靜止,如果加入適當?shù)拿}沖信號,驅動系統(tǒng)就會以一定的角度轉動,系統(tǒng)的轉動速度與釋放的脈沖的頻率呈正比。ULN2003內部結構圖如圖2所示。
圖2 ULN2003內部結構圖
ULN2003是大電流驅動陣列,多用于單片機、智能儀表、PLC、數(shù)字量輸出等控制電路中,可直接驅動繼電器等負載。ULN2003芯片內部結構及引腳如圖3所示。系統(tǒng)中的步進電機的四相(實際工作模式為二相四拍)由0x28000006的bit0~bit3控制,bit0對應于MOTOR_A,bit1對應于MOTOR_B,bit2對應于MOTOR_C,bit3對應于MOTOR_D。通過編制脈沖分配控制步進電機。
圖3 ULN2003芯片引腳
系統(tǒng)在μC/OS-II平臺上,設計步進電機的控制程序,能夠控制步進電機轉動和停止、電機正反轉和電機轉速。
1)步進電機使能控制函數(shù),啟動或停止步進電機運行。其參數(shù)可以為STEP_ MOTOR_ ENABLE或STEP_MOTOR_DISABLE。
2)步進電機正反轉實現(xiàn)。系統(tǒng)中使用的步進電機工作模式為二相四拍。采用整步模式,該模式下的步距角為1.8°,正轉相序為:0101-1001-1010-0110-0101,則反轉相序就為:0101-0110-1010-1001-0101。
3)步進電機轉速控制。設置步進電機轉速,單位為每步l0ms,值越小,速度越快。
由主函數(shù)Main()建立兩個任務TaskSTEP和TaskSEG,優(yōu)先級分別為5和13。從串口打印輸出任務運行的信息。TaskSTEP任務輸出提示信息,控制步進電機的起停、正反轉和加減速。TaskSEG任務輸出程序運行時的信息,同時控制數(shù)碼管。系統(tǒng)主函數(shù)Main,用來實現(xiàn)目標板的初始化,操作系統(tǒng)的初始化,建立任務等,OSStart()函數(shù)是操作系統(tǒng)啟動函數(shù),該函數(shù)永遠不會返回,在調用OSStart()之前必須先調用OSInit()函數(shù)。高優(yōu)先級的函數(shù)TaskSTEP(),用來啟動時鐘節(jié)拍定時器,開始多任務調度,從串口打印輸出任務運行的信息,初始化步進電機,開始啟動步進電機,根據(jù)按鍵來控制步進電機轉動和停止、電機正反轉和電機轉速。
為實現(xiàn)嵌入式實時操作系統(tǒng)μC/OS-II的移植,通過修改三個和體系結構相關的文件,使得μC/OS-II成功移植到μC/OS-II到S3C2410處理器上。在研究中,通過對ARM及S3C2410處理器、系統(tǒng)硬件模塊、系統(tǒng)硬件資源分配以及步進電機的研究,完成硬件系統(tǒng)的設計。完成了步進電機,掃描鍵盤電路的設計。軟件部分,完成了電機模塊、鍵盤模塊、數(shù)碼管模塊功能實現(xiàn)的程序設計。這樣移植就成功了,并控制步進電機啟停、正反轉以及加減速,完成了步進電機控制系統(tǒng)設計。