这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 我的SD传感器数据怎么来的?

共1条 1/1 1 跳转至

我的SD传感器数据怎么来的?

菜鸟
2017-06-14 14:11:44     打赏
今天不经意间在手机SD卡里面看到保存的.CSV格式的传感器数据,打开一看,确认就是SensorTile开发板数据,于是今天再看了看程序。记录如下
SD保存文件如下,每个传感器一个文件
 
打开气压传感器,数据如下
 
其中时间戳值变化感觉和手机界面的曲线的横坐标值变化挺像的
其中RawData值是怎么转成pressure值的?我是没找到方法。另外,时间戳是怎么加上去的?SensorTile上无时钟芯片啊,STM32L476内部晶振?但没见设置的程序啊?又想了一下,这个日期显示是我第一次上电连接APP使用时间,也就是说官方出厂程序既支持蓝牙通信,又支持SD存储。但是目前又发现核心板、mini板、arduino板三个不能同时使用啊。我后面专门发过一篇返回出厂程序的帖子,见
http://bbs.eeworld.com.cn/thread-521170-1-1.html
可是,三个板子确实不能同时使用啊。这个数据是怎么保存进SD卡的?用哪个程序?让我捋一捋

之前发帖讨论过使用DataLog_USB程序未能成功在SD中保存数据,见
蓝牙搜素无设备,SD卡无数据记录 - 意法半导体AMG SensorTile开发大赛 - 电子工程世界-论坛 http://bbs.eeworld.com.cn/thread-520890-1-1.html
注意程序说明
[AppleScript] 纯文本查看 复制代码 ?
1 Thisapplicationcontainsan example which shows howtoobtaindatafromthevarious sensorsontheSensorTile. Thedatacan either be streamedtothePC via USBorsavedonSD Card

这个例程是不带BLE的,蓝牙搜不到,这个例程是通过USB虚拟串口发送到电脑或是存到SD卡中,也就是二选一。
当SD存储选择时,见下说明,数据会保存为.tsv文件,但是我明明是.CSV啊
[AppleScript] 纯文本查看 复制代码 ?
1 2 3 4 5 6 7 If SD Cardisselected,thedatastreamisloggedona tsvfile(Tab Separated Values). Aftertheapplicationisstarted: -theuser canview/recorddatafromtheon-board environmental sensors like Temperature, Humidity(ifavailable)andPressure. -theuser canview/recorddatafromtheon-board MEMS sensors like Accelerometer, GyroscopeandMagnetometer. -theuser canview/recorddatafromtheGas Gauge ICtomonitorthebattery status.

不知道存储的电池电量监测数据是什么样的?大家有兴趣看一下

下来看程序,打开DataLog工程,有一个头文件是
#include <math.h>   /* trunc */
trunc是一种函数,功能是截取日期或数字,返回指定的值。语法TRUNC(number,num_digits)
Number 需要截尾取整的数字 
Num_digits 用于指定取整精度的数字


宏定义数据请求周期100ms
[AppleScript] 纯文本查看 复制代码 ?
1 #define DATA_PERIOD_MS (100)

这两句很重要,初始值是1
[AppleScript] 纯文本查看 复制代码 ?
1 2 /*SendOverUSB=0 --> Save sensors data on SDCard (enable with double click) */ /*SendOverUSB=1 --> Send sensors data via USB */

关于RTC_Config定义如下,采用12小时制
[AppleScript] 纯文本查看 复制代码 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 static void RTC_Config(void) {   RtcHandle.Instance=RTC;     RtcHandle.Init.HourFormat    =RTC_HOURFORMAT_12;   RtcHandle.Init.AsynchPrediv  =RTC_ASYNCH_PREDIV;   RtcHandle.Init.SynchPrediv   =RTC_SYNCH_PREDIV;   RtcHandle.Init.OutPut        =RTC_OUTPUT_DISABLE;   RtcHandle.Init.OutPutPolarity=RTC_OUTPUT_POLARITY_HIGH;   RtcHandle.Init.OutPutType    =RTC_OUTPUT_TYPE_OPENDRAIN;       if(HAL_RTC_Init(&RtcHandle)!=HAL_OK)   {           /*Initialization Error*/     Error_Handler();   } }


