當(dāng)前位置:首頁 > 工業(yè)控制 > 電子設(shè)計自動化

摘 要: 目前大多伺服控制系統(tǒng)依賴計算機實現(xiàn),系統(tǒng)體積功耗大、成本高。針對此問題,以ARM9 S3C2440芯片和CPLD EPM570T144芯片為硬件平臺,在嵌入式Linux操作系統(tǒng)下設(shè)計了直流伺服控制系統(tǒng)。ARM實現(xiàn)控制算法,得出控制量給CPLD ,CPLD主要用作控制接口擴展和信號處理。詳細介紹了Linux設(shè)備驅(qū)動設(shè)計和伺服控制應(yīng)用程序設(shè)計。實驗結(jié)果證明,系統(tǒng)能夠?qū)崿F(xiàn)等速跟蹤、位置跟蹤和正弦跟蹤等控制功能,并能實現(xiàn)復(fù)雜控制算法,以滿足控制系統(tǒng)實時性和高速性要求。
關(guān)鍵詞: ARM9;嵌入式Linux;CPLD;Linux設(shè)備驅(qū)動;伺服控制

隨著數(shù)字信息技術(shù)的不斷發(fā)展,人們對伺服控制系統(tǒng)的實時性、穩(wěn)定性和復(fù)雜性的要求越來越高,單靠順序結(jié)構(gòu)的軟件設(shè)計已經(jīng)不容易滿足上述要求。目前很多伺服控制系統(tǒng)的控制器采用PC/104結(jié)構(gòu)或依賴上位計算機,根據(jù)實際的控制系統(tǒng)需要擴展相應(yīng)的控制電路,使得系統(tǒng)體積大、成本高、可靠性不易保證,且用戶交互性不好。嵌入式Linux操作系統(tǒng)由于具有代碼開源、可移植性、軟硬件可裁剪性、資源豐富及支持多種硬件平臺和接口等特點,并且從2.6版本以后的Linux實時性有了很大的提高,正被越來越多地應(yīng)用于伺服控制系統(tǒng)中。通過嵌入式Linux操作系統(tǒng)對控制系統(tǒng)的軟硬件資源進行分配、調(diào)度、控制和協(xié)調(diào),能夠充分發(fā)揮控制系統(tǒng)的性能。ARM處理器以其體積小、低功耗、低成本、高性能、文檔豐富及嵌入式軟件多等優(yōu)點而得到廣泛的應(yīng)用。因此,本文以ARM9和CPLD為硬件平臺,在嵌入式Linux操作系統(tǒng)下設(shè)計了直流伺服控制系統(tǒng)。
1 硬件平臺
系統(tǒng)原理框圖[1]如圖1所示。系統(tǒng)以ARM作為主控芯片,主要負責(zé)運行操作系統(tǒng)并實現(xiàn)控制算法、人機交互和多機通信等。CPLD EPM570T144主要負責(zé)從ARM接收數(shù)據(jù),產(chǎn)生相應(yīng)的PWM波;接收編碼器輸出信號,并對其進行處理,得到編碼器的值,將其送給ARM,從而實現(xiàn)電機的閉環(huán)控制。CPLD和ARM之間通過地址總線(13根)、數(shù)據(jù)總線(16根)、控制總線(片選、讀寫使能信號等)與GPIO口(作為外部中斷使用)連接,即CPLD類似于ARM的一個外部存儲器(CPLD掛接在ARM的bank1存儲空間上,地址空間為0x08000000~0x10000000),ARM和CPLD的數(shù)據(jù)交換類似于對存儲器的讀寫操作。這種總線方式擴展,使得系統(tǒng)數(shù)據(jù)交換快速、操作簡單??刂瓢逋ㄟ^JTAG、UART、USB和網(wǎng)口與上位機連接,在目標(biāo)板和上位機之間建立交叉開發(fā)環(huán)境,可在控制板和上位機之間實現(xiàn)程序下載調(diào)試、文件傳輸和通信等,便于系統(tǒng)軟件開發(fā)和調(diào)試。

2 CPLD程序設(shè)計
CPLD程序分為電機辨向、四倍頻、編碼器脈沖計數(shù)、PWM波生成和總線數(shù)據(jù)讀寫5個模塊,如圖2所示。采用VHDL語言,依據(jù)自底向上設(shè)計的方法,以便于程序開發(fā)和移植。

