寵物智能喂養系統視頻采集驅動(dòng)設計
摘要:寵物智能喂養系統是一種高效的遠程喂養系統,可以通過(guò)WEB及移動(dòng)終端(平板、手機)遠程控制寵物的科學(xué)喂食和喂水。文中以S3C6 410為核心處理器、紅外CCD攝像頭為視頻采集模塊以及TVP5150為視頻解碼器,構建了高度集成的嵌入式實(shí)時(shí)視頻采集平臺,在此基礎上完成了寵物智能喂養系統的設計。該設計具有體積小、成本低、功耗低、穩定性高、安全性好、操作便利等特點(diǎn),極好地滿(mǎn)足了智能科學(xué)喂養寵物的需求。文中提出了一種適用于該喂養系統的視頻采集驅動(dòng)設計方案,在Linux3.0.1版本內核下,以L(fǎng)inux下處理視頻設備的最新標準-V4L2為基準完成驅動(dòng)程序編寫(xiě)。通過(guò)實(shí)驗證明該方案能成功實(shí)現視頻數據的采集。
本文引用地址:http://dyxdggzs.com/article/201809/388434.htm隨著(zhù)我國社會(huì )經(jīng)濟的快速發(fā)展,城市化進(jìn)程不斷加速。我國國民生活水平不斷得到提高,我國寵物業(yè)也得到了飛速的發(fā)展。由于城市生活的封閉性、個(gè)性化和人口老齡化等問(wèn)題不斷凸顯出來(lái)。人民生活中休閑、消費和情感寄托方式也呈多樣化的發(fā)展。家庭寵物的飼養已經(jīng)成為了城市居民生活消遣的新方式。
寵物的喂養和看護往往是寵物主人最關(guān)心的問(wèn)題,目前寵物主要還是依靠人工進(jìn)行喂食,寵物看護系統還停留在專(zhuān)人看護和寵物店托管的模式下?,F有的寵物看護裝置只解決了不讓寵物餓肚子的簡(jiǎn)單層面,而沒(méi)有解決主人不在家時(shí),寵物和主人的互動(dòng)要求。主人比較關(guān)心的問(wèn)題,比如寵物現在在做什么,有沒(méi)有吃飯,寵物健康狀況怎么樣等,這些心理訴求的滿(mǎn)足才是一套寵物看護系統要解決的問(wèn)題。而現在的設備還不能滿(mǎn)足這一需求。
目前的家庭寵物看護系統為數不多,算得上看護系統的產(chǎn)品功能單一,只是簡(jiǎn)單的測量寵物環(huán)境和喂食,不能同時(shí)滿(mǎn)足用戶(hù)既可以遠程喂養寵物又可以在線(xiàn)觀(guān)看寵物進(jìn)食情況和活動(dòng)狀況的需求。近年來(lái)隨著(zhù)嵌入式技術(shù)迅速的發(fā)展,嵌入式系統已經(jīng)成熟并得到廣泛應用,把嵌入式系統與Web技術(shù)結合起來(lái),將Web技術(shù)引入到測控系統,實(shí)現基于嵌入式Web服務(wù)器的遠程測控系統,有良好的應用前景。在嵌入式Linux平臺下利用Boa作為Web服務(wù)器的遠程測控系統可以實(shí)現上述需求,搭載有高度集成的嵌入式實(shí)時(shí)視頻采集平臺的寵物智能喂養系統能很好的滿(mǎn)足客戶(hù)的不同需求。通過(guò)嵌入式實(shí)時(shí)視頻采集平臺上的紅外CCD攝像頭,寵物主人可以在白天或者晚上用智能手機、平板電腦、PC電腦等通過(guò)WEB控制寵物進(jìn)食同時(shí)可以查看寵物進(jìn)食和活動(dòng)情況。
在本系統中,驅動(dòng)程序用來(lái)完成用戶(hù)和硬件的交互,是硬件設備正常工作的先決條件,充當著(zhù)不可缺少的角色。本文提出一種基于S3C64 10的Linux3.0.1內核版本下的視頻采集系統驅動(dòng)設計方案,并已成功用于寵物智能喂養系統中,收到良好的效果。
1 硬件系統構架
寵物智能喂養系統主要由圖像采集模塊、視頻解碼模塊、S3C6410、喂食模塊、喂水模塊和顯示模塊組成。紅外CCD攝像頭用于采集智能喂養系統工作狀態(tài)中的寵物的進(jìn)食和活動(dòng)情況圖像,由于S3C6410不能識別采集到的PAL制式信號,因此需要做視頻解碼處理,這里選用TI公司推出的Tvp5150解碼器,用于將采集到的PAL制式信號轉換成YCrCb格式。S3C6410是整個(gè)系統的核心部分,轉換后的數字信號數據經(jīng)編碼DMA通道進(jìn)入Camera單元的編碼縮放器,經(jīng)過(guò)高編碼質(zhì)量和壓縮比的H264編碼后保存到用戶(hù)程序開(kāi)辟的緩存區中,然后傳輸到live555流媒體服務(wù)器接收程序中,live555實(shí)現了對編碼后視頻流的流化和相關(guān)的處理,最后通過(guò)嵌入網(wǎng)頁(yè)端的流媒體播放器VLC media player播放器實(shí)時(shí)顯示。系統中的喂食模塊可以實(shí)現寵物所需食物的定量投放,喂水模塊可以實(shí)現自動(dòng)喂水和遠程喂水的功能。另外為了方便對圖像進(jìn)行相關(guān)處理,需要NAND FLASH用于存儲截取的圖像,同時(shí),SDRAM、JTAG和供電部分等常用外圍接口是開(kāi)發(fā)過(guò)程中不可缺少的部分。由此搭建的高度集成的實(shí)時(shí)視頻采集系統具有顯著(zhù)的小型化效果。系統整體框架如圖1所示。

