LIS3DETR感測器驅動除錯

2021-06-29 05:21:58 字數 1540 閱讀 4471

目前使用了感測器的兩個功能,乙個是讀取x,y,z軸的原資料,另乙個是設定軸資料的差值,超過差值產生中斷通知

1.讀取x,y,x的原資料,基本可以參考st的參考**實現

//inizialize mems sensor

//set odr (turn on device)

response = lis3dh_setodr(lis3dh_odr_100hz);

if(response==0)

//set powermode

response = lis3dh_setmode(lis3dh_normal);

if(response==0)

//set fullscale

response = lis3dh_setfullscale(lis3dh_fullscale_2);

if(response==0)

//set axis enable

response = lis3dh_setaxis(lis3dh_x_enable | lis3dh_y_enable | lis3dh_z_enable);

if(response==0)

response = lis3dh_getaccaxesraw(&data);

if(response==1)

//源資料採用2的補碼表示,所以要先轉換一下

int convert_acc_raw_data(unsigned char data)

else

return ret;

}lis3dh_writereg(lis3dh_ctrl_reg1, 0x5f);//100hz,低功耗模式,開啟x,y,z軸檢測

lis3dh_writereg(lis3dh_ctrl_reg2, 0x09);//正常模式,資料從內部濾波器到輸出暫存器,高通濾波器使能到中斷1

lis3dh_writereg(lis3dh_ctrl_reg3, 0x40);//ig1中斷1使能

lis3dh_writereg(lis3dh_ctrl_reg4, 0x00);//靈密度,+-2g

lis3dh_writereg(lis3dh_ctrl_reg5, 0x08);//中斷鎖存

lis3dh_writereg(lis3dh_int1_ths, 0x10);//16*16mg  設定中斷閾值

lis3dh_writereg(lis3dh_int1_duration, 0x00);//中斷持續時間設定為0,因為已經設定中斷鎖存,所以中斷不會消失,直到手動清除中斷

lis3dh_readreg(lis3dh_reference_reg, &val);//第一次虛讀reference暫存器,強制將高通濾波器的值載入到當前加速度值,從這時開始比較了。

lis3dh_writereg(lis3dh_int1_cfg, 0x2a);//使能中斷,中斷模式是中斷事件的『or』組合,這裡只使能了x,y,z軸的高事件中斷。開始時這個暫存器沒理解清楚,把x,y,z軸的高低事件都使能了,導致一直有中斷。因為不是高就是低,肯定有中斷。

lis3dh_readreg(lis3dh_int1_src, &val);//當檢測到中斷後,清除中斷

感測器板除錯

開發平台 珠海鼎芯感測器板d321 編譯環境 keil 5.14 一階rc數字濾波的基本演算法x為輸入,y為濾波後得輸出值,則 y n a x n 1 a y n 1 a為與rc值有關的乙個引數,稱為濾波係數,其值決定新取樣值在本次濾波結果中所佔的權重,其值通常遠小於1,當取樣間隔t足夠小的時候,a...

粉塵感測器ZPH01驅動

該驅動使用的是串列埠方式,需要將模式腳拉低,封裝最後輸出的是濃度,單位是ug m3。demo是基於和小夥伴一起封裝的stm32f103c8系列微控制器的底層驅動,編寫語言是c 平台是keil5。該感測器是已經封裝過一次的,他會每間隔1秒通過串列埠傳送一次資料。而我要做的便是使使用者更加簡單的獲取到需...

JHM3000體溫感測器驅動

因2020疫情影響,國內突然就冒出來一堆做體溫計的廠商。硬體平台 nrf52832 jhm3000 jhm3000是個單線通訊的體溫感測器晶元,線性度較好,校準後精度可達0.1度。主要問題是通訊是單io輸出,晶元上電後,io就會不停地輸出脈衝訊號,需要mcu計算脈寬來解碼資料。每個取樣週期為 2.8...