新聞中心

        EEPW首頁 > 電源與新能源 > 設計應用 > 基于單片機的物聯網圖像采集系統應用設計

        基于單片機的物聯網圖像采集系統應用設計

        作者: 時間:2018-08-14 來源:網絡 收藏

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

        (2)讀取圖像內部寄存器的值

        unsigned char I2C_Main(unsigned char slave_address,unsigned charreg_address,unsigned char write_data)

        {

        /* slave_address是圖像的地址+寫操作符“0”,reg_address是內部寄存器的地址,write_data是要寫入寄存器的數據*/

        I2C_Start();//啟動I2C總線,I2C_CR2寄存器最低位置1

        I2C_SendDAdr(slave_address);//發送圖像的地址+寫操作符“0”

        I2C_SendDat(reg._address);//發送內部寄存器的地址

        I2C_SendDat(write_data);//發送內部寄存器要寫入的數據

        I2C_stop();//釋放I2C總線,I2C_CR2寄存器次低位置1

        }

        3.2.3 圖像數據的采集

        通過SPI協議采集CMOS圖像傳感器的圖像數據。SPI總線是一種同步串行外設接口,允許MCU與各種外圍接口器件以串行方式進行通信。SPI總線一般采用4根線:串行時鐘線SCK、主機輸入從機輸出數據線MISO、主機輸出從機輸入數據線MOSI、低電平有效的使能信號線SS。因為在系統的SPI數據傳輸過程中,只采集圖像傳感器的數據,沒有向圖像傳感器的數據輸出,所以系統選用SPl只接收模式,這樣只需要一根串行時鐘線SCK和一根主機輸入從機輸出數據線MISO即可,節省硬件資源。

        SPI接口的最大特點是由主設備時鐘信號的出現與否來決定主從設備之間的通信。在從設備被使能時,一旦檢測到主設備的時鐘信號,數據開始傳輸,時鐘信號無效后,傳輸結束。在系統中,作為主設備,圖像傳感器作為從設備,圖像傳感器在時鐘的下降沿變數,單片機在時鐘的上升沿采集數據,圖像傳感器接收單片機的時鐘信號SPI協議的時序如圖7所示。

        STM8單片機有專門的硬件SPI接口,因此可通過該接1:2采集圖像數據。圖像傳感器SPI時鐘輸入引腳連接單片機的SPI_SCK口,圖像傳感器圖像數據輸出引腳連接單片機SPI_MISO口,片選SPI_CS引腳連接單片機的普通I/O口PD7。然后對硬件SPI的參數進行配置,主要包括時鐘頻率、工作模式、主從模式、空閑時候電平狀態、觸發邊沿等,這些參數都可以通過單片機硬件SPI的內部寄存器的配置實現。SPI總線讀取圖像數據的流程如下:

        unsigned char spinet_byte(void)

        {

        while(!(SPI_SR0x02));//等待總線空閑

        SPI_DR=Oxff;//產生時序信號硬件SPI在且僅在發送數據的時候才產生SCK時鐘

        while(!(SPI_SR 0x01));//等待數據接收完畢

        return SPI_DR;//將接收到的數據返回

        }

        3.3 Flash模塊軟件設計

        SST25VF020是一款2Mbit SPI Serial NOR型Flash芯片,在系統中作為圖像存儲器使用。該Flash通過SPI的串口接收指令和數據,支持3/4的SPI協議,其工作時序如圖8所示。

        從上圖可以看出,CE#低電平使能芯片正常工作,該芯片在SCK的上升沿讀入信號,在SCK下降沿的時候輸出信號。STM8單片機有專門的硬件SPI接口,但是圖像傳感器也需要單片機的硬件sPI接口與之通信,所以系統設計了一種分時復用單片機硬件SPI接口的方式。CE#片選連接單片機的普通I/O口PD0,該I/O口在不同的時刻與圖像傳感器的片選PD7分別選中,如此,一個硬件SPI接口便可操作2個SPI設備。SPI時鐘輸入引腳連接單片機的SPI_SCK口,SI讀人信號連接單片機的SPI_MOSI,SO輸出信號連接單片機的SPI_MISO。硬件SPI配置與前文所述圖像數據采集SPI一致。此外,與圖像采集相比,在程序部分還要多加一個單片機輸出信號函數。Flash模塊主要功能函數如下:

        void sst_send_byte(unsigned char byte)

        {

        while(!(SPI_SR0x02));//等待總線空閑

        SPI_DR=byte;//將要寫入的數據byte存入SPI_DR

        while(!(SPI_SR0x01));//等待數據發送完畢完畢

        tmp=SPI_DR;//清空接收緩沖區

        void flashwrite_byte(unsigned long addr,unsigned char data)//向緩沖區l的指定位置(0—263)寫入指定字節

        }

        write_en();//寫使能命令

        mss0();//片選端選中,低電平有效

        send(0x02);//寫命令

        send((unsigned char)(addr>>16));//發送數據的地址

        send((unsigned char)(addr>>8));

        send((unsigned char)addr);

        send(data);//發送要寫入的數據

        mssl();//釋放片選

        }

        unsigned char flashreadbyte(unsigned long addr)

        }

        unsigned char byte;

        mss0();//片選端選中,低電平有效

        send(0x03);//讀命令

        send((unsigned char)(addr>>16));//發送數據的地址

        send((unsigned char)(addr>>8));

        send((unsigned char)addr);

        byte=get();//讀取數據

        mssl();//釋放片選

        return byte;

        }

        3.4圖像的多幀采集和拼接模塊軟件設計

        為保存圖像數據,系統引入Flash存儲器,而數據轉存入Flash存儲器需要占用中斷響應時間,這就導致了中斷響應時間不夠的問題。為解決這個問題,根據所采圖像為靜態圖像這一應用背景,提出一種多幀圖像的部分采集與拼接算法,在中斷響應時間中,只讀取圖像傳感器中的圖像數據,而后占用兩次中斷的時間,把圖像數據轉存入Flash。每幀圖像有160次中斷,每幀圖像只取其1/3,取3幀圖像的數據,即可拼接成一幅完整的圖像。多幀采集方法如圖9所示。圖中,實線表示捕獲到的中斷,虛線表示因轉存人Flash錯過的中斷。

        單片機把采集的數據按照采集時間的順序轉存入Flash數據在Flash中的排列順序如圖10所示。

        在Flash中讀取圖像數據的時候,按照中斷次數的先后順序讀出,即第l幀第1次中斷、第2幀第2次中斷、第3幀第3次中斷、第1幀第4次中斷、第2幀第5次中斷……第2幀第158次中斷、第3幀第159次中斷、第1幀第160次中斷。這樣,3幀圖像的數據拼接成一幅完整的圖像。在讀取圖像數據的同時,單片機以2個字節為單位,拼接成一個無符號整型,即一個像素點,通過RS232接口傳送至上位機。

        4 試驗及分析

        圖11是系統的實物圖,硬件系統面積是(7.5×7。5)cm2,雙層PCB板,系統結構簡單,運行穩定。系統對圖像的處理速度是4幀/s,滿足實時性的要求。

        圖12為采集的一幅圖像,大小為240×320,圖像格式為bmp,像素格式為RGB565,該圖像是3幀圖像拼接而成,是單片機通過RS232接口傳輸至上位機,并在顯示器上顯示的。

        5 方案設計優勢

        介紹了基于STM8單片機的低成本CMOS圖像采集系統的硬軟件構成,與其他嵌入式圖像采集系統相比,有3點優勢:

        第一,價格低廉,有較強的市場競爭力;

        第二,方法新穎,提出了一種多幀圖像拼接成一幅圖像的方法,解決了單片機處理速度慢的問題,取得了很好的試驗效果;

        第三,系統體積小,結構簡單,實時性好,能以非常低的成本附加到其他物聯網傳感節點上,使物聯網節點具有采集和傳輸圖像的功能,更大程度上方便用戶使用。


        上一頁 1 2 下一頁

        關鍵詞: 傳感器 單片機

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 碌曲县| 桐梓县| 咸丰县| 都江堰市| 大厂| 婺源县| 和平县| 金堂县| 格尔木市| 安泽县| 新宾| 巴青县| 电白县| 湖口县| 尉氏县| 调兵山市| 浦东新区| 定远县| 福贡县| 宝兴县| 闽清县| 克东县| 于田县| 荣成市| 天祝| 东平县| 郁南县| 同心县| 乾安县| 兴国县| 弥勒县| 天镇县| 鹤峰县| 岐山县| 双柏县| 施甸县| 宁远县| 弥渡县| 郯城县| 临泉县| 元江|