1.1 S3C6410開(kāi)發(fā)平臺
S3C6410是基于16/32-bit RISC ARM1176JZF-S內核的低成本、低功耗、高性能微處理器,具有高達533 MHz的主頻,4 G ROM和512 M RAM,性能強大,堪比當今主流智能手機。S3C6410內部集成了許多功能強大的硬件加速器,像視頻處理、移動(dòng)圖像處理、顯示控制和圖像縮放等,集成了Camera接口單元、系統管理器、LCD控制器、定時(shí)器、通用I/O端口、I2C總線(xiàn)接口等硬件外設,具有先進(jìn)的OTG接口和能支持SLC/MLC等主流的NAND FLASH。與本系統直接相關(guān)的Camera接口單元由7個(gè)模塊組成:圖形多路選擇器、捕獲單元、預覽縮放器、編碼縮放器、預覽DMA通道、編碼DMA通道和SFR(特殊功能寄存器)。系統中的兩個(gè)DMA通道分別是:預覽DMA通道和編碼DMA通道,其中預覽DMA通道用于液晶屏的顯示,可以把YCbCr4:2:2格式的圖像轉換成RGB格式的數據,并存放于為預覽DMA分配的內存中。編碼通道用于圖像的編解碼處理,可以輸出YCbCr4:2:0或YCbCr4:2:2格式到為編碼DMA分配的內存中。
1.2 紅外CCD攝像頭和TVP5150視頻解碼器
系統中的紅外CCD攝像頭采用優(yōu)質(zhì)的1/3英寸SONYCCD芯片,優(yōu)異的紅外夜視功能,內置24顆紅外燈,夜視距離達5~10 m。其技術(shù)參數:DC 12 V 220 mA,紅外燈打開(kāi)時(shí)DC 12 V 1 000 mA,420 TVL,像素頻率27 MHz,輸出PAL制式視頻信號。
TVP5150是TI公司推出的一款超低功耗高性能視頻解碼器,可以對NTSC/PAL/SECAM各制式信號自動(dòng)識別、切換、設置相應的寄存器,TVP5150解碼器優(yōu)化的架構使其正常工作時(shí)功耗僅115 mW,廣泛應用于便攜、批量大、高性能和高質(zhì)量的視頻產(chǎn)品中。TVP5150解碼器有一個(gè)模擬輸入通道,可以接受1路S—VIDEO信號或2路復合視頻信號(CVBS),紅外CCD攝像頭采集到的圖像以每秒25幀的速度向TVP5150輸出PAL制式的圖像數據,TVP5150對輸入的PAL制式信號進(jìn)行自動(dòng)識別并進(jìn)行A/D轉換,轉換為符合ITU—R BT.656標準的8位數字YCbCr4:2:2信號。ITU —R BT.656是ITU—R BT.601附件A中的數字接口標準,ITU-R BT.656輸出8位Y:Cb:Cr=4:2:2的數據格式,同步信號內嵌于數據流中串行輸出,也可以單獨引腳與數據流并行輸出。TVP5150可以輸出8位4:2:2的ITU—R BT.656信號或8位4:2:2的ITU—R BT.601信號,這和S3C6410的Camera模塊的輸入信號格式一致,為視頻格式轉換節省了大量工作,TVP5150解碼器內部含有多個(gè)特殊功能寄存器,可被編程使用I2C串行接口,用戶(hù)通過(guò)I2C總線(xiàn)設置外部視頻解碼芯片TVP5150的內部寄存器,從而設定工作狀態(tài)。TVP5150芯片的原理圖如圖2所示。

