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

[复制链接]
2252|2
 楼主| OldestTrick 发表于 2024-8-12 23:12 | 显示全部楼层 |阅读模式


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

  TF卡数据接口如下

7680066ba24fe5eae9.png


TF卡使用SDIO进口进行通信,能够进行高速的数据读写。文件系统使用开源的FATFS。
  1. void DATALOG_SD_Init(void)
  2. {
  3.   BSP_SD_Detect_Init();      
  4.   if(FATFS_LinkDriver(&SD_Driver, SDPath) == 0)
  5.   {
  6.     /* Register the file system object to the FatFs module */
  7.     if(f_mount(&SDFatFs, (TCHAR const*)SDPath, 0) != FR_OK)
  8.     {
  9.       /* FatFs Initialization Error */
  10.     }
  11.   }
  12. }
再对TF卡初始化完成之后,创建一个csv文件用于存储各个传感器的数据
  1. uint8_t DATALOG_SD_Log_Enable(void)
  2. {
  3.   static uint16_t sdcard_file_counter = 0;
  4.   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";
  5.   uint32_t byteswritten; /* written byte count */
  6.   char file_name[30] = {0};

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

  10.   HAL_Delay(100);

  11.   if(f_open(&MyFile, (char const*)file_name, FA_CREATE_ALWAYS | FA_WRITE) != FR_OK)
  12.   {
  13.     sdcard_file_counter--;
  14.     return 0;
  15.   }
  16.   
  17.   if(f_write(&MyFile, (const void*)&header, sizeof(header)-1, (void *)&byteswritten) != FR_OK)
  18.   {
  19.     return 0;
  20.   }
  21.   
  22.   return 1;
  23.   
  24. }
然后是对各个传感器进行数据读取
  1. int32_t getSensorsData( T_SensorsData *mptr)
  2. {
  3.   int32_t ret = BSP_ERROR_NONE;
  4.   mptr->ms_counter = HAL_GetTick();
  5.   
  6. #ifdef USE_IIS2DH
  7.   
  8.   if ( BSP_MOTION_SENSOR_GetAxes( IIS2DH_0, MOTION_ACCELERO, &mptr->acc ) == BSP_ERROR_COMPONENT_FAILURE )
  9.   {
  10.     mptr->acc.x = 0;
  11.     mptr->acc.y = 0;
  12.     mptr->acc.z = 0;
  13.     ret = BSP_ERROR_COMPONENT_FAILURE;
  14.   }
  15. #elif USE_ISM330DHCX
  16.   
  17.   if ( BSP_MOTION_SENSOR_GetAxes( ISM330DHCX_0, MOTION_ACCELERO, &mptr->acc ) == BSP_ERROR_COMPONENT_FAILURE )
  18.   {
  19.     mptr->acc.x = 0;
  20.     mptr->acc.y = 0;
  21.     mptr->acc.z = 0;
  22.     ret = BSP_ERROR_COMPONENT_FAILURE;
  23.   }
  24.   
  25. #endif

  26.   if ( BSP_MOTION_SENSOR_GetAxes(ISM330DHCX_0, MOTION_GYRO, &mptr->gyro ) == BSP_ERROR_COMPONENT_FAILURE )
  27.   {
  28.     mptr->gyro.x = 0;
  29.     mptr->gyro.y = 0;
  30.     mptr->gyro.z = 0;
  31.     ret = BSP_ERROR_COMPONENT_FAILURE;
  32.   }
  33.   
  34.   if ( BSP_MOTION_SENSOR_GetAxes(IIS2MDC_0, MOTION_MAGNETO, &mptr->mag ) == BSP_ERROR_COMPONENT_FAILURE )
  35.   {
  36.     mptr->mag.x = 0;
  37.     mptr->mag.y = 0;
  38.     mptr->mag.z = 0;
  39.     ret = BSP_ERROR_COMPONENT_FAILURE;
  40.   }
  41.   
  42.   if ( BSP_ENV_SENSOR_GetValue(LPS22HH_0, ENV_PRESSURE, &mptr->pressure ) == BSP_ERROR_COMPONENT_FAILURE )
  43.   {
  44.     mptr->pressure = 0.0f;
  45.     ret = BSP_ERROR_COMPONENT_FAILURE;
  46.   }
  47.   
  48.   if ( BSP_ENV_SENSOR_GetValue(STTS751_0, ENV_TEMPERATURE, &mptr->temperature ) == BSP_ERROR_COMPONENT_FAILURE )
  49.   {
  50.     mptr->temperature = 0.0f;
  51.     ret = BSP_ERROR_COMPONENT_FAILURE;
  52.   }
  53.   
  54.   if ( BSP_ENV_SENSOR_GetValue(HTS221_0, ENV_HUMIDITY, &mptr->humidity ) == BSP_ERROR_COMPONENT_FAILURE )//ENV_HUMIDITY &mptr->humidity
  55.   {
  56.     mptr->humidity = 0.0f;
  57.     ret = BSP_ERROR_COMPONENT_FAILURE;
  58.   }
  59.   
  60.   return ret;
  61. }
2秒更新写一次数据
  1. DATALOG_SD_Init();   
  2.   MX_X_CUBE_MEMS1_Init();
  3.   DATALOG_SD_Log_Enable();
  4.   while(1)
  5.   {
  6.       HAL_Delay(2000);
  7.       getSensorsData(&my_mptr);
  8.       writeSensorsData();
  9.       cnt++;
  10.       if(cnt  == 90)
  11.       {
  12.         DATALOG_SD_Log_Disable();
  13.         while(1);
  14.       }     
  15.   }
记录完成后生产的数据


5530466ba259baa954.png

5075366ba25a5ba50d.png

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

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


208866ba25b835290.png

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

呐咯密密 发表于 2024-8-13 09:24 | 显示全部楼层
仅仅是分析数据直接串口输出会更方便,但是掉电记录数据确实用SD卡方便
wang1979 发表于 2024-8-13 15:33 | 显示全部楼层
不错,推荐一下,顶!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

45

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部