www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式硬件
[導讀]本系統(tǒng)設計實現(xiàn)了一款基于TMS320DM368的高清視頻監(jiān)控系統(tǒng)中的云臺電機控制設計,完成了i2c驅動程序的分析以及設計,并且完成了i2c應用程序的設計和云臺電機控制應用程序設計,達到了應用目的,取得了良好效果。

1引言

近年來,隨著視頻技術發(fā)展,網絡穩(wěn)定性能快速提高,視頻監(jiān)控需求越來越大,其應用領域也越來越廣泛。社會的發(fā)展,汽車增量不斷增多,道路上各種違章的車輛也逐漸增多,為了構建一個平安交通和智能交通,視頻監(jiān)控系統(tǒng)在交通行業(yè)的應用也越來越多,為了能全方位的對高速公路進行監(jiān)控,視頻監(jiān)控的高速球也應用越來越廣泛。

本文將研究詳細分析I2C的工作原理和通信協(xié)議和Linux的I2C總線驅動程序,設計一個應用在高速公路視頻監(jiān)控的基于I2C云臺電機驅動系統(tǒng),為高速公路的全方位視頻監(jiān)控提供一個設計方案。

2高速公路視頻監(jiān)控系統(tǒng)以及云臺電機整體設計

本研究課題的高速公路高清視頻監(jiān)控系統(tǒng)采用TI公司的TMS320DM368,DM368是一款面向多媒體技術應用的高性能芯片,功能強大,集成了ARM926EJ-S內核、硬件編碼協(xié)處理引擎( HDVICP)、圖像處理子系統(tǒng)( VPSS)。DM368頻率高達432MH,支持多格式解碼、多速率以及高清多通道功能,最高可以支持H.264編碼1080P格式30幀/s的速度,而且還可提供多種獨立式音頻、語音以及高清視頻編解碼器(H.264)。該處理器有I2C總線等外圍接口等,其中ARM9運行開源、性能穩(wěn)定安全Linux嵌入式操作系統(tǒng)。

視頻監(jiān)控系統(tǒng)中云臺電機控制的設計采用DM368的I2C總線接口,設計基于ARM9的I2C云臺電機,完成驅動程序設計和應用程序設計,以及應用程序控制電機轉動,應用于視頻監(jiān)控系統(tǒng)中,達到全方位的高速公路視頻監(jiān)控。

3 I2C硬件構成和通信協(xié)議

I2C總線是由雙向數(shù)據(jù)線和時鐘線構成的二線制串行總線,總線采用主從雙向通信,即總線上在某一時刻只有一個主設備總線上的其他設備都作為從設備,任何能夠進行發(fā)送和接收的設備都可以成為主設備,但是在同一時間內只能有一個設備作為主設備,通常為處理器,其他器件作為從設備與主設備進行通信,采用唯一的I2C地址識別。



圖1 I2C時序


如圖1I2C的工作時序圖所示,I2C總線在傳送數(shù)據(jù)過程中使用了三種信號。(1)開始信號:SCL為高電平時,SDA由高電平向低電平跳變,表示將要開始傳送數(shù)據(jù);(2)應答信號:從設備在接收到1個字節(jié)數(shù)據(jù)后向主設備發(fā)出一個低電平脈沖應答信號,表示已收到數(shù)據(jù),主設備根據(jù)從設備的應答信號做出是否繼續(xù)傳輸數(shù)據(jù)的操作(I2C總線每次數(shù)據(jù)傳輸時字節(jié)數(shù)不限制,但是每發(fā)送都要有一個應答信號);(3)結束信號:為低電平時由低電平向高電平跳變,表示數(shù)據(jù)傳送結束。

總線具體的通信工作原理:主設備首先發(fā)出開始信號,接著發(fā)送的1個字節(jié)的數(shù)據(jù),其由高7位地址碼和最低1位方向位組成(方向位表明主設備與從設備間數(shù)據(jù)的傳送方向)。系統(tǒng)中所有從設備將自己的地址與主設備發(fā)送到總線上的地址進行比較,如果從設備地址與總線上的地址相同,該設備就是與主設備進行數(shù)據(jù)傳輸?shù)脑O備。接著進行數(shù)據(jù)傳輸,根據(jù)方向位,主設備接收從設備數(shù)據(jù)或發(fā)送數(shù)據(jù)到從設備。當數(shù)據(jù)傳送完成后,主設備發(fā)出一個停止信號,釋放I2C總線,然后所有從設備等待下一個開始信號的到來。

4 I2C的Linux和ARM驅動設計

(1)Linux2.6.32的I2C驅動分析。

I2C由主設備和從設備構成,通信上通過識別I2C地址進行通信,即可以存在多個i2c adapter適配器和多個外設i2c device,Linux的I2C驅動采用分層設計實現(xiàn)的思想,層與層之間不存在耦合,增加adapter和增加device不會影響其他驅動,具體分層如下。

第一層:提供i2c adapter的硬件驅動,探測、初始化i2c adapter(如申請i2c地址和中斷號),驅動處理器控制的i2c adapter在硬件上產生信號(start、stop、ack)以及處理i2c中斷,涉及圖2中的硬件實現(xiàn)層。

