基于單片機(jī)的物聯(lián)網(wǎng)圖像采集系統(tǒng)應(yīng)用設(shè)計(jì)
(2)讀取圖像傳感器內(nèi)部寄存器的值
unsigned char I2C_Main(unsigned char slave_address,unsigned charreg_address,unsigned char write_data)
{
/* slave_address是圖像傳感器的地址+寫操作符“0”,reg_address是內(nèi)部寄存器的地址,write_data是要寫入寄存器的數(shù)據(jù)*/
I2C_Start();//啟動(dòng)I2C總線,I2C_CR2寄存器最低位置1
I2C_SendDAdr(slave_address);//發(fā)送圖像傳感器的地址+寫操作符“0”
I2C_SendDat(reg._address);//發(fā)送內(nèi)部寄存器的地址
I2C_SendDat(write_data);//發(fā)送內(nèi)部寄存器要寫入的數(shù)據(jù)
I2C_stop();//釋放I2C總線,I2C_CR2寄存器次低位置1
}
3.2.3 圖像數(shù)據(jù)的采集
單片機(jī)通過(guò)SPI協(xié)議采集CMOS圖像傳感器的圖像數(shù)據(jù)。SPI總線是一種同步串行外設(shè)接口,允許MCU與各種外圍接口器件以串行方式進(jìn)行通信。SPI總線一般采用4根線:串行時(shí)鐘線SCK、主機(jī)輸入從機(jī)輸出數(shù)據(jù)線MISO、主機(jī)輸出從機(jī)輸入數(shù)據(jù)線MOSI、低電平有效的使能信號(hào)線SS。因?yàn)樵谙到y(tǒng)的SPI數(shù)據(jù)傳輸過(guò)程中,單片機(jī)只采集圖像傳感器的數(shù)據(jù),沒(méi)有向圖像傳感器的數(shù)據(jù)輸出,所以系統(tǒng)選用SPl只接收模式,這樣只需要一根串行時(shí)鐘線SCK和一根主機(jī)輸入從機(jī)輸出數(shù)據(jù)線MISO即可,節(jié)省硬件資源。
SPI接口的最大特點(diǎn)是由主設(shè)備時(shí)鐘信號(hào)的出現(xiàn)與否來(lái)決定主從設(shè)備之間的通信。在從設(shè)備被使能時(shí),一旦檢測(cè)到主設(shè)備的時(shí)鐘信號(hào),數(shù)據(jù)開(kāi)始傳輸,時(shí)鐘信號(hào)無(wú)效后,傳輸結(jié)束。在系統(tǒng)中,單片機(jī)作為主設(shè)備,圖像傳感器作為從設(shè)備,圖像傳感器在時(shí)鐘的下降沿變數(shù),單片機(jī)在時(shí)鐘的上升沿采集數(shù)據(jù),圖像傳感器接收單片機(jī)的時(shí)鐘信號(hào)SPI協(xié)議的時(shí)序如圖7所示。
STM8單片機(jī)有專門的硬件SPI接口,因此可通過(guò)該接1:2采集圖像數(shù)據(jù)。圖像傳感器SPI時(shí)鐘輸入引腳連接單片機(jī)的SPI_SCK口,圖像傳感器圖像數(shù)據(jù)輸出引腳連接單片機(jī)SPI_MISO口,片選SPI_CS引腳連接單片機(jī)的普通I/O口PD7。然后對(duì)硬件SPI的參數(shù)進(jìn)行配置,主要包括時(shí)鐘頻率、工作模式、主從模式、空閑時(shí)候電平狀態(tài)、觸發(fā)邊沿等,這些參數(shù)都可以通過(guò)單片機(jī)硬件SPI的內(nèi)部寄存器的配置實(shí)現(xiàn)。SPI總線讀取圖像數(shù)據(jù)的流程如下:
unsigned char spinet_byte(void)
{
while(!(SPI_SR0x02));//等待總線空閑
SPI_DR=Oxff;//產(chǎn)生時(shí)序信號(hào)硬件SPI在且僅在發(fā)送數(shù)據(jù)的時(shí)候才產(chǎn)生SCK時(shí)鐘
while(!(SPI_SR 0x01));//等待數(shù)據(jù)接收完畢
return SPI_DR;//將接收到的數(shù)據(jù)返回
}
3.3 Flash模塊軟件設(shè)計(jì)
SST25VF020是一款2Mbit SPI Serial NOR型Flash芯片,在系統(tǒng)中作為圖像存儲(chǔ)器使用。該Flash通過(guò)SPI的串口接收指令和數(shù)據(jù),支持3/4的SPI協(xié)議,其工作時(shí)序如圖8所示。
從上圖可以看出,CE#低電平使能芯片正常工作,該芯片在SCK的上升沿讀入信號(hào),在SCK下降沿的時(shí)候輸出信號(hào)。STM8單片機(jī)有專門的硬件SPI接口,但是圖像傳感器也需要單片機(jī)的硬件sPI接口與之通信,所以系統(tǒng)設(shè)計(jì)了一種分時(shí)復(fù)用單片機(jī)硬件SPI接口的方式。CE#片選連接單片機(jī)的普通I/O口PD0,該I/O口在不同的時(shí)刻與圖像傳感器的片選PD7分別選中,如此,一個(gè)硬件SPI接口便可操作2個(gè)SPI設(shè)備。SPI時(shí)鐘輸入引腳連接單片機(jī)的SPI_SCK口,SI讀人信號(hào)連接單片機(jī)的SPI_MOSI,SO輸出信號(hào)連接單片機(jī)的SPI_MISO。硬件SPI配置與前文所述圖像數(shù)據(jù)采集SPI一致。此外,與圖像采集相比,在程序部分還要多加一個(gè)單片機(jī)輸出信號(hào)函數(shù)。Flash模塊主要功能函數(shù)如下:
void sst_send_byte(unsigned char byte)
{
while(!(SPI_SR0x02));//等待總線空閑
SPI_DR=byte;//將要寫入的數(shù)據(jù)byte存入SPI_DR
while(!(SPI_SR0x01));//等待數(shù)據(jù)發(fā)送完畢完畢
tmp=SPI_DR;//清空接收緩沖區(qū)
void flashwrite_byte(unsigned long addr,unsigned char data)//向緩沖區(qū)l的指定位置(0—263)寫入指定字節(jié)
}
write_en();//寫使能命令
mss0();//片選端選中,低電平有效
send(0x02);//寫命令
send((unsigned char)(addr>>16));//發(fā)送數(shù)據(jù)的地址
send((unsigned char)(addr>>8));
send((unsigned char)addr);
send(data);//發(fā)送要寫入的數(shù)據(jù)
mssl();//釋放片選
}
unsigned char flashreadbyte(unsigned long addr)
}
unsigned char byte;
mss0();//片選端選中,低電平有效
send(0x03);//讀命令
send((unsigned char)(addr>>16));//發(fā)送數(shù)據(jù)的地址
send((unsigned char)(addr>>8));
send((unsigned char)addr);
byte=get();//讀取數(shù)據(jù)
mssl();//釋放片選
return byte;
}
3.4圖像的多幀采集和拼接模塊軟件設(shè)計(jì)
為保存圖像數(shù)據(jù),系統(tǒng)引入Flash存儲(chǔ)器,而數(shù)據(jù)轉(zhuǎn)存入Flash存儲(chǔ)器需要占用中斷響應(yīng)時(shí)間,這就導(dǎo)致了中斷響應(yīng)時(shí)間不夠的問(wèn)題。為解決這個(gè)問(wèn)題,根據(jù)所采圖像為靜態(tài)圖像這一應(yīng)用背景,提出一種多幀圖像的部分采集與拼接算法,在中斷響應(yīng)時(shí)間中,只讀取圖像傳感器中的圖像數(shù)據(jù),而后占用兩次中斷的時(shí)間,把圖像數(shù)據(jù)轉(zhuǎn)存入Flash。每幀圖像有160次中斷,每幀圖像只取其1/3,取3幀圖像的數(shù)據(jù),即可拼接成一幅完整的圖像。多幀采集方法如圖9所示。圖中,實(shí)線表示捕獲到的中斷,虛線表示因轉(zhuǎn)存人Flash錯(cuò)過(guò)的中斷。
單片機(jī)把采集的數(shù)據(jù)按照采集時(shí)間的順序轉(zhuǎn)存入Flash數(shù)據(jù)在Flash中的排列順序如圖10所示。
在Flash中讀取圖像數(shù)據(jù)的時(shí)候,按照中斷次數(shù)的先后順序讀出,即第l幀第1次中斷、第2幀第2次中斷、第3幀第3次中斷、第1幀第4次中斷、第2幀第5次中斷……第2幀第158次中斷、第3幀第159次中斷、第1幀第160次中斷。這樣,3幀圖像的數(shù)據(jù)拼接成一幅完整的圖像。在讀取圖像數(shù)據(jù)的同時(shí),單片機(jī)以2個(gè)字節(jié)為單位,拼接成一個(gè)無(wú)符號(hào)整型,即一個(gè)像素點(diǎn),通過(guò)RS232接口傳送至上位機(jī)。
4 試驗(yàn)及分析
圖11是系統(tǒng)的實(shí)物圖,硬件系統(tǒng)面積是(7.5×7。5)cm2,雙層PCB板,系統(tǒng)結(jié)構(gòu)簡(jiǎn)單,運(yùn)行穩(wěn)定。系統(tǒng)對(duì)圖像的處理速度是4幀/s,滿足實(shí)時(shí)性的要求。
圖12為采集的一幅圖像,大小為240×320,圖像格式為bmp,像素格式為RGB565,該圖像是3幀圖像拼接而成,是單片機(jī)通過(guò)RS232接口傳輸至上位機(jī),并在顯示器上顯示的。
5 方案設(shè)計(jì)優(yōu)勢(shì)
介紹了基于STM8單片機(jī)的低成本CMOS圖像采集系統(tǒng)的硬軟件構(gòu)成,與其他嵌入式圖像采集系統(tǒng)相比,有3點(diǎn)優(yōu)勢(shì):
第一,價(jià)格低廉,有較強(qiáng)的市場(chǎng)競(jìng)爭(zhēng)力;
第二,方法新穎,提出了一種多幀圖像拼接成一幅圖像的方法,解決了單片機(jī)處理速度慢的問(wèn)題,取得了很好的試驗(yàn)效果;
第三,系統(tǒng)體積小,結(jié)構(gòu)簡(jiǎn)單,實(shí)時(shí)性好,能以非常低的成本附加到其他物聯(lián)網(wǎng)傳感節(jié)點(diǎn)上,使物聯(lián)網(wǎng)節(jié)點(diǎn)具有采集和傳輸圖像的功能,更大程度上方便用戶使用。
評(píng)論