目前使用了感測器的兩個功能,乙個是讀取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...