本系統驅動(dòng)主要包括兩大部分:處理器S3C6410的Camera接口驅動(dòng)和視頻解碼器TVP5150驅動(dòng)。Camera接口驅動(dòng)為上層的應用程序提供了底層支持,遵循V4L2標準;視頻解碼器TVP5150驅動(dòng)完成了I2C設備的注冊,遵循I2C通訊協(xié)議,實(shí)現了讀寫(xiě)內部寄存器的接口函數。
2.1 Camera接口驅動(dòng)
V4L2(Video For TWO)是Linux內核中關(guān)于視頻設備的API接口,主要用來(lái)對視頻設備進(jìn)行開(kāi)關(guān)、采集、輸出等操作。在嵌入式系統中多采用Linux作為其軟件平臺,V4L2是Linux2.6采用的內核驅動(dòng)模型,與之前版本的V4L存在很大差別。V4L2使在Linux下開(kāi)發(fā)視頻設備驅動(dòng)程序具有統一的接口規范,這套規范給驅動(dòng)程序開(kāi)發(fā)提供了清晰的模型和接口。應用程序處于最上層,硬件設備處于最下層,這套規范就處于中間層。在Linux2.6發(fā)行版之前此類(lèi)規范都是V4L,它將所有的視頻設備驅動(dòng)程序都放在其管理中,為編程人員減少了大量的工作。
本方案采用Linux為操作系統,內核版本為3.0.1,相對之前的linux2.6.28而言,內核版本進(jìn)行了升級,升級之后的linux3.0.1版本兼容了更多的硬件,修復了之前系統中的bug和某些資源的沖突問(wèn)題,系統安全性能得到了顯著(zhù)提高。Camera接口驅動(dòng)正是按照V4L2標準來(lái)完成的。s3c_time_core.c文件實(shí)現了設備的注冊和大部分系統調用,是驅動(dòng)的核心,v4l2接口的ioctl系統調用依靠s3c_time_v4l2.c來(lái)實(shí)現。
在Linux操作系統中,設備被映射為特殊的文件,設備驅動(dòng)程序為各種設備提供一致的訪(fǎng)問(wèn)接口,應用程序通過(guò)調用open、close、rea d、write等函數去操作相應的設備文件來(lái)訪(fǎng)問(wèn)設備。open()函數用來(lái)打開(kāi)視頻文件設備;camera接口底層的讀寫(xiě)用read()和write()實(shí)現;mmap()取代了以前的copy_to_user()方式,用內存映射方式把設備內存映射到應用程序內存中,從而直接處理設備內存;當video_device配置完畢,在s3c_time_probe()中通過(guò)video_register_device()函數完成注冊。
2.2 TVP5150驅動(dòng)
2.2.1 Linux下I2C驅動(dòng)體系結構
I2C總線(xiàn)是由PHILIPS公司開(kāi)發(fā)的微電子通信控制領(lǐng)域廣泛采用的一種新型總線(xiàn)標準,用于連接微控制器及其外圍設備,其最主要的特點(diǎn)是簡(jiǎn)單性和有效性。Linux系統中把I2C設備當作一個(gè)普通的字符設備來(lái)處理,對I2C設備具有很好的支持,Linux下的I2C體系結構分為3個(gè)組成部分:I2C核心、I2C總線(xiàn)驅動(dòng)和I2C設備驅動(dòng)。
I2C核心是內核用來(lái)維護和管理I2C的核心部分,提供了I2C總線(xiàn)驅動(dòng)和設備驅動(dòng)的注冊,注銷(xiāo)方法,I2C總線(xiàn)驅動(dòng)是對I2C硬件體系結構中適配器端的實(shí)現,主要包含了I2C適配器數據結構i2c_adapter、I2C適配器的algorithm數據結構i2c_algorithm和控制I2C適配器產(chǎn)生通信信號的函數。I2C設備驅動(dòng)是對I2C硬件體系結構中設備端的實(shí)現,設備一般掛接在受CPU控制的I2C適配器上,通過(guò)I2C適配器與CPU交換數據。I 2C設備驅動(dòng)主要包含了數據結構i2c_driver和i2c_client,我們需要根據具體設備實(shí)現其中的成員函數。Linux I2C體系結構圖如圖3所示。