采用增量式編碼器,需對編碼器輸出的ABZ碼進行處理[2],經(jīng)過辨向、倍頻、計數(shù)后得到編碼器值。ARM與CPLD之間通過雙向總線交換數(shù)據(jù),CPLD讀取ARM寫入數(shù)據(jù)總線的數(shù)據(jù),產(chǎn)生對應(yīng)的PWM波。當(dāng)CPLD中的編碼器值可讀后,CPLD采用中斷方式通知ARM,然后將編碼器值寫到數(shù)據(jù)總線上供ARM讀取。由于CPLD與ARM的其他外設(shè)共用數(shù)據(jù)總線,所以在CPLD對總線進行操作時要特別注意,除了CPLD往總線上寫數(shù)據(jù)外,其他時刻都應(yīng)該將總線置為高阻態(tài),以讓出總線的使用權(quán),否則其他外設(shè)(如網(wǎng)口、ADC接口等)會因CPLD一直占用總線而不能正常工作。
CPLD應(yīng)用計數(shù)法產(chǎn)生PWM波[3],CPLD時鐘頻率為100 MHz,設(shè)置PWM總計數(shù)值為8 000。CPLD根據(jù)ARM給定的0~8 000的計數(shù)值對時鐘計數(shù),產(chǎn)生兩路反相的PWM波。為防止功率放大器的H橋同一側(cè)上下同時導(dǎo)通,一般設(shè)置有3~5 μs的死區(qū),本設(shè)計中設(shè)置為5 μs的死區(qū)。
3 設(shè)備驅(qū)動設(shè)計
3.1 設(shè)備驅(qū)動簡介
設(shè)備驅(qū)動是連接應(yīng)用程序與硬件設(shè)備的橋梁,驅(qū)動程序為應(yīng)用程序提供了接口函數(shù),用戶在應(yīng)用程序中調(diào)用相應(yīng)的接口函數(shù)便可實現(xiàn)對硬件設(shè)備的操作,因此,驅(qū)動程序的開發(fā)是嵌入式系統(tǒng)開發(fā)的關(guān)鍵環(huán)節(jié)。Linux設(shè)備驅(qū)動分為字符設(shè)備驅(qū)動、塊設(shè)備驅(qū)動和網(wǎng)絡(luò)設(shè)備驅(qū)動[4]。本文中控制板上移植了Linux2.6操作系統(tǒng),該操作系統(tǒng)下需設(shè)計ARM讀寫CPLD的數(shù)據(jù)及對CPLD產(chǎn)生的中斷信號響應(yīng)的驅(qū)動,這一要求采用字符設(shè)備驅(qū)動來實現(xiàn)。應(yīng)用程序通過系統(tǒng)調(diào)用對設(shè)備文件進行諸如read、write等操作時,系統(tǒng)調(diào)用通過設(shè)備文件的主設(shè)備號找到相應(yīng)的設(shè)備驅(qū)動程序,然后讀取設(shè)備驅(qū)動程序中初始化的file_operations結(jié)構(gòu)體,獲取相應(yīng)操作(read/write等)對應(yīng)的函數(shù)指針,接著把控制權(quán)交給該函數(shù)。因此,編寫設(shè)備驅(qū)動程序的主要工作就是編寫這些文件操作的接口函數(shù),并填充file_operations的各個域。
3.2 設(shè)備驅(qū)動程序設(shè)計
為便于開發(fā)和調(diào)試,設(shè)備驅(qū)動使用模塊的方式動態(tài)加載到內(nèi)核中去。加載模塊的方式與以往的應(yīng)用程序開發(fā)有很大的不同。以往在開發(fā)應(yīng)用程序時都有一個main()函數(shù)作為程序的入口點,而在驅(qū)動開發(fā)時卻沒有main()函數(shù),模塊在調(diào)用insmod命令時被加載,此時的入口點為module_init()函數(shù),在該函數(shù)中完成設(shè)備的注冊、設(shè)備文件的創(chuàng)建和相關(guān)內(nèi)存及寄存器的地址映射。同樣,模塊在調(diào)用rmmod命令時被卸載,此時的入口點為module_exit()函數(shù),在該函數(shù)中將不用的資源返還給操作系統(tǒng),把注冊的設(shè)備、創(chuàng)建的設(shè)備文件及IO內(nèi)存映射等注銷掉。在設(shè)備完成注冊和加載之后,用戶的應(yīng)用程序就可以對該設(shè)備進行一定的操作,如read、write等。而驅(qū)動就是用于實現(xiàn)這些操作,在用戶應(yīng)用程序調(diào)用相應(yīng)入口函數(shù)時執(zhí)行相關(guān)的操作,module_init()入口點函數(shù)則不需要完成其他如read、wirte之類的功能。驅(qū)動程序需要定義和實現(xiàn)open、read、write等函數(shù),并填充到file_operations結(jié)構(gòu)中,file_operations結(jié)構(gòu)把應(yīng)用程序中的系統(tǒng)調(diào)用與驅(qū)動中對應(yīng)的函數(shù)聯(lián)系在一起。file_operations結(jié)構(gòu)體如下所示:
static struct file_operations cpld_drv_fops = {
.owner = THIS_MODULE,
.write = cpld_drv_write,
.read = cpld_drv_read,
.open = cpld_drv_open,
.release = cpld_drv_close,
.fasync = cpld_drv_fasync,
};
其中,write()函數(shù)實現(xiàn)向CPLD中寫入數(shù)據(jù),read()函數(shù)實現(xiàn)ARM從CPLD讀取數(shù)據(jù)。設(shè)備驅(qū)動運行在內(nèi)核空間,而應(yīng)用程序運行在用戶空間,設(shè)備驅(qū)動程序不能直接訪問用戶空間的地址,在read()和write()函數(shù)中分別調(diào)用內(nèi)核函數(shù)copy_to_user()和copy_from_user()實現(xiàn)數(shù)據(jù)的轉(zhuǎn)移。read函數(shù)實現(xiàn)讀取CPLD中的編碼器值,write函數(shù)實現(xiàn)將產(chǎn)生PWM波的計數(shù)值寫入CPLD中,這兩個函數(shù)實現(xiàn)了內(nèi)核空間與用戶空間的數(shù)據(jù)交換。從驅(qū)動程序結(jié)構(gòu)看,驅(qū)動程序由三部分組成:結(jié)構(gòu)體struct file_operations及其成員函數(shù)的實現(xiàn)、設(shè)備初始化module_init()和設(shè)備注銷module_exit()。
讀寫CPLD需要對內(nèi)存進行讀寫操作[5]。CPLD產(chǎn)生的讀中斷信號連接到ARM的GPF1口,CPLD的使能信號由ARM的GPF0產(chǎn)生,因此需要配置相應(yīng)的寄存器。驅(qū)動程序中需要對內(nèi)存和寄存器進行操作,本操作系統(tǒng)下不能直接對內(nèi)存和寄存器的物理地址進行操作,需先將相應(yīng)的內(nèi)存和寄存器的物理地址映射到內(nèi)核的虛擬地址空間,通過對映射后的虛擬地址進行操作實現(xiàn)對寄存器和內(nèi)存的操作。
ARM對CPLD的讀操作采用異步通知和內(nèi)核中斷方式[5]實現(xiàn),這樣可減少系統(tǒng)開支。首先在驅(qū)動的open()函數(shù)中調(diào)用request_irq()函數(shù)注冊內(nèi)核中斷,并在內(nèi)核中實現(xiàn)中斷處理函數(shù),在內(nèi)核中斷處理函數(shù)中調(diào)用kill_fasyn()函數(shù)給指定的應(yīng)用程序發(fā)送信號,通知應(yīng)用程序CPLD中的編碼器值可讀。當(dāng)CPLD無可讀中斷產(chǎn)生時,將read()函數(shù)放入等待隊列,主程序一直處于睡眠狀態(tài),而不是應(yīng)用程序主動去調(diào)用read()函數(shù)來等待中斷的產(chǎn)生,即采用異步通知方式,調(diào)用內(nèi)核中的fasync_helper()函數(shù)來實現(xiàn)。當(dāng)CPLD有可讀中斷產(chǎn)生時,在中斷處理函數(shù)中通過kill_fasync()函數(shù),向進程發(fā)送信號SIGIO,觸發(fā)應(yīng)用程序中signal聲明的異步觸發(fā)函數(shù),使用POLL_IN表明有數(shù)值可以讀取。另外,要注意,在進入中斷服務(wù)程序后,首先通過中斷自旋鎖spin_lock_irq()關(guān)閉所有中斷,以防止其他中斷源中斷kill_fasync的工作,在中斷服務(wù)程序結(jié)束時,再通過spin_unlock_irq()打開中斷。中斷處理函數(shù)部分代碼如下:
spinlock_t lock;
static irqreturn_t eint1_irq(int irq, void *dev_id)
//中斷服務(wù)程序
{
spin_lock_irq(&lock);//關(guān)閉中斷
kill_fasync (&eint1_async, SIGIO, POLL_IN);
//產(chǎn)生中斷后,驅(qū)動向應(yīng)用程序發(fā)送數(shù)據(jù)可讀信號
spin_unlock_irq(&lock);//開中斷
return IRQ_RETVAL(IRQ_HANDLED);
}
4 應(yīng)用程序設(shè)計

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