第二層:提供i2c adapter的algorithm,用具體適配器的xxx_xfer()函數(shù)來填充i2c_algorithm的master_xfer函數(shù)指針,并把賦值后的i2c_algorithm,再賦值給i2c_adapter的成員指針,主要涉及圖2中訪問抽象層、i2c核心層。

第三層:實現(xiàn)i2c設備驅動中的i2c_driver接口,用具體的i2c device設備的i2c_add_driver ()、i2c_del_driver ()方法賦值給i2c_driver的成員函數(shù)指針,采用Probe探尋方式實現(xiàn)設備device與總線的掛接,涉及圖2中的driver驅動層,此層是本文實現(xiàn)的驅動部分。

第四層:實現(xiàn)i2c設備所對應的具體device的驅動,i2c_driver只是實現(xiàn)設備與總線的掛接,掛接在總線上的設備千差萬別的,所以要實現(xiàn)具體設備device的write()、read()、ioctl()等方法,賦值給file_operations,然后注冊字符設備,涉及圖2中的driver驅動層,此層是本文實現(xiàn)的驅動部分。

第一層和第二層又叫i2c總線驅動(bus driver),第三層和第四層屬于i2c設備驅動(device driver)。在Linux驅動架構中,不需要再開發(fā)總線驅動,因為Linux內核幾乎集成所有總線驅動,驅動設計主要是實現(xiàn)第三層和第四層的設備驅動。



圖2 I2c驅動架構圖

(2)云臺電機驅動設計

根據(jù)Linux2.6.32的驅動分層設計,驅動的第一層和第二層在Linux-2.6.32中以及集成了成熟驅動,分別位于Linux源代碼目錄下的driversi2ci2c-core.c和driversi2cbussesdavinci.c中,本文重點講述第三層和第四層驅動程序的設計。

驅動設計采用字符設備方式來實現(xiàn),motor_I2C_devInit()和motor_I2C_devExit()實現(xiàn)驅動的初始化以及退出,初始化最后調用cdev_add()實現(xiàn)字符設備的添加,添加過程中通過完善file_operations的結構體,填充了。open = I2C_devOpen, .release = I2C_devRelease,。ioctl = I2C_devIoctl三個結構體變量,這三個用戶空間接口驅動函數(shù),完成注冊后,用戶空間可以采用文件讀寫的方式來操作I2C設備了,I2C_devOpen函數(shù)實現(xiàn)打開字符設備,I2C_devRelease函數(shù)實現(xiàn)關閉字符設備,I2C_devIoctl是實現(xiàn)和硬件設備實現(xiàn)數(shù)據(jù)傳輸?shù)淖钪匾瘮?shù),主要實現(xiàn)設備加載、數(shù)據(jù)讀取和數(shù)據(jù)寫入,從而完成用戶空間和驅動程序以及硬件設備的數(shù)據(jù)交換,具體實現(xiàn)如圖3所示。

下面通過I2C_devIoctl介紹這三個函數(shù)的實現(xiàn)過程,命令I2C_CMD_SET_DEV_ADDR實現(xiàn)地址設置,I2C_CMD_READ實現(xiàn)數(shù)據(jù)讀取,I2C_CMD_WRITE實現(xiàn)數(shù)據(jù)寫入,最終分別調用,其中I2C_create實現(xiàn)I2C設備加載,I2C_read實現(xiàn)I2C設備數(shù)據(jù)讀取,I2C_write實現(xiàn)I2C設備數(shù)據(jù)寫入,其中I2C_create利用i2c_add_driver調用i2c_probe,最終調用i2c_set_clientdata加載I2C從設備,I2C_read和I2C_write利用i2c_transfer函數(shù)調用master_xfer實現(xiàn)數(shù)據(jù)的讀取和寫入,具體實現(xiàn)過程如圖3所示,其中I2C_devIoctl實現(xiàn)部分代碼如下:

int I2C_devIoctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) {

switch(cmd) {

case I2C_CMD_SET_DEV_ADDR://I2C設置地址設置

filp->private_data = I2C_create(arg);

……

case I2C_CMD_READ: //數(shù)據(jù)讀取

status = copy_from_user( (void*)arg, sizeof(transferPrm));

if(status==0) {

status = copy_from_user();//省略參數(shù)

if(status==0) {

status = I2C_read();//省略參數(shù)

if(status==0) {

status = copy_to_user();//省略參數(shù)

}

}

}

break;

case I2C_CMD_WRITE: //數(shù)據(jù)寫入

……

}

return status;



圖3 I2C電機驅動設計圖

5 I2C應用程序設計

根據(jù)I2C驅動程序設計,要正確調用驅動程序,需要實現(xiàn)驅動的用戶空間調用函數(shù),主要是實現(xiàn)open和ioctl等調用函數(shù),因此在應用層的接口函數(shù)中也需要實現(xiàn)此函數(shù)。

i2c_Init()函數(shù)實現(xiàn)open函數(shù),調用驅動函數(shù)打開該設備驅動,定義一個數(shù)據(jù)結構體為:

typedef struct {

unsigned char dataSize;

unsigned char count;

unsigned char *reg;

void *value;

} I2C_Data;

該結構體主要用來實現(xiàn)用戶空間和內核空間的調用的數(shù)據(jù)交換,dataSize代表數(shù)據(jù)的大小,value是傳輸?shù)臄?shù)值,reg是傳輸命令參數(shù),函數(shù)有I2c_Read8()是向內核讀入一個字節(jié)數(shù)據(jù),I2c_Write8()是向內核寫入一個字節(jié)數(shù)據(jù),I2c_Read16()是向內核寫入2個字節(jié)數(shù)據(jù),I2c_Write16 ()是向內核寫入2個字節(jié)數(shù)據(jù),下面列舉一個函數(shù)說明具體的實現(xiàn)過程,

