气压计1s读一次,过采样率128,测量成功
This commit is contained in:
@ -150,7 +150,7 @@ uint8_t WF_Init() {
|
||||
xlog("Parsed Coefficients: c0=%d, c1=%d, c00=%ld, c10=%ld, c01=%d, c11=%d, c20=%d, c21=%d, c30=%d\n",
|
||||
c0, c1, c00, c10, c01, c11, c20, c21, c30);
|
||||
|
||||
#if 1 //连续测量
|
||||
#if 0 //连续测量
|
||||
// 配置压力、温度和通用寄存器为连续测量模式
|
||||
wf282a_write_reg(WF_PRS_CFG, (PM_RATE_32 << 4) | PM_PRC_1); //reg: 0x06
|
||||
// 温度配置: 内部传感器 (TMP_INT_SENSOR), 32Hz测量速率 (TMP_RATE_32), 16x过采样 (TMP_PRC_16) -> 0x54
|
||||
@ -165,7 +165,7 @@ uint8_t WF_Init() {
|
||||
wf282a_write_reg(WF_PRS_CFG, (PM_RATE_1 << 4) | PM_PRC_128); //reg: 0x06,压力
|
||||
wf282a_write_reg(WF_TMP_CFG, TMP_EXT_SENSOR | (TMP_RATE_1 << 4) | TMP_PRC_128); //reg: 0x07,温度
|
||||
//过采样率大于8要对移位置配置1
|
||||
// wf282a_write_reg(WF_CFG_REG, 0x0C); //reg: 0x09
|
||||
wf282a_write_reg(WF_CFG_REG, 0x0C); //reg: 0x09
|
||||
delay(40); // 稍长一点的延迟,确保传感器开始正常工作
|
||||
#endif
|
||||
|
||||
@ -193,25 +193,34 @@ uint8_t WF_GetID() {
|
||||
|
||||
//外部调用
|
||||
void WF_GET_Temperature_Pressure(float* temperature, float* precessure){
|
||||
#if 0 //单词测量模式
|
||||
#if 0 //连续测量模式
|
||||
int32_t Traw = Get_Traw();
|
||||
xlog("DEBUG: Traw = %ld\n", Traw);
|
||||
delay(5);
|
||||
int32_t Praw = Get_Praw();
|
||||
xlog("DEBUG: Praw = %ld\n", Praw);
|
||||
#else //单次测量
|
||||
wf282a_write_reg(WF_MEAS_CFG, 0x02); //内部进行一次温度测量
|
||||
delay(200);
|
||||
delay(500);
|
||||
int32_t Traw = Get_Traw();
|
||||
xlog("DEBUG: Traw = %ld\n", Traw);
|
||||
wf282a_write_reg(WF_MEAS_CFG, 0x01); //内部进行一次压力测量
|
||||
delay(200);
|
||||
int32_t Praw = Get_Praw();
|
||||
#else
|
||||
int32_t Traw = Get_Traw();
|
||||
delay(500);
|
||||
int32_t Praw = Get_Praw();
|
||||
xlog("DEBUG: Praw = %ld\n", Praw);
|
||||
|
||||
#endif
|
||||
|
||||
float Traw_sc = (float)Traw / KT; // 缩放原始温度值
|
||||
float Praw_sc = (float)Praw / KP; // 缩放原始压力值
|
||||
float Traw_sc = (float)Traw / KT; // 缩放原始温度值
|
||||
double Praw_sc = (double)Praw / KP; // 缩放原始压力值
|
||||
double precessure_tmp = 0;
|
||||
*temperature = (float)c0 * 0.5f + (float)c1 * Traw_sc;
|
||||
*precessure = (float)c00
|
||||
+ Praw_sc * ((float)c10 + Praw_sc * ((float)c20 + Praw_sc * (float)c30))
|
||||
+ Traw_sc * (float)c01
|
||||
+ Traw_sc * Praw_sc * ((float)c11 + Praw_sc * (float)c21);
|
||||
precessure_tmp = (double)c00
|
||||
+ Praw_sc * ((double)c10 + Praw_sc * ((double)c20 + Praw_sc * (double)c30))
|
||||
+ Traw_sc * (double)c01
|
||||
+ Traw_sc * Praw_sc * ((double)c11 + Praw_sc + (double)c21);
|
||||
xlog("temperature:%.3f,precessure: %.3f\n",*temperature, precessure_tmp);
|
||||
*precessure = (float)precessure_tmp; // 传出
|
||||
}
|
||||
float WF_Altitude_Calculate() {
|
||||
float pressure_pa = WF_Pressure_Calculate();
|
||||
|
||||
@ -14,8 +14,8 @@ Oversampling Rate Scale Factor (kP or kT)
|
||||
64 times (High Precision) 1040384
|
||||
128 times 2088960
|
||||
*/
|
||||
#define KT 524288.0f
|
||||
#define KP 524288.0f
|
||||
#define KT 1572864.0f
|
||||
#define KP 1572864.0f
|
||||
|
||||
#define WF_PULL_UP 0 //外部是否接的上拉
|
||||
// I2C 从设备地址
|
||||
|
||||
Reference in New Issue
Block a user