后面RTC_TimeStampConfig定义中,初始时间默认2000-1-1 00:00:00,星期一
main中,变量初始定义
[AppleScript] 纯文本查看 复制代码 ?
1 2 uint32_t msTick,msTickPrev=0;   uint8_t doubleTap=0;//双击核心板标志,

NVIC:嵌套中断向量控制器,优先级4

如果数据传到串口,LED1亮
[AppleScript] 纯文本查看 复制代码 ?
1 2 3 4 5 6 if(SendOverUSB)   {     /*Initialize LED*/     BSP_LED_Init(LED1);     BSP_LED_On(LED1);   }

紧接着初始化USB库,否则初始化SD

只有SendOverUSB为0的时候才会判断SD_Log_Enabled是否为1,进而写入数据
[AppleScript] 纯文本查看 复制代码 ?
1 2 3 4 if(SD_Log_Enabled)       {         DATALOG_SD_NewLine();       }

如下关于双击核心板中断,保存文件的操作
[AppleScript] 纯文本查看 复制代码 ?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 if(MEMSInterrupt)     {       MEMSInterrupt=0;       BSP_ACCELERO_Get_Double_Tap_Detection_Status_Ext(LSM6DSM_X_0_handle,&doubleTap);       if(doubleTap){/*Double Tapevent*/         if(SD_Log_Enabled)         {           DATALOG_SD_Log_Disable();           SD_Log_Enabled=0;         }         else         {           while(SD_Log_Enabled !=1)           {             if(DATALOG_SD_Log_Enable())             {               SD_Log_Enabled=1;             }             else             {               DATALOG_SD_Log_Disable();             }             HAL_Delay(100);           }         }       }     }



后面initializeAllSensors( void )中关于双击核心板硬件使能
[AppleScript] 纯文本查看 复制代码 ?
1 2 3 4 5 if(!SendOverUSB)   {     BSP_ACCELERO_Enable_Double_Tap_Detection_Ext(LSM6DSM_X_0_handle);     BSP_ACCELERO_Set_Tap_Threshold_Ext(LSM6DSM_X_0_handle,LSM6DSM_TAP_THRESHOLD_MID);   }


函数BSP_ACCELERO_Enable_Double_Tap_Detection_Ext定义,设置ODR 416HZ,不知道这里ODR是引脚电平输出的寄存器吗?
DrvStatusTypeDef BSP_ACCELERO_Enable_Double_Tap_Detection_Ext( void *handle )
{

  DrvContextTypeDef *ctx = (DrvContextTypeDef *)handle;

  if(ctx == NULL)
  {
    return COMPONENT_ERROR;
  }

  if ( ctx->pExtVTable == NULL )
  {
    return COMPONENT_ERROR;
  }

  /* At the moment this feature is only implemented for LSM6DS3 */
  if ( ctx->who_am_i == LSM6DSM_ACC_GYRO_WHO_AM_I )
  {
    LSM6DSM_X_ExtDrv_t *extDriver = ( LSM6DSM_X_ExtDrv_t * )ctx->pExtVTable;

    if ( extDriver->Enable_Double_Tap_Detection == NULL )
    {
      return COMPONENT_ERROR;
    }

    else
    {
      return extDriver->Enable_Double_Tap_Detection( ctx );
    }
  }

  else
  {
    return COMPONENT_ERROR;
  }
}


把程序看完也没明白当时这个文件是怎么保存的,当时确实将SD插到SD上试了一下,没反应又拔了,当时未刷程序
不明白是怎么SD卡新建.tsV文件?还请指点,我之前操作SD卡都是txt文件


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]