I2c_Write8(int fd unsigned char *reg, unsigned char *value, unsigned char count){

I2C_Data ptr; unsigned int cmd; int status;

ptr.dataSize = 1; ptr.reg = reg; ptr.count = count; ptr.value = value;

cmd = CMD_WRITE;

status = ioctl(fd, cmd, ptr);

if (status != 0)

printf("ioctl I2C_CMD_WRITE error!");

return status;

}

如圖4所示,函數(shù)最終通過條用ioctl這個函數(shù)實現(xiàn)對驅動的調用,其中參數(shù)fd是設備句柄,cmd讀寫控制是命令,其中宏定義I2C_CMD_SET_DEV_ADDR為地址設置命令,I2C_CMD_READ向內核讀取數(shù)據(jù)命令,I2C_CMD_WRITE向內核寫入數(shù)據(jù)命令。

其他3個讀寫函數(shù)實現(xiàn)過程類似,這幾個函數(shù)是數(shù)據(jù)寫入讀出的函數(shù)接口,方便應用層實現(xiàn)調用。



圖4云臺電機控制應用程序設計圖


6云臺電機控制應用程序設計

云臺很重要部分是電機轉動控制,本課題研究采用圖像界面實現(xiàn)人機交互,其中界面設計采用QT圖形界面軟件來設計,可以在界面操作實現(xiàn)電機的水平轉動、垂直轉動,逆時針轉動和順時針轉動,從而帶動視頻監(jiān)控的攝像頭朝不同方位轉動以及定位,如圖所示。根據(jù)協(xié)議,應用程序設計主要實現(xiàn)以下操作:

(1)獲取當前的垂直位置,函數(shù)接口為get_motor_curVertical_ptr (),返回垂直位置值;

(2)獲取當前的水平位置,函數(shù)接口為get_motor_curHorizontal_ptr (),返回水平位置值;

(3)設置垂直運行的停止位置,函數(shù)接口為set_motor_vertical_ptr (unsigned short ptr),參數(shù)ptr為設置的垂直停止位置值;

(4)設置水平運行的停止位置,函數(shù)接口為set_motor_horizontal_ptr (unsigned short ptr)參數(shù)ptr為設置的水平停止位置值;

(5)水平操作和垂直操作的啟動操作,接口函數(shù)為set_motor_opt(bool bVertical, bool bHorizontal),參數(shù)bVertical表示是否啟動垂直操作,bHorizontal表示是否啟動水平操作

(6)設置運行速度,函數(shù)接口為set_motor_speed(unsigned char vertical_speed, unsigned char horizontal_speed),參數(shù)vertical_speed控制垂直方向速度值,horizontal_speed控制水平方向速度值;

(7)設置電機運行方向,接口函數(shù)set_motor_direction(bool bVertical, bool bHorizontal),設置運行方向為順時針或者逆時針,參數(shù)bVertical為真表示垂直方向向上運動,為假表示向下運動;bHorizontal為真,表示水平方向逆時針,否則為順時針。

下面通過運動速度的接口函數(shù)set_motor_speed(),詳細介紹云臺控制接口函數(shù)的實現(xiàn)過程,電機轉動速度設置函數(shù)設置set_motor_speed(),其中函數(shù)參數(shù)vertical_speed為垂直方向運動速度;horizontal_speed為水平方向運動速度,局部變量reg用于制定控制類型,value設計為16位,其中高8位存放垂直轉動速度數(shù)值命令,低8為存放水平轉動速度數(shù)值,參數(shù)設置完后調用I2c_Write16()函數(shù),從而調用ioctl實現(xiàn)對驅動的調用,最終通過I2C總線控制電機,達到電機快速轉動、定位準確。

set_motor_speed(unsigned char vertical_speed, unsigned char horizontal_speed) {

int ret;

unsigned char reg;

unsigned short value=0;

reg = 3;

value = vertical_speed

value |= horizontal_speed;

ret = I2c_Write16 (fd, ®, &value);

if (ret != 0)

printf("set_motor_speed error");

return ret;

}

7 結束語

本系統(tǒng)設計實現(xiàn)了一款基于TMS320DM368的高清視頻監(jiān)控系統(tǒng)中的云臺電機控制設計,完成了i2c驅動程序的分析以及設計,并且完成了i2c應用程序的設計和云臺電機控制應用程序設計,達到了應用目的,取得了良好效果。

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

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