基于ARM44B0x的信號(hào)發(fā)射機(jī)控制器設(shè)計(jì)
[摘要]文章選用了S3C44B0x處理器作為控制器內(nèi)核,開(kāi)發(fā)完成了約定鍵盤(pán)、菜單操作及LCD顯示程序數(shù)據(jù)采集及處理實(shí)現(xiàn)軟件PC通訊協(xié)議及實(shí)現(xiàn)軟件,在其控制下完成數(shù)據(jù)地采集和處理并實(shí)現(xiàn)對(duì)廣播發(fā)射機(jī)的工作狀態(tài)進(jìn)行監(jiān)控,同時(shí)具有人機(jī)交互的功能。
關(guān)鍵詞:嵌入式;S3C44B0x ;人機(jī)接口;通信
1.前言
船舶上使用的信號(hào)發(fā)射機(jī)是連續(xù)工作的,所以需要一個(gè)控制器對(duì)發(fā)射機(jī)的工作狀態(tài)進(jìn)行監(jiān)控,常見(jiàn)的是用單片機(jī)作控制器的內(nèi)核,但由于32位微處理器具有更好的精度和可靠性且低成本低功耗,所以在工業(yè)控制領(lǐng)域的應(yīng)用日益廣泛。采用嵌入式的32位微處理ARMS3C44B0x作為控制器的內(nèi)核,設(shè)計(jì)的控制器將比用單片機(jī)作內(nèi)核的處理器具有更全面的功能和更好的使用性能。
發(fā)射機(jī)控制器的主要功能是對(duì)多路模擬量和開(kāi)關(guān)量的數(shù)據(jù)采集和處理監(jiān)控發(fā)射機(jī)的工作狀態(tài);控制器控制發(fā)射機(jī)同時(shí)控制器又受上位機(jī)的控制,它要能在任意時(shí)刻準(zhǔn)備好接收從上位機(jī)串口、網(wǎng)口發(fā)來(lái)的數(shù)據(jù),它們之間的相對(duì)關(guān)系如圖:
圖1 控制器系統(tǒng)結(jié)構(gòu)圖
上位機(jī)向控制器發(fā)送數(shù)據(jù)從而實(shí)現(xiàn)對(duì)控制器的控制,首先上位機(jī)送出機(jī)號(hào),再送命令字;控制器也要向上位機(jī)上傳數(shù)據(jù)完成通訊應(yīng)答,它首先解析機(jī)號(hào)是否與自己的機(jī)號(hào)一致,若一致則再解析命令字,根據(jù)命令字來(lái)送出上傳的數(shù)據(jù)完成應(yīng)答;若不一致則不再作進(jìn)一步的數(shù)據(jù)解析。它們的通訊方式有串口通訊和以太網(wǎng)通訊兩種;控制器和發(fā)射機(jī)的數(shù)據(jù)傳輸主要有模擬量的采集和開(kāi)關(guān)量的輸入輸出;另外,人機(jī)接口模塊實(shí)現(xiàn)發(fā)射機(jī)工作過(guò)程中的參數(shù)的實(shí)時(shí)顯示和參數(shù)修改和查詢(xún)。實(shí)時(shí)采集的數(shù)據(jù)是由AD采樣得到的,需要注意的是S3c44B0沒(méi)有采樣保持電路所以通道的切換頻率不能超過(guò)100Hz,在ADC開(kāi)啟路時(shí)都需要一個(gè)延時(shí),利用這段時(shí)間來(lái)對(duì)上一路進(jìn)行濾波而提高程序的效率。整個(gè)采樣的過(guò)程可以描述為開(kāi)啟當(dāng)前通道,然后濾波上次采樣的通道(中位值平均濾波法)。
2.開(kāi)關(guān)機(jī)描述及軟件設(shè)計(jì)
圖2 傳口通訊流程圖
項(xiàng)目的開(kāi)發(fā)首先要完成開(kāi)關(guān)機(jī)功能、人機(jī)接口功能模塊、通訊模塊的程序設(shè)計(jì)和調(diào)試,先討論開(kāi)關(guān)機(jī)的程序設(shè)計(jì);用戶(hù)要求控制器上鍵的功能是能編輯的即每一個(gè)鍵的功能不固定,可以通過(guò)PC機(jī)修改;開(kāi)機(jī)時(shí)要按優(yōu)先級(jí)順序由高到低輸出一系列的動(dòng)作,每個(gè)動(dòng)作都有可編輯的優(yōu)先級(jí)(通過(guò)PC機(jī)編輯),一個(gè)動(dòng)作輸出后可能會(huì)引起其它同一優(yōu)先級(jí)水平動(dòng)作的發(fā)生,這就是動(dòng)作的關(guān)聯(lián)。在開(kāi)當(dāng)前優(yōu)先級(jí)動(dòng)作時(shí)必須要檢測(cè)更高優(yōu)先級(jí)動(dòng)作的狀態(tài),遇到故障需要進(jìn)行故障處理。針對(duì)上述的較復(fù)雜的需求設(shè)計(jì)如下數(shù)據(jù)結(jié)構(gòu):www.51kaifa.com
圖3 開(kāi)機(jī)流程
typedef struct{
char *pName; //動(dòng)作名稱(chēng)
char FunctionID; //動(dòng)作(功能)編號(hào)
char Priority; //動(dòng)作優(yōu)先級(jí)
short KeepTime1; //等待前一個(gè)輸出動(dòng) 作穩(wěn)定需要的時(shí)間
short DelayTime1;//下一動(dòng)作執(zhí)行前的延時(shí)
short DelayTime2; //當(dāng)檢測(cè)模擬量或開(kāi)關(guān)量不正常時(shí)需要重復(fù)檢測(cè)的延時(shí)
short RepeatNum;//有故障重新檢測(cè)的次數(shù)
}OutputAction;
把所有的功能依次編號(hào),把這個(gè)編號(hào)賦給某個(gè)鍵則該鍵就具備了該功能,功能的編輯通過(guò)修改OutputAction.FunctionID的值實(shí)現(xiàn);每個(gè)鍵最多有16個(gè)功能,最少?zèng)]有功能;在每一個(gè)鍵的所有功能都是輪循有效的,用一個(gè)循環(huán)鏈表來(lái)存放功能編號(hào),始終是處于表頭位置編號(hào)對(duì)應(yīng)的功能有效,每個(gè)功能(動(dòng)作)只能歸屬于一個(gè)鍵,在每次開(kāi)機(jī)時(shí)首先由串口把已定義好的鍵功能送到控制器并燒寫(xiě)到固定位置的ROM中;動(dòng)作優(yōu)先級(jí)的編輯是通過(guò)修改結(jié)構(gòu)體中OutputAction.Priority的值實(shí)現(xiàn);開(kāi)機(jī)時(shí)再?gòu)腞OM中把這些數(shù)據(jù)讀出來(lái),若上位機(jī)沒(méi)有進(jìn)行鍵功能編輯就按默認(rèn)形式進(jìn)行,需要指出的是關(guān)機(jī)時(shí),按和開(kāi)機(jī)向反的順序依次關(guān)閉所有的輸出動(dòng)作.開(kāi)機(jī)時(shí)根據(jù)固定位置ROM中的內(nèi)容或按默認(rèn)的定義獲取動(dòng)作的屬性,①首先搜索優(yōu)先級(jí)最高的動(dòng)作編號(hào),然后根據(jù)不同的延時(shí)把這些動(dòng)作依次送出;②把優(yōu)先級(jí)降一級(jí),檢測(cè)比當(dāng)前優(yōu)先級(jí)更高的所有的輸入、輸出的狀態(tài)是否正常如果正常則送出當(dāng)前優(yōu)先級(jí)的動(dòng)作,再重復(fù)②的過(guò)程,否則進(jìn)入故障處理程序,如果處理故障成功則繼續(xù)重復(fù)②的過(guò)程,否則關(guān)機(jī)并返回開(kāi)機(jī)失敗信息。開(kāi)機(jī)流程圖如圖3所示。www.51kaifa.com
在軟件設(shè)計(jì)中的一個(gè)特色就是利用I/O端口來(lái)模擬IIC總線來(lái)讀取鍵值,其總體思路是用兩個(gè)端口一個(gè)模擬IIC的時(shí)鐘信號(hào),另一個(gè)模擬IIC的數(shù)據(jù)線。需要注意的是在配制I/O端口時(shí),時(shí)鐘線始對(duì)應(yīng)的端口終是輸出口而數(shù)據(jù)線端口是不確定的。通過(guò)給端口置位和清零結(jié)合延時(shí)來(lái)模擬IIC的數(shù)據(jù)傳輸協(xié)議。在調(diào)試的過(guò)程中發(fā)現(xiàn),這種方法能很好的完成鍵值的獲取和對(duì)CPLD器件的訪問(wèn)。
linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論