添加SHT45驱动
This commit is contained in:
parent
274a408676
commit
c6ec628b9f
|
@ -1089,7 +1089,7 @@ static void getTempHumiPress(void)
|
||||||
//置错误标志位
|
//置错误标志位
|
||||||
g_error_log.temp_error_TMP117 = 1;
|
g_error_log.temp_error_TMP117 = 1;
|
||||||
//使用备用温度
|
//使用备用温度
|
||||||
g_stMcs_Para.temperature = backupTemperature1;
|
g_stMcs_Para.temperature = backupTemperature2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1105,20 +1105,20 @@ static void getTempHumiPress(void)
|
||||||
//关电重启,第一次进入错误判断,此时此时错误标志位为0,关电并置位错误标志位;
|
//关电重启,第一次进入错误判断,此时此时错误标志位为0,关电并置位错误标志位;
|
||||||
//再进入错误标志位检测到错误标志位后开电
|
//再进入错误标志位检测到错误标志位后开电
|
||||||
//下一次监测如果SHT30恢复,则正常运行,如果没有恢复,电继续开着,保证温度传感器正常运行
|
//下一次监测如果SHT30恢复,则正常运行,如果没有恢复,电继续开着,保证温度传感器正常运行
|
||||||
if(g_error_log.temp_error_SHT30 == 0)
|
// if(g_error_log.temp_error_SHT30 == 0)
|
||||||
{
|
// {
|
||||||
HAL_GPIO_WritePin(GPIOB, GPIO_SHT_PWR_EN_Pin, GPIO_PIN_RESET);
|
// HAL_GPIO_WritePin(GPIOB, GPIO_SHT_PWR_EN_Pin, GPIO_PIN_RESET);
|
||||||
HAL_I2C_DeInit(&hi2c1);
|
// HAL_I2C_DeInit(&hi2c1);
|
||||||
}else
|
// }else
|
||||||
{
|
// {
|
||||||
HAL_GPIO_WritePin(GPIOB, GPIO_SHT_PWR_EN_Pin, GPIO_PIN_SET);
|
// HAL_GPIO_WritePin(GPIOB, GPIO_SHT_PWR_EN_Pin, GPIO_PIN_SET);
|
||||||
MX_I2C1_Init();
|
// MX_I2C1_Init();
|
||||||
sht30_init();
|
// sht30_init();
|
||||||
}
|
// }
|
||||||
//置错误标志位
|
//置错误标志位
|
||||||
g_error_log.temp_error_SHT30 = 1;
|
g_error_log.temp_error_SHT30 = 1;
|
||||||
#if TEMP_SENSOR == SHT30_SENSOR
|
#if TEMP_SENSOR == SHT30_SENSOR
|
||||||
g_stMcs_Para.temperature = backupTemperature1;
|
g_stMcs_Para.temperature = 0;
|
||||||
#endif /*TEMP_SENSOR == SHT30_SENSOR*/
|
#endif /*TEMP_SENSOR == SHT30_SENSOR*/
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1151,6 +1151,7 @@ void tem_hum_update_task(void const * argument)
|
||||||
if(tem_hun_check_flag)
|
if(tem_hun_check_flag)
|
||||||
{
|
{
|
||||||
//采集温湿度与大气压
|
//采集温湿度与大气压
|
||||||
|
osDelay(10);//等待传感器初始化
|
||||||
getTempHumiPress();
|
getTempHumiPress();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -119,6 +119,51 @@ u_int8_t sht30_collect_data(stTempHumiSensor stSensorDev, float *temp, float *hu
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 温湿度数据采集
|
||||||
|
* @param
|
||||||
|
* @retval
|
||||||
|
*/
|
||||||
|
u_int8_t sht45_collect_data(stTempHumiSensor stSensorDev, float *temp, float *humi)
|
||||||
|
{
|
||||||
|
u_int8_t read_buff[6] = {0};
|
||||||
|
uint8_t _cmd[] = {0xFD};
|
||||||
|
|
||||||
|
u_int16_t temp_value;
|
||||||
|
u_int16_t humi_value;
|
||||||
|
|
||||||
|
HAL_I2C_Master_Transmit(&hi2c1,stSensorDev.i2c_reg_addr,_cmd,1,0xff);
|
||||||
|
osDelay(15);
|
||||||
|
|
||||||
|
if(HAL_I2C_Master_Receive(&hi2c1,stSensorDev.i2c_reg_addr,read_buff,6,0xff) != HAL_OK){
|
||||||
|
return HAL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(CheckCrc8(read_buff, 0xFF) != read_buff[2] && CheckCrc8(&read_buff[3], 0xFF) != read_buff[5]){
|
||||||
|
return HAL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
temp_value = ((u_int16_t)read_buff[0]<<8)|read_buff[1];
|
||||||
|
*temp = -45 + 175*((float)temp_value/65535);
|
||||||
|
|
||||||
|
humi_value = ((u_int16_t)read_buff[3]<<8)|read_buff[4];
|
||||||
|
*humi = -6 + 125*((float)humi_value / 65535);
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static float calculateAverage(float arr[], int avgLength) {
|
||||||
|
float sum = 0;
|
||||||
|
|
||||||
|
// 遍历数组(最多10个元素),收集非零值直到达到指定数量
|
||||||
|
for (int i = 0; i < 10; ++i) {
|
||||||
|
sum += arr[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算平均值并限制最大值
|
||||||
|
float average = sum / avgLength;
|
||||||
|
return average;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @brief 获取温湿度数据
|
* @brief 获取温湿度数据
|
||||||
* @param
|
* @param
|
||||||
|
@ -127,47 +172,53 @@ u_int8_t sht30_collect_data(stTempHumiSensor stSensorDev, float *temp, float *hu
|
||||||
#define COLLECT_DATA_NUM 10
|
#define COLLECT_DATA_NUM 10
|
||||||
BOOL get_temp_humi_data(float* temdata, float* humidata)
|
BOOL get_temp_humi_data(float* temdata, float* humidata)
|
||||||
{
|
{
|
||||||
U_DataType collect_temdata[COLLECT_DATA_NUM]={0x00};
|
float collect_temdata[COLLECT_DATA_NUM] = {0};
|
||||||
U_DataType collect_humidata[COLLECT_DATA_NUM]={0x00};
|
float collect_humidata[COLLECT_DATA_NUM] = {0};
|
||||||
U_DataType tmp_temdata,tmp_humidata;
|
float tmp_temdata,tmp_humidata;
|
||||||
|
uint8_t ret_falt = 0;;
|
||||||
|
|
||||||
for(int i=0; i<COLLECT_DATA_NUM; i++){
|
for(int i=0; i<COLLECT_DATA_NUM; i++){
|
||||||
int ret = sht30_collect_data(g_stTempHumiSensor,&collect_temdata[i].fValue, &collect_humidata[i].fValue);
|
int ret = sht45_collect_data(g_stTempHumiSensor,&collect_temdata[i], &collect_humidata[i]);
|
||||||
// AssertError(ret == HAL_OK, return FALSE, "sht30采样失败");
|
// AssertError(ret == HAL_OK, return FALSE, "sht30采样失败");
|
||||||
if(ret == HAL_ERROR)
|
if(ret == HAL_ERROR)
|
||||||
// return FALSE;
|
{
|
||||||
goto error_return;
|
ret_falt++;
|
||||||
|
}
|
||||||
osDelay(1);
|
osDelay(1);
|
||||||
}
|
}
|
||||||
|
if(ret_falt >= COLLECT_DATA_NUM)
|
||||||
|
{
|
||||||
|
goto error_return;
|
||||||
|
}
|
||||||
|
|
||||||
tmp_temdata = filter_middle(collect_temdata,COLLECT_DATA_NUM, FILTER_DATA_TYPE_FLOAT);
|
tmp_temdata = calculateAverage(collect_temdata,COLLECT_DATA_NUM - ret_falt);
|
||||||
tmp_humidata = filter_middle(collect_humidata,COLLECT_DATA_NUM, FILTER_DATA_TYPE_FLOAT);
|
tmp_humidata = calculateAverage(collect_humidata,COLLECT_DATA_NUM - ret_falt);
|
||||||
|
|
||||||
// 断言有问题
|
// 断言有问题
|
||||||
// AssertError((tmp_temdata.fValue >= -40) && (tmp_temdata.fValue <= 85), return FALSE, "sht30温度值校验失败");
|
// AssertError((tmp_temdata.fValue >= -40) && (tmp_temdata.fValue <= 85), return FALSE, "sht30温度值校验失败");
|
||||||
// AssertError((tmp_humidata.fValue >= 0) && (tmp_humidata.fValue <= 100), return FALSE, "sht30湿度值校验失败");
|
// AssertError((tmp_humidata.fValue >= 0) && (tmp_humidata.fValue <= 100), return FALSE, "sht30湿度值校验失败");
|
||||||
if(tmp_temdata.fValue < -50)
|
if(tmp_temdata < -50)
|
||||||
{
|
{
|
||||||
// tmp_temdata.fValue = -40;
|
// tmp_temdata.fValue = -40;
|
||||||
// term_printf("sht30温度值校验失败");
|
// term_printf("sht30温度值校验失败");
|
||||||
// return FALSE;
|
// return FALSE;
|
||||||
goto error_return;
|
goto error_return;
|
||||||
}
|
}
|
||||||
if(tmp_temdata.fValue > 125)
|
if(tmp_temdata > 125)
|
||||||
{
|
{
|
||||||
// tmp_temdata.fValue = 125;
|
// tmp_temdata.fValue = 125;
|
||||||
// term_printf("sht30温度值校验失败");
|
// term_printf("sht30温度值校验失败");
|
||||||
// return FALSE;
|
// return FALSE;
|
||||||
goto error_return;
|
goto error_return;
|
||||||
}
|
}
|
||||||
if(tmp_humidata.fValue < 0)
|
if(tmp_humidata < 0)
|
||||||
{
|
{
|
||||||
// tmp_humidata.fValue = 0;
|
// tmp_humidata.fValue = 0;
|
||||||
// term_printf("sht30湿度值校验失败");
|
// term_printf("sht30湿度值校验失败");
|
||||||
// return FALSE;
|
// return FALSE;
|
||||||
goto error_return;
|
goto error_return;
|
||||||
}
|
}
|
||||||
if(tmp_humidata.fValue > 100)
|
if(tmp_humidata > 100)
|
||||||
{
|
{
|
||||||
// tmp_humidata.fValue = 100;
|
// tmp_humidata.fValue = 100;
|
||||||
// term_printf("sht3湿度值校验失败");
|
// term_printf("sht3湿度值校验失败");
|
||||||
|
@ -175,8 +226,8 @@ BOOL get_temp_humi_data(float* temdata, float* humidata)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
*temdata = tmp_temdata.fValue;
|
*temdata = tmp_temdata;
|
||||||
*humidata = tmp_humidata.fValue;
|
*humidata = tmp_humidata;
|
||||||
|
|
||||||
//g_stTempHumiData.temp = tmp_temdata.fValue;
|
//g_stTempHumiData.temp = tmp_temdata.fValue;
|
||||||
//g_stTempHumiData.humi = tmp_humidata.fValue;
|
//g_stTempHumiData.humi = tmp_humidata.fValue;
|
||||||
|
|
Loading…
Reference in New Issue