打印
[STM32L4+]

【STEVAL-STWINKT1B测评】使用Micro SD卡记录传感器数据

[复制链接]
1703|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主


1、STWINKT1B上有一个SD卡接口可用于电池供电的时候将数据方便的保存到存储卡里面,这里我们就可以把STWINKT1B方便的用于各种场景下数据记录。

  TF卡数据接口如下




TF卡使用SDIO进口进行通信,能够进行高速的数据读写。文件系统使用开源的FATFS。
void DATALOG_SD_Init(void)
{
  BSP_SD_Detect_Init();      
  if(FATFS_LinkDriver(&SD_Driver, SDPath) == 0)
  {
    /* Register the file system object to the FatFs module */
    if(f_mount(&SDFatFs, (TCHAR const*)SDPath, 0) != FR_OK)
    {
      /* FatFs Initialization Error */
    }
  }
}
再对TF卡初始化完成之后,创建一个csv文件用于存储各个传感器的数据
uint8_t DATALOG_SD_Log_Enable(void)
{
  static uint16_t sdcard_file_counter = 0;
  char header[] = "T [ms],AccX [mg],AccY [mg],AccZ [mg],GyroX [mdps],GyroY [mdps],GyroZ [mdps],MagX [mgauss],MagY [mgauss],MagZ [mgauss],P [mB],T [degrees],H [%]\r\n";
  uint32_t byteswritten; /* written byte count */
  char file_name[30] = {0};

  sprintf(file_name, "%s%.3d%s", "ind", sdcard_file_counter, ".csv");  
  
  sdcard_file_counter++;

  HAL_Delay(100);

  if(f_open(&MyFile, (char const*)file_name, FA_CREATE_ALWAYS | FA_WRITE) != FR_OK)
  {
    sdcard_file_counter--;
    return 0;
  }
  
  if(f_write(&MyFile, (const void*)&header, sizeof(header)-1, (void *)&byteswritten) != FR_OK)
  {
    return 0;
  }
  
  return 1;
  
}
然后是对各个传感器进行数据读取
int32_t getSensorsData( T_SensorsData *mptr)
{
  int32_t ret = BSP_ERROR_NONE;
  mptr->ms_counter = HAL_GetTick();
  
#ifdef USE_IIS2DH
  
  if ( BSP_MOTION_SENSOR_GetAxes( IIS2DH_0, MOTION_ACCELERO, &mptr->acc ) == BSP_ERROR_COMPONENT_FAILURE )
  {
    mptr->acc.x = 0;
    mptr->acc.y = 0;
    mptr->acc.z = 0;
    ret = BSP_ERROR_COMPONENT_FAILURE;
  }
#elif USE_ISM330DHCX
  
  if ( BSP_MOTION_SENSOR_GetAxes( ISM330DHCX_0, MOTION_ACCELERO, &mptr->acc ) == BSP_ERROR_COMPONENT_FAILURE )
  {
    mptr->acc.x = 0;
    mptr->acc.y = 0;
    mptr->acc.z = 0;
    ret = BSP_ERROR_COMPONENT_FAILURE;
  }
  
#endif

  if ( BSP_MOTION_SENSOR_GetAxes(ISM330DHCX_0, MOTION_GYRO, &mptr->gyro ) == BSP_ERROR_COMPONENT_FAILURE )
  {
    mptr->gyro.x = 0;
    mptr->gyro.y = 0;
    mptr->gyro.z = 0;
    ret = BSP_ERROR_COMPONENT_FAILURE;
  }
  
  if ( BSP_MOTION_SENSOR_GetAxes(IIS2MDC_0, MOTION_MAGNETO, &mptr->mag ) == BSP_ERROR_COMPONENT_FAILURE )
  {
    mptr->mag.x = 0;
    mptr->mag.y = 0;
    mptr->mag.z = 0;
    ret = BSP_ERROR_COMPONENT_FAILURE;
  }
  
  if ( BSP_ENV_SENSOR_GetValue(LPS22HH_0, ENV_PRESSURE, &mptr->pressure ) == BSP_ERROR_COMPONENT_FAILURE )
  {
    mptr->pressure = 0.0f;
    ret = BSP_ERROR_COMPONENT_FAILURE;
  }
  
  if ( BSP_ENV_SENSOR_GetValue(STTS751_0, ENV_TEMPERATURE, &mptr->temperature ) == BSP_ERROR_COMPONENT_FAILURE )
  {
    mptr->temperature = 0.0f;
    ret = BSP_ERROR_COMPONENT_FAILURE;
  }
  
  if ( BSP_ENV_SENSOR_GetValue(HTS221_0, ENV_HUMIDITY, &mptr->humidity ) == BSP_ERROR_COMPONENT_FAILURE )//ENV_HUMIDITY &mptr->humidity
  {
    mptr->humidity = 0.0f;
    ret = BSP_ERROR_COMPONENT_FAILURE;
  }
  
  return ret;
}
2秒更新写一次数据
DATALOG_SD_Init();   
  MX_X_CUBE_MEMS1_Init();
  DATALOG_SD_Log_Enable();
  while(1)
  {
      HAL_Delay(2000);
      getSensorsData(&my_mptr);
      writeSensorsData();
      cnt++;
      if(cnt  == 90)
      {
        DATALOG_SD_Log_Disable();
        while(1);
      }     
  }
记录完成后生产的数据






下面我们用MATLAB对温度和湿度进行分析。

上电之后对电路板进行加热,可以看到温度快速上升,湿度也跟着下降。
停止加热之后,温度下降和湿度上升然后下降趋于不变的状态。




其他的传感器可以方便的进行分析。

使用特权

评论回复
沙发
呐咯密密| | 2024-8-13 09:24 | 只看该作者
仅仅是分析数据直接串口输出会更方便,但是掉电记录数据确实用SD卡方便

使用特权

评论回复
板凳
wang1979| | 2024-8-13 15:33 | 只看该作者
不错,推荐一下,顶!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

45

帖子

3

粉丝