欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
TDC-GP22源碼與資料分享,pin對pin替代MS1022 用于激光,超聲波測距
[打印本頁]
作者:
chengong510
時間:
2018-4-5 12:01
標題:
TDC-GP22源碼與資料分享,pin對pin替代MS1022 用于激光,超聲波測距
MS1022是一款高精度時間測量(TDC)電路,替代ACAM GP22,是 MS1002的升級產品,與 MS1002 管腳完全兼容,且兼容MS1002的所有功能。
MS1022內部集成了模擬比較器、模擬開關、施密特觸發器等器件,從而大大簡化了外圍電路。同時內部增加了第一波檢測功能,使抗干擾能力大大提高。內部比較器的 offset 可編程范圍為± 35 mV,可提高采樣精度。用戶可以讀取第一個回波脈沖的相對寬度來判斷接收信號強度的提示。通過這個提示可以判斷超聲波換能器異常、管壁覆蓋物增多、水中有氣泡等異常檢測。通過命令StartTOFRestart 可以完成一次超聲波時差(順流和逆流)的測量和數據的讀取,從而大大減少軟件的操作和電量的消耗。
0.jpg
(14.66 KB, 下載次數: 212)
下載附件
2018-4-5 17:08 上傳
0.jpg
(14.92 KB, 下載次數: 191)
下載附件
2018-4-5 17:08 上傳
測量范圍 1:
雙通道單精度模式 75ps
單通道雙精度模式 37ps
測量范圍 3.5ns(0ns)至 2.5μs
20ns 最小脈沖間隔,最多可接收 4 個脈沖
測量范圍 2:
單通道單精度模式 75ps 分辨率
雙精度模式 37ps,四精度模式 19ps 的分辨率
測量范圍 500ns 至 4ms(4M 高速時鐘下)
可測量 3 個脈沖,并可自動處理 3 個數據
模擬輸入電路:
斬波穩定低漂移比較器,具有可編程偏移電壓,±35 mV
第一波檢測
可測量第一波的脈沖寬度
內部集成用于輸入選擇的模擬開關
外部電路僅需要 2 個電阻和 2 個電容
溫度測量單元:
2 個或 4 個溫度傳感器,PT500/PT1000 或更高
內部集成施密特觸發器
應用外部施密特觸發器 16 位有效進度,應用內部低噪聲觸發器 17.5 位有效精度
超低功耗(每 30 秒測量一次時為 0.8A)
特殊功能
脈沖發生器,最多可生成 127 個脈沖
上升或/和下降沿觸發測量
高精度的 STOP 屏蔽窗口
低功耗 32K 振蕩器(500nA)
7×32 位的 EEPROM
綜述:
4 線 SPI 通信接口
工作電壓 2.5V 至 3.6V
工作溫度-40℃至+125℃
QFN32/LQFP32 封裝
激光測距單片機源程序如下:
#include <msp430x44x.h>
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long uint32_t;
uint8_t Intn_flag;
uint32_t Result_Reg0,Result_Reg1,Result_Reg2;
//uint8_t time_down_up_flag = 0;
//uint8_t MS1022_STATE = 0;
#define INIT 0X01
#define POWER_ON_RESET 0X02
#define START_TOF 0X03
#define START_TEMP 0X04
#define START_CAL_RESONATOR 0X05
#define START_CAL_TDC 0X06
#define START_TOF_RESTART 0X07
#define START_TEMP_RESTART 0X08
#define Init() Write_Order(0X70,INIT)
#define Power_On_Reset() Write_Order(0X50,POWER_ON_RESET)
#define Start_TOF() Write_Order(0X01,START_TOF)
#define Start_Temp() Write_Order(0X02,START_TEMP)
#define Start_Cal_Resonator() Write_Order(0X03,START_CAL_RESONATOR)
#define Start_Cal_TDC() Write_Order(0X04,START_CAL_TDC)
#define Start_TOF_Restart() Write_Order(0X05,START_TOF_RESTART)
#define Start_Temp_Restart() Write_Order(0X06,START_TEMP_RESTART)
#define SSN_1 P6OUT |= BIT2;
#define SSN_0 P6OUT &= (uint8_t)~BIT2;
#define SCK_1 P6OUT |= BIT0;
#define SCK_0 P6OUT &= (uint8_t)~BIT0;
#define SI_1 P1OUT |= BIT6;
#define SI_0 P1OUT &= (uint8_t)~BIT6;
#define RSTN_1 P3OUT |= BIT1;
#define RSTN_0 P3OUT &= (uint8_t)~BIT1;
#define SO_0_1 (P1IN&BIT7) //端口電平查詢
#define ACLK_ON P1SEL |= BIT5;
#define ACLK_OFF P1SEL &= (uint8_t)~BIT5;
void GPIO_Config(void);
void System_Config(void);
void Delay_1us(unsigned int t);
void Delay_us(uint16_t t);
void Delay_ms(uint16_t t);
void SPI_Init(void);
void SPI_ENABLE(void);
void SPI_DISABLE(void);
void SEND_0(void);
void SEND_1(void);
void SPI_WRITE8(uint8_t wbuf8);
uint8_t SPI_READ8(void);
void SPI_WRITE32(uint32_t wbuf32);
uint32_t SPI_READ32(void);
uint16_t SPI_READ16(void);
void Write_Reg(uint8_t RegNum,uint32_t RegData);
uint32_t Read_Reg(uint8_t RegNum);
uint8_t Read_PW1ST(void);
uint8_t Read_REG_1(void);
void Write_Order(uint8_t Order,uint8_t Order_Num);
void MS1022_Config(void);
void MS1022_PWM(void);
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: 主函數
代碼編制:
******************************************************************/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
System_Config(); //系統初始化
MS1022_Config(); //MS1002初始化
ACLK_ON;
_EINT();//GIE使能 中斷使能
while(1)
{
MS1022_PWM();
}
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: IO口中斷,一個ms1002 intn中斷
代碼編制:
******************************************************************/
#pragma vector=PORT2_VECTOR
__interrupt void Port2_Int(void)
{
LPM3_EXIT;
if((P2IFG & 0x02) == 0x02)
{
for(unsigned int i = 0;i<300;i++);
if((P2IFG & 0x02) == 0x02)
{
Intn_flag = 1;
}
P2IFG &= (uint8_t)~BIT1;
}
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: IO口初始化
代碼編制:
******************************************************************/
void GPIO_Config(void)
{
P1DIR = 0X6F;
P1OUT = 0XFF;
P1IES = 0X08; //高到低轉變置標志
P1IE = 0X08;
P1IFG = 0X00;
P2DIR = 0XDD;//P2.4、P2.5、P2.6輸出
P2OUT = 0X32;
P2IES = 0X02; //init
P2IE = 0X02;
P2IFG = 0X00;
P3DIR = 0XFF;
P3OUT = 0X00;
P4DIR = 0XFd;
P4OUT = 0X02;
P6DIR = 0XFF;
P6OUT = 0X01;
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: 系統初始化
代碼編制:
******************************************************************/
void System_Config(void)
{
FLL_CTL0 |= DCOPLUS + XCAP10PF;
SCFI0 |= FN_2; //
SCFQCTL = 30; // (121+1) x 32768 x 2 = 7.99 MHz 8m=121, 4M=60; 2M=30
GPIO_Config(); //IO口初始化
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: 延時函數
代碼編制:
******************************************************************/
void Delay_us(uint16_t t)
{
while(t--)
{
}
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: 延時函數
代碼編制:
******************************************************************/
void Delay_ms(uint16_t t)
{
uint16_t i;
for(i=0;i<t;i++)
{
Delay_us(1000);
}
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: 延時函數
代碼編制:
******************************************************************/
void Delay_1us(unsigned int t)
{
while(t--)
{
// _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
// _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
// _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
}
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: SPI初始化
代碼編制:
******************************************************************/
void SPI_Init(void)
{
SSN_1; //SSN置高、關閉與MS1022通訊
SI_0; //默認MS1022數據輸入為低
SCK_0; //默認MS1022時鐘為低
Delay_1us(2);
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: SPI通訊使能
代碼編制:
******************************************************************/
void SPI_ENABLE(void)
{
SSN_0; //SSN置低、開始與MS1022通訊
Delay_1us(2);
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: SPI通訊關閉 0-1-0
代碼編制:
******************************************************************/
void SPI_DISABLE(void)
{
SSN_0;
Delay_1us(1);
SSN_1;
Delay_1us(1);
SSN_0;
Delay_1us(1);
SSN_1;
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: 發送位“0”
代碼編制:
******************************************************************/
void SEND_0(void)
{
SI_0;
SCK_1;
SCK_0;
//_NOP();
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: 發送位“1”
代碼編制:
******************************************************************/
void SEND_1(void)
{
SI_1;
SCK_1;
SCK_0;
//_NOP();
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: SPI寫一個字節 8位
代碼編制:
******************************************************************/
void SPI_WRITE8(uint8_t wbuf8)
{
uint8_t cnt,MSB8 = 0x80;
//SPI_ENABLE();
SCK_0;
for(cnt = 8;cnt > 0;cnt--)
{
if(wbuf8 & MSB8)
SEND_1();
else
SEND_0();
wbuf8 <<= 1;
}
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: SPI讀一個字節 8位
代碼編制:
******************************************************************/
uint8_t SPI_READ8(void)
{
uint8_t cnt;
uint8_t LSB8 = 0x01;
uint8_t rbuf8 = 0x00;
for(cnt = 8;cnt > 0;cnt--)
{
rbuf8 <<= 1;
SCK_1;
//_NOP();
if( SO_0_1 )
rbuf8 |= LSB8;
//_NOP();
SCK_0;
//_NOP();
}
return rbuf8;
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: SPI寫4個字節 32位
代碼編制:
******************************************************************/
void SPI_WRITE32(uint32_t wbuf32)
{
uint8_t cnt;
uint32_t MSB32 = 0x80000000;
for(cnt=32;cnt>0;cnt--)
{
if(wbuf32 & MSB32)
SEND_1();
else
SEND_0();
wbuf32 <<= 1;
}
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: SPI都4個字節,32位
代碼編制:
******************************************************************/
uint32_t SPI_READ32(void)
{
uint8_t cnt;
uint32_t LSB32 = 0x00000001;
uint32_t rbuf32 = 0x00000000;
for(cnt=32;cnt>0;cnt--)
{
rbuf32 <<=1;
SCK_1;
//_NOP();
if( SO_0_1 )
rbuf32 |= LSB32;
//_NOP();
SCK_0;
//_NOP();
}
return rbuf32;
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: SPI讀2個字節,16位
代碼編制:
******************************************************************/
uint16_t SPI_READ16(void)
{
uint8_t cnt;
uint16_t LSB16 = 0x0001;
uint16_t rbuf16 = 0x0000;
for(cnt=16;cnt>0;cnt--)
{
rbuf16 <<=1;
SCK_1;
//_NOP();
if( SO_0_1 )
rbuf16 |= LSB16;
//_NOP();
SCK_0;
//_NOP();
}
return rbuf16;
}
/*****************************************************************
函數名:
入口參數:
參數說明: RegNum 寄存器號:0、1~7;RegData 往寄存器內寫的數據
出口參數:
參數說明:
功能: 寫寄存器
代碼編制:
******************************************************************/
void Write_Reg(uint8_t RegNum,uint32_t RegData)
{
SPI_Init();
SPI_ENABLE();
SPI_WRITE8(0x80|RegNum);
SPI_WRITE32(RegData);
SPI_DISABLE();
}
/*****************************************************************
函數名:
入口參數:
參數說明: RegNum 寄存器號 0-7
出口參數:
參數說明:ReadData 寄存器數據
功能: 讀寄存器
代碼編制:
******************************************************************/
uint32_t Read_Reg(uint8_t RegNum)
{
uint32_t ReadData = 0;
SPI_Init();
SPI_ENABLE();
SPI_WRITE8(0xB0|RegNum);
ReadData = SPI_READ32();
SPI_DISABLE();
return ReadData;
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:ReadData PW1ST寄存器數據
功能: 讀PW1ST寄存器
代碼編制:
******************************************************************/
uint8_t Read_PW1ST(void)
{
uint8_t ReadData = 0;
SPI_Init();
SPI_ENABLE();
SPI_WRITE8(0xB8);
ReadData = SPI_READ8();
SPI_DISABLE();
return ReadData;
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:ReadData 寄存器數據
參數說明:
功能: 讀寄存器1的高8位
代碼編制:
******************************************************************/
uint8_t Read_REG_1(void)
{
uint8_t ReadData = 0;
SPI_Init();
SPI_ENABLE();
SPI_WRITE8(0xB5);
ReadData = SPI_READ8();
SPI_DISABLE();
return ReadData;
}
/*****************************************************************
函數名:
入口參數:Order 命令;Order_Num 命令序號 用作其他程序用(自定義的)
參數說明:
出口參數:
參數說明:
功能: 寫命令,如0x02 溫度測量
代碼編制:
******************************************************************/
void Write_Order(uint8_t Order,uint8_t Order_Num)
{
SPI_Init();
SPI_ENABLE();
SPI_WRITE8(Order);
SPI_DISABLE();
//MS1022_STATE = Order_Num;
}
/*****************************************************************
函數名:
入口參數:
參數說明:
出口參數:
參數說明:
功能: MS1022 6個寄存器初始化
代碼編制:
******************************************************************/
void MS1022_Config(void)
{
uint32_t REG0,REG1,REG2,REG3,REG4,REG5,REG6;
REG0=0x03456801;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
MSP430單片機代碼:
激光測距.7z
(5.2 MB, 下載次數: 509)
2023-6-5 15:20 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
MS10222資料.pdf
(1.96 MB, 下載次數: 366)
2023-6-5 15:19 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
WINGTECH
時間:
2018-5-17 21:23
請問, 最快采集周期是多少?
作者:
jacobzhg
時間:
2018-7-30 14:25
精度能到多少?
作者:
cgc2003
時間:
2018-12-4 13:49
謝謝分享!!!!!!!!!!!!!!!!
作者:
kk00aa
時間:
2018-12-5 06:50
這顆料看pdf是不錯 不知道用起來怎么樣
作者:
xinyang666
時間:
2018-12-14 10:20
不錯,不知性能如何
作者:
854619267
時間:
2019-1-2 22:02
好用的芯片,便宜實惠!
作者:
夢幻2呱呱
時間:
2019-4-8 16:11
謝謝樓主分享!!!
作者:
li3007liuu
時間:
2019-7-11 15:28
可以接200kHZ探頭嗎?
作者:
MACwxiang
時間:
2019-8-9 21:56
有沒有更纖詳細點的資料,急求
作者:
gbf0871
時間:
2019-8-13 13:52
謝謝樓主分享!!!
作者:
鵬博士PBs
時間:
2019-8-13 15:43
看起來應該還是蠻不錯的
作者:
鵬博士PBs
時間:
2019-8-13 15:52
應該還是蠻不錯的哈
作者:
鵬博士PBs
時間:
2019-8-13 16:22
感謝樓主分享哦
作者:
lanlanzhilian
時間:
2019-12-12 15:45
這是個好資料,
作者:
lanlanzhilian
時間:
2019-12-12 15:46
這是個好資料,
作者:
oceanx
時間:
2019-12-15 15:36
學習了,謝謝樓主!
作者:
zjc31415926
時間:
2020-1-2 15:10
第一個主是PDF啊
作者:
kky_123
時間:
2020-4-22 13:22
謝謝分享
作者:
markbob123
時間:
2020-6-2 13:26
支持樓主,支持樓主,厲害厲害
作者:
Macro_Chan
時間:
2020-11-8 23:08
精度還是比較唏噓,一般用途還是夠的。
作者:
shaobobox
時間:
2020-11-26 16:07
樓主又帶電路又帶算法,一定要點贊
作者:
bncnqp
時間:
2020-12-25 21:59
精度能達到多少?
作者:
netzhang
時間:
2021-3-22 09:26
不知道這顆料用的效果如何,用過的人來反饋一下
作者:
bwxz
時間:
2021-11-5 17:00
所以實測精度能達到多少?假如我測一個1ms的間距
作者:
JON0115
時間:
2021-12-29 17:25
這顆料看pdf是不錯 不知道用起來怎么樣
作者:
zhangfei
時間:
2022-10-22 15:25
正好用到,下來研究下,謝樓主分享!
作者:
liixaofei5
時間:
2023-8-19 10:47
感謝分享,不過程序在我這里還是得不到我需要的結果。最終還是按照官網的手冊解決問題,目前信號源測量能到10ns了,信號源給出最小脈寬了。
作者:
angeloliou
時間:
2024-10-25 11:34
謝謝分享,不知道測距效果好不好。
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1