2.2.2 TVP5150驅動(dòng)實(shí)現
Linux3.0.1相對linux2.6.28而言驅動(dòng)程序函數接口發(fā)生了一些變化,驅動(dòng)程序進(jìn)行了優(yōu)化,TVP5150驅動(dòng)具體實(shí)現如下:TVP5150驅動(dòng)程序首先要實(shí)現對I2C core層的接口,用以?huà)旖覫2C adapter層來(lái)實(shí)現對I2C總線(xiàn)及I2C設備具體的訪(fǎng)問(wèn)方法,主要包括需要編寫(xiě)TVP5150_ init()、TVP5150_probe()、TVP5150_remove()等接口函數。
tvp5150_init()初始化函數,主要調用i2C_add_driver(tvp5150_i2c_driver)添加設備驅動(dòng)。
tvp5150_probe()在使用i2C_add_driver()注冊時(shí)被調用,用來(lái)檢查被發(fā)現的所有的I2C適配器是否符合I2C驅動(dòng)的特定條件,如果符合相關(guān)條件則進(jìn)行連接,并通I2C適配器來(lái)實(shí)現對I2C總線(xiàn)及I2C設備的訪(fǎng)問(wèn)。
tvp5150_remove()在刪除Tvp5150時(shí)被調用,使Tvp5150解碼器脫離I2C適配器,并且清除描述該設備相關(guān)數據結構。
本文的驅動(dòng)程序主要實(shí)現以下環(huán)節:
首先增加了填充camera接口的結構體:static struct s3c_fimc_camera tvp5150_da-ta,結構體中主要描述了攝像頭的參數,比如圖像尺寸720x240,圖像格式ITU_656_YCBCR422_8BIT,像素頻率27 MHz等。這些數據在初始化camera接口時(shí)要用到。在tvp5150_probe(struct i2c_client*c,const structi2c_device_id*id)函數中增加了一個(gè)函數接口s-3c_fime_register_camera(tvp5150_data)用于把上面這個(gè)結構體填入struct s3c_fimc_config s3c_fimc這個(gè)全局變量中,其次定義tvp5150驅動(dòng)配置參數的結構體tvp5150_i2c_driver,在tvp5150_in it()函數中調用i2c_add_driver(tvp5150_i2c_driver)添加驅動(dòng),之后tvp5150_probe()被調用時(shí)tvp5150_attach_adapter()會(huì )被調用,通過(guò)遍歷系統中的所有I2C總線(xiàn)驅動(dòng)來(lái)探測Tvp5150,然后調用內核中已經(jīng)注冊的適配器來(lái)連接Tvp5150。tvp5-150_attach_adapter()函數主要調用i2c_detect(adapter,driver)函數來(lái)探測設備,探測到目標設備之后創(chuàng )建一個(gè)strnct i2c_client結構來(lái)標識這個(gè)設備。
初始化Tvp5150內部特殊功能寄存器的操作主要通過(guò)tvp5150_probe()函數來(lái)實(shí)現,函數中調用i2c_smbus_write_byte_data(c,TVP5150 _init_reg[i].subaddr,TVP5150_init_reg[i].value)來(lái)完成寄存器的設置,從而完成了初始化tvp5150的過(guò)程。其圖像采集驅動(dòng)流程圖如圖4所示。

3 驅動(dòng)移植和相關(guān)實(shí)驗結果
1)驅動(dòng)程序編寫(xiě)好之后,在Kconfig-camera文件中添加與驅動(dòng)相對應項目的編譯配置選項:
config TVP5150
bool“TVP5150”
depends on VIDEO_FIMC
---help---
LYT TVP5150 camera module support
2)在Makefile文件中添加對驅動(dòng)的編譯條目:
obj-$(CONFIG_TVP5150)+=tvp5150.o
3)修改mach-smdk6410.c文件:
在i2c_board_info i2c_devs0[]_initdata結構體中{I2C_BOARD_INFO(“ov965x”,0x30),},語(yǔ)句后面添加{I2C_BOARD_INFO(“tvp51 50”,0x5c),},
4)進(jìn)入linux-3.0.1內核目錄,執行make menuconfig進(jìn)行相關(guān)的配置:
其中External Camera(TVP5150)——>
ResetType(0=low,1=high)前面的選擇框里要選擇0
5)進(jìn)入內核目錄執行make zImage,重新編澤內核,生成內核文件,將新的內核燒寫(xiě)到開(kāi)發(fā)板,運行測試程序即可測試到視頻設備采集到的實(shí)時(shí)圖像,如圖5~7所示。


4 結束語(yǔ)
通過(guò)開(kāi)發(fā)實(shí)例詳細介紹了寵物智能喂養系統視頻采集的驅動(dòng)設計,實(shí)現了TI公司視頻解碼芯片TVP5150驅動(dòng)程序的設計,并成功移植到開(kāi)發(fā)板上,具有較高的性?xún)r(jià)比,可用于視頻采集、遠程監控等眾多領(lǐng)域,該系統視頻監控的實(shí)現滿(mǎn)足了遠程實(shí)時(shí)觀(guān)看寵物進(jìn)食和活動(dòng)情況的需求,對寵物看護系統的進(jìn)一步完善提供了幫助,在實(shí)際測試中,該系統測試結果令人滿(mǎn)意,實(shí)現了對寵物遠程定時(shí)定量的喂食,該系統成本很低,具有很好的應用和推廣價(jià)值。
評論