色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于I2C總線與芯片實現高清視頻監控中的云臺電機驅動系統設計

電子設計 ? 來源:郭婷 ? 作者:電子設計 ? 2019-06-08 08:50 ? 次閱讀

1 引言

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

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

2 高速公路視頻監控系統以及云臺電機整體設計

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

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

3 I2C硬件構成和通信協議

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

基于I2C總線與芯片實現高清視頻監控中的云臺電機驅動系統設計

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

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

4 I2C的Linux和ARM驅動設計

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

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

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

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

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

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

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

基于I2C總線與芯片實現高清視頻監控中的云臺電機驅動系統設計

(2)云臺電機驅動設計

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

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

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

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: //數據讀取

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

if(status==0) {

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

if(status==0) {

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

if(status==0) {

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

}

}

}

break;

case I2C_CMD_WRITE: //數據寫入

……

}

return status;

基于I2C總線與芯片實現高清視頻監控中的云臺電機驅動系統設計

5 I2C應用程序設計

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

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

typedef struct {

unsigned char dataSize;

unsigned char count;

unsigned char *reg;

void *value;

} I2C_Data;

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

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所示,函數最終通過條用ioctl這個函數實現對驅動的調用,其中參數fd是設備句柄,cmd讀寫控制是命令, 其中宏定義I2C_CMD_SET_DEV_ADDR為地址設置命令,I2C_CMD_READ向內核讀取數據命令, I2C_CMD_WRITE向內核寫入數據命令。

基于I2C總線與芯片實現高清視頻監控中的云臺電機驅動系統設計

其他3個讀寫函數實現過程類似,這幾個函數是數據寫入讀出的函數接口,方便應用層實現調用。

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

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

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

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

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

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

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

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

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

下面通過運動速度的接口函數set_motor_speed(),詳細介紹云臺控制接口函數的實現過程,電機轉動速度設置函數設置set_motor_speed(),其中函數參數vertical_speed為垂直方向運動速度;horizontal_speed為水平方向運動速度,局部變量reg用于制定控制類型,value設計為16位,其中高8位存放垂直轉動速度數值命令,低8為存放水平轉動速度數值,參數設置完后調用I2c_Write16()函數,從而調用ioctl實現對驅動的調用,最終通過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《《8;

value |= horizontal_speed;

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

if (ret != 0)

printf(“set_motor_speed error”);

return ret;

}

通過實現人機交互操作程序,實現電機的向上轉動、向下轉動,逆時針轉動和順時針轉動,通過調用各種操作的接口函數,實現對I2C應用程序的調用,最用通過ioctl實現對電機的控制,從而帶動視頻監控的攝像頭朝不同方位轉動以及定位,具體實現如圖4所示。

基于I2C總線與芯片實現高清視頻監控中的云臺電機驅動系統設計

7 結束語

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


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    456

    文章

    50930

    瀏覽量

    424605
  • 視頻監控
    +關注

    關注

    17

    文章

    1711

    瀏覽量

    65048
  • 總線
    +關注

    關注

    10

    文章

    2891

    瀏覽量

    88162
