999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

TDC—GP22時間數字芯片關鍵編程算法研究與實現

2018-10-11 08:04:50陳玉
軟件工程 2018年8期
關鍵詞:單片機

陳玉

摘 要:TDC-GP22芯片是一款皮秒級高精度時間數字轉換芯片,由于TDC-GP22內部寄存器種類繁多,所以芯片編程操作相對較復雜。為此根據TDC-GP22的SPI接口特點,并結合AVR單片機主機優勢,用高級語言編制符合SPI接口協議程序,實現對TDC-GP22的兩種主要操作,一種是按照SPI協議對芯片的寄存器進行讀取數據操作,另一種是根據SPI協議數據循環特點對芯片寄存器進行寫入數據操作。TDC-GP22實驗測試結果表明所編制程序運行完全穩定可行。

關鍵詞:芯片;高級語言;單片機;接口

中圖分類號:TP31 文獻標識碼:A

1 引言(Introduction)

TDC-GP22芯片是德國ACAM公司推出的一款高分辨率時間數字轉換芯片,高分辨率時間差計算使得TDC-GP22可以用于對時間精度要求嚴格的場合,如激光測距、電纜長度測量及超聲波流量計等領域。此芯片可以通過單片機讀寫其內部寄存器來完成時間數字轉換,由于該芯片官方文檔資料比較零散,在芯片的開發和使用上帶來很多障礙,軟件程序難以調試,和單片機難以建立通信。同時TDC-GP22芯片是通過SPI(Serial Peripheral Interface)協議接口和主機建立通信,所以芯片編程上的主機程序需要嚴格遵循SPI接口協議來對TDC-GP22內部寄存器進行正確讀寫,從而完成TDC-GP22的時間數字轉換過程。

2 TDC-GP22的SPI接口協議(SPI interface protocol

of TDC-GP22 )

2.1 SPI通信協議接口簡介

SPI的中文名為串行外圍接口,該協議接口是由摩托羅拉公司提出的通信接口技術;SPI是一種高速、全雙工、同步串行總線,SPI接口只占用可編程芯片的四個腳位,這四個腳位分別為主機輸入從機輸出(MISO)、主機輸出從機輸入(MOSI)、從機選擇線(SSN)及串行時鐘(SCK)。SPI協議接口的優點主要表現為信號連接線少、全雙工通信、協議相對簡單及數據傳輸速率較高。SPI協議接口主要應用在一些FLASH型可編程芯片,如模數轉換器、信號處理芯片和各類單片機等。

2.2 SPI通信協議接口工作原理

SPI通信雙方為主從方式,既SPI通信雙方一方為主設備另一方為從設備,SPI通信網絡中可以有多個從機,但是主機只能為一個,主機通過控制從機的SSN片選端來和相應的從機建立數據通信;SPI通信雙方中的主機和從機的物理連接只要相應功能引腳對應連接即可,既主機MISO連接從機MISO,其他三類引腳也以此互相連接。SPI中的主從機的雙方移位寄存器連接成一個環形結構,主從機的數據通信通過在主機時鐘的控制下進行每次兩個8bit數據的移出和移入,數據傳輸時高位在前低位在后。

2.3 TDC-GP22的SPI

TDC-GP22采用4線制SPI接口,SSN需要強制置高電平,在每次讀寫序列之間SSN保持高電平至少要50ns;TDC-GP22只支持如下SPI模式,時鐘極性位(Clock Polarity Bit)為0和時鐘相位(Clock Phase Bit)為1。

3 TDC-GP22的SPI主機選擇(SPI host selection of

TDC-GP22)

SPI主機的選擇最好選擇引腳功能具有SPI功能的各類單片機,當然對于沒有SPI引腳功能的單片機也可以使用,只不過這類單片機需要在軟件程序中進行額外的SPI功能模擬,相對給開發和使用上帶來一些難度。為了簡化單片機軟件程序和SPI通信中主從機的硬件電路,此處選擇ATMEL公司的ATmega128a低功耗單片機[1];ATmega128a單片機自帶SPI接口,該單片機為高性能低功耗8位單片機,工作于16MHz時性能高達16MIPS,ATmega128a自帶128K可編程Flash存儲,這樣方便使用C語言進行大容量單片機編程。ATmega128a可在3.3V電壓下穩定工作,TDC-GP22正常工作電壓也為3.3V[2],這樣兩者SPI引腳就可以直接進行連接。

4 TDC-GP22和AVR單片機的SPI通信算法(SPI

communication algorithm between TDC-GP22

and AVR)

AVR單片機和TDC-GP22時間數字芯片之間以SPI方式通信,其中AVR單片機為主機,TDC-GP22為從機。

4.1 TDC-GP22算法前導

TDC-GP22有七個32位的配置寄存器,每個寄存器的高24位是用作配置,是只可以寫入的,這七個寄存器用于配置TDC-GP22的相應操作。同時TDC-GP22還有相應可讀狀態的結果寄存器和狀態寄存器[3,4],TDC-GP22的測量結果和測量狀態都可以通過發送操作碼0xBX從可讀寄存器中讀取。

4.2 TDC-GP22算法詳解

TDC-GP22在正常運行前,必須先對其七個配置寄存器進行相應的模式配置,七個配置寄存器的配置是相互聯系制約的,在寄存器參數的配置上不能有任何沖突,否則TDC-GP22會出現運行異常的狀況。下面代碼主要是七個配置寄存器的配置示例。

gp22_wr_config_reg(0x80,0x00242000); //最大測量時間2xTref=2μs

gp22_wr_config_reg(0x81,0x19490000); //在測量模式1下Stop CH2–Stop CH1

gp22_wr_config_reg(0x82,0xE0000000); //通過Timeout給出中斷

gp22_wr_config_reg(0x83,0x00000000);

gp22_wr_config_reg(0x84,0x20000000);

gp22_wr_config_reg(0x85,0x10000000); //EN_STARTNOISE=1,switch on

gp22_wr_config_reg(0x86,0x00000000);

gp22_send_1byte(0x70); //初始化

PORTF|=(1<<2); PORTF&=~(1<<2);

//給start引腳一個虛擬開始信號

上述代碼中為了測試stop2-stop1引腳時間差,所以先給start引腳一個虛擬開始信號,然后TDC-GP22的stop2和stop1引腳才開始工作。

下面示例函數gp22_send_1byte(unsigned char gp22_opcode_byte)可以按照SPI協議向TDC-GP22寄存器寫入相應數據。

void gp22_send_1byte(unsigned char gp22_opcode_byte)