收藏 人收藏

    評論

    相關推薦

    高清視頻監控I2C總線臺電機控制設計

    社會的發展,汽車增量不斷增多,道路上各種違章的車輛也逐漸增多,為了構建一個平安交通和智能交通,視頻監控系統在交通行業的應用也越來越多,為了能全方位的對高速公路進行監控,
    發表于 08-01 23:29 ?1294次閱讀

    GPIO模擬I2C總線驅動設計與實現

    I2C總線簡單方便,是我們經常使用的一種總線。但有時候我們的MCU沒有足夠多的I2C控制器來實現我們的應用,所幸我可以使用普通的GPIO引腳
    發表于 12-14 14:19 ?5406次閱讀
    GPIO模擬<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>的<b class='flag-5'>驅動</b>設計與<b class='flag-5'>實現</b>

    求一種高清視頻監控系統臺電機控制設計方案

    系統設計實現了一款基于TMS320DM368的高清視頻監控系統
    發表于 05-14 06:11

    一款基于TMS320DM368的高清視頻監控系統臺電機控制設計

    。結語本系統實現了一款基于TMS320DM368的高清視頻監控系統
    發表于 10-19 06:30

    i2c總線ppt(I2C總線器件應用)

    I2C總線器件應用第一節 I2C總線器件應用概述I2C總線工作原理
    發表于 08-13 17:34 ?0次下載

    視頻解碼技術I2C總線控制核的實現

    本文介紹了I2C總線的通訊特點,簡要說明了I2C總線的協議規范和特點,并針對Philip公司視頻解碼系列
    發表于 05-27 11:55 ?17次下載

    I2C總線

    I2C BUS(Inter IC BUS)是NXP 推出的芯片間串行傳輸總線,它以2 根連線實現了完善的雙向同步數據傳送,可以極方便地構成多
    發表于 11-03 11:26 ?49次下載

    基于TMS320DM642的視頻處理系統I2C總線的應用

    本文介紹了基于TMS320DM642和Philips視頻編解碼芯片視頻處理系統,給出了視頻接口的連接圖。在分析
    發表于 08-05 15:39 ?49次下載

    I2C總線在Linux系統驅動設計

    介紹I2C總線的基本概念和工作原理,敘述I2C總線擴展器件ZLG7290的功能特點。在以S3C2410為微控制器,ZLG7290為
    發表于 12-29 16:52 ?40次下載

    I2C總線驅動程序的實現

    I2C總線驅動程序的實現 I2C 驅動程序的簡介本驅動
    發表于 09-26 17:25 ?5753次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b><b class='flag-5'>驅動</b>程序的<b class='flag-5'>實現</b>

    基于CPLD的I2C總線接口設計

    在電路設計I2C總線是比較常用的兩線式串行通信方式,大多數的CPU都擅長于并口操作,不具備直接操作I2C總線接口的能力。為了使不具備
    發表于 02-12 16:11 ?95次下載
    基于CPLD的<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>接口設計

    NIOS實現I2C總線

    I2C 總線實現關鍵是SDA,他是雙向線,如果對與一個芯片只寫而不讀,I2C 實現起來很容易.
    發表于 11-01 14:28 ?38次下載

    I2C總線應用系統設計運用

    I2C總線應用系統設計運用
    發表于 09-22 11:44 ?10次下載
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>應用<b class='flag-5'>系統</b>設計運用

    分析I2C總線臺電機控制設計

    視頻監控系統在交通行業的應用也越來越多,為了能全方位的對高速公路進行監控,視頻監控的高速球也應
    發表于 10-15 10:15 ?1次下載
    分析<b class='flag-5'>I2C</b><b class='flag-5'>總線</b><b class='flag-5'>云</b><b class='flag-5'>臺電機</b>控制設計

    I2C系統SW Architecture

    通過 i2c-core 將 i2c 設備驅動i2c 總線驅動進行了分離,從而使得
    的頭像 發表于 07-22 16:01 ?965次閱讀
    <b class='flag-5'>I2C</b>子<b class='flag-5'>系統</b>SW Architecture
    主站蜘蛛池模板: 亚州三级久久电影| 乌克兰xxxxx| 国产色青青视频在线观看| sihu国产精品永久免费| 2021精品乱码多人收藏| 伊人角狠狠狠狠| 亚洲永久在线观看| 亚洲人成无码久久久AAA片| 胸太大被男同桌吃好爽| 羲义嫁密着中出交尾gvg794| 特级毛片内射WWW无码| 熟女人妻-蜜臀AV-首页| 四虎国产精品免费观看视频| 深夜释放自己污在线看| 四虎影视国产精品亚洲精品hd| 色一伦一情一区二区三区| 少女10声大哥喊退色狼| 性美国人xxxxx18| 亚洲欧美高清在线| 伊人国产在线观看| 69人体阴展网| my pico未删减在线观看| 成激人情在线影院920| 国产AV午夜精品一区二区入口| 国产乱码一区二区三区| 黑丝美女娇喘| 理论片午午伦夜理片2021| 欧美极品尿交| 三级网站视频| 亚洲福利精品电影在线观看| 一本之道高清视频在线观看| 56prom在线精品国产| Chineseman瘦老头77| 国产AV精品一区二区三区漫画| 国产美女视频一区二区二三区| 好嗨哟在线看片免费| 恋夜秀场支持安卓版全部视频国产 | 国产成人精选免费视频| 国产免费福利在线视频| 精品一区二区三区色花堂| 美女张开让男生桶|