{

PORTB&=~(1<<0); //TDC-GP22的SS位置低

SPDR=gp22_opcode_byte;

while(!(SPSR&(1<

delay_us(8);

PORTB|=(1<<0); //將SS位置高

}

上述函數中主機往SPDR寫入數據以移位到從機中去,串行發送結束后,SPIF置位,若此時寄存器SPCR的SPIE和全局中斷使能位置位,SPI中斷即產生。

下面示例函數gp22_read_1_bytes(unsigned char read_opcode,unsigned char read_addr)為讀取TDC-gp22寄存器中八位數據算法;函數中SPDR=0xFF是每次虛寫一次寄存器,只有虛寫一次才能保證單片機和TDC-gp22二者的寄存器數據循環移位[5]。

unsigned char gp22_read_1_bytes(unsigned char read_opcode,unsigned char read_addr)

{

unsigned char read_opcode_addr=read_opcode|read_addr;

PORTB&=~(1<<0); //ss置低

SPDR=read_opcode_addr;

while(!(SPSR&(1<

delay_us(8);

SPDR=0xFF; //虛寫一次,推出數據

while(!(SPSR&(1<

delay_us(8);

return SPDR; //主機讀取數據

PORTB|=(1<<0); //將ss位置高

}

如下函數gp22_read_status_bytes()為讀取TDC-GP22中狀態寄存器算法,算法中用到了循環結構,這樣可以保證讀取TDC-GP22狀態寄存器的多個字節數據[6]。

unsigned int gp22_read_status_bytes()

{

int n;

unsigned int Result_read=0;

unsigned char n_bytes=2;

unsigned char read_opcode_addr=0xB0|0x04;

PORTB&=~(1<<0); //ss位置低

SPDR=read_opcode_addr;

while(!(SPSR&(1<

delay_us(8);

SPDR=0xFF; //虛寫一次,推出數據

while(!(SPSR&(1<

delay_us(8);

Result_read=SPDR; //主機讀取數據

for(n=1;n

SPDR=0xFF; //虛寫一次,推出數據

while(!(SPSR&(1<

delay_us(8);

Result_read=Result_read<<8;

Result_read |=SPDR; }

PORTB|=(1<<0); //將ss位置高

return Result_read;

}

以下函數gp22_wr_config_reg(unsigned char opcode_address,unsigned long config_reg_data)為寫狀態寄存器的示例算法,該算法中按照SPI協議規范,先寫高位字節,然后再寫低位字節。

void gp22_wr_config_reg(unsigned char opcode_address,

unsigned long config_reg_data)

{

unsigned char Data_Byte_Lo=config_reg_data;

//自動截取低8位進行賦值

unsigned char Data_Byte_Mid1=config_reg_data>>8;

unsigned char Data_Byte_Mid2=config_reg_data>>16;

unsigned char Data_Byte_Hi=config_reg_data>>24;

PORTB&=~(1<<0); //ss位置低

SPDR=opcode_address;

while(!(SPSR&(1<

delay_us(8);

SPDR=Data_Byte_Hi;

while(!(SPSR&(1<

delay_us(8);

SPDR=Data_Byte_Mid2;

while(!(SPSR&(1<

delay_us(8);

SPDR=Data_Byte_Mid1;

while(!(SPSR&(1<

delay_us(8);

SPDR=Data_Byte_Lo;

while(!(SPSR&(1<

delay_us(8);

PORTB|=(1<<0); //將ss位置高

}

5 實驗測試過程(Experimental testing process)

為了驗證上述算法的準確性,專門用TDC-GP22進行了雙絞線長度測試實驗;由于雙絞線可看作傳輸線,所以測量時向被測雙絞線注入一定寬度的入射矩形脈沖[7],如果被測雙絞線終端開路就會產生矩形脈沖的正反射,同時將入射矩形脈沖和反射脈沖分別送入TDC-GP22的stop1、stop2引腳,通過計算stop2-stop1的時間差并按如下公式即可計算出開路雙絞線的長度。

其中,L為被測電纜長度,V為脈沖信號在電纜中的傳播速度,一般V為0.66—0.85倍光速[8],約為200m/μs,?t為入射脈沖與反射脈沖的時間差,具體測試數據見表1。

表1 測試結果

Tab.1 Test results

實長 時間差 測試長度 測試狀態

5m 0.048μs 4.8m 開路

10m 0.1μs 10m 開路

20m 0.195μs 19.5m 開路

35m 0.346μs 34.6m 開路

100m 0.97μs 97m 開路

表1測試結果顯示雙絞線測試長度的誤差在10%以內,該誤差范圍符合實際工程需求,測試結果也驗證了TDC-GP22算法準確穩定。

6 結論(Conclusion)

TDC-GP22的SPI協議接口編程必須嚴格按照SPI接口數據環狀傳輸的特點進行編程控制,否則主機和從機難以建立有效的通信。TDC-GP22主機的選擇有多種方案,這里選用了AVR系列單片機,并用C語言做了編程示范,當然也可以選用其他廠家其他型號的單片機作為控制主機,并結合相應的程序語言進行SPI接口編程。同時用測量雙絞線長度的實驗進一步驗證了算法的準確性。

參考文獻(References)

[1] Microchip Technology.ATmega128A datasheet complete[EB/OL].https://www.microchip.com/wwwproducts/en/ATmega128A,2016-12-10.

[2] Acam-messelectronic gmbh.TDC-GP22 ultrasonic flow converter datasheet[EB/OL].https://ams.com/tdc-gp22,2014-03-13.

[3] 莫朗,朱建良,薄煜明.基于TDC-GP22的室內定位系統的設計及實現[J].電子設計工程,2017,25(18):168-177.

[4] 劉宇杰,李斌,劉振凱,等.基于TDC-GP22的超聲波流量計設計[J].工業控制計算機,2015,28(3):166-170.

[5] 崔永俊,劉陽,楊兵.基于銣原子鐘和雙TDC-GP2的高精度時間基準測量系統的設計[J].電子器件,2017,40(5):1072-1077.

[6] 韋乃棋,陳自力,朱安石,等.基于TDC的無人機數據鏈抗干擾技術研究[J].測控技術,2013,32(3):124-134.

[7] 王紅亮,楊曉.AVR單片機與串行A/D的SPI接口設計[J].電測與儀表,2008,45(9):46-48.

[8] 尹文芹,施韶華,劉音華.基于FPGA實現TDC的布局布線優化方法研究[J].時間頻率學報,2018,41(1):27-36.

作者簡介:

陳 玉(1975-),男,碩士,實驗師.研究領域:計算機應用技術,嵌入式開發.

猜你喜歡
單片機
基于單片機的SPWM控制逆變器的設計與實現
電子制作(2019年13期)2020-01-14 03:15:28
基于單片機的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機的多功能智能插排
電子制作(2019年11期)2019-07-04 00:34:48
基于單片機的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
小議PLC與單片機之間的串行通信及應用
電子制作(2018年12期)2018-08-01 00:48:04
MSP430單片機在仿真中要注意的幾點問題
電子制作(2017年9期)2017-04-17 03:00:53
基于單片機的平衡控制系統設計
電子制作(2017年19期)2017-02-02 07:08:27
基于單片機的三維LED點陣設計
電子制作(2016年21期)2016-05-17 03:52:51
Microchip推出兩個全新PIC單片機系列
基于Proteus的單片機控制系統的仿真設計
主站蜘蛛池模板: 国产1区2区在线观看| 欧美第二区| 欧美中文字幕在线视频| 久久综合亚洲鲁鲁九月天| 欧美激情第一区| 波多野结衣久久高清免费| 国产精品视屏| 99人体免费视频| 亚洲中文字幕97久久精品少妇| 欧美一级黄片一区2区| 激情亚洲天堂| 亚洲精品欧美日本中文字幕| 男女男精品视频| 亚洲国产黄色| 久久免费成人| 亚洲视频欧美不卡| 国产精品露脸视频| 国产精品久久久久鬼色| 中文字幕日韩视频欧美一区| 白浆视频在线观看| 国产乱子伦精品视频| 国产91小视频在线观看| 中文字幕亚洲乱码熟女1区2区| 成人福利在线观看| 亚洲欧美国产高清va在线播放| 99久久国产综合精品女同| 久青草网站| 四虎永久免费网站| 欧美精品二区| 全部免费特黄特色大片视频| 538国产在线| 欧美亚洲国产精品第一页| 国产第一页亚洲| 女人18毛片水真多国产| 热re99久久精品国99热| 久久综合伊人 六十路| 黄色污网站在线观看| 国产精品一线天| 欧美精品一区二区三区中文字幕| 久久综合色播五月男人的天堂| 国产成人高清精品免费软件| 精品久久蜜桃| 手机在线国产精品| 国模私拍一区二区| 久久国产精品无码hdav| 亚洲国产系列| 精品黑人一区二区三区| 日本在线视频免费| 在线精品视频成人网| 国产精品福利导航| 欧美人在线一区二区三区| 青青操国产视频| www.狠狠| 国产综合在线观看视频| 激情亚洲天堂| 成人精品视频一区二区在线 | 视频一区视频二区日韩专区| 91九色最新地址| 亚洲日韩久久综合中文字幕| 青青久久91| 久久亚洲日本不卡一区二区| 日本www色视频| 成人国产一区二区三区| 2022精品国偷自产免费观看| 国产精品亚洲精品爽爽| 国产激爽大片高清在线观看| 日韩中文无码av超清| 香蕉久久国产精品免| 波多野结衣二区| 日韩av电影一区二区三区四区| 精品三级网站| 99无码中文字幕视频| 亚洲热线99精品视频| 98超碰在线观看| 54pao国产成人免费视频| 欧美色视频在线| av在线5g无码天天| 依依成人精品无v国产| 在线a视频免费观看| 久久黄色视频影| 色135综合网| 成年人久久黄色网站|