3162|9

6

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

Sensor Tile的定时器中断及数据解算 [复制链接]

 
 求助好心人,现在sensor Tile开发已经到了关键时刻了,急求帮忙!!!
我的目的是想要将sensor Tile的加速计、陀螺仪、磁力计的数据用串口传至电脑上,然后使用算法解算,得出XYZ轴的加速度角速度以及角度。遇到的问题就是不知道怎么使用定时器中断,定时1ms,我自己也是在程序上改了很长时间都没有成功,就更谈不上用数据解算,在PC端得到XYZ轴的加速度角速度以及角度的值。或者说数据解算都不是这样做的!

最新回复

BlueMicrosystem2例程里有定时器的例程可以参考一下 /** * [url=home.php?mod=space&uid=159083]@brief[/url]  Function for initializing timers for sending the information to BLE: *  - 1 for sending MotionFX/AR/CP and Acc/Gyro/Mag *  - 1 for sending the Environmental info * @param  None * @retval None */ static void InitTimers(void) {   uint32_t uwPrescalerValue;   /* Timer Output Compare Configuration Structure declaration */   TIM_OC_InitTypeDef sConfig;   /* Compute the prescaler value to have TIM4 counter clock equal to 10 KHz */   uwPrescalerValue = (uint32_t) ((SystemCoreClock / 10000) - 1);      /* Set TIM4 instance (Environmental)*/   TimEnvHandle.Instance = TIM4;   /* Initialize TIM4 peripheral as follow:      + Period = 500 - 1 (10ms)      + Prescaler = ((SystemCoreClock/2)/10000) - 1      + ClockDivision = 0      + Counter direction = Up   */   TimEnvHandle.Init.Period = 50*100 - 1;   TimEnvHandle.Init.Prescaler = uwPrescalerValue;   TimEnvHandle.Init.ClockDivision = 0;   TimEnvHandle.Init.CounterMode = TIM_COUNTERMODE_UP;   if(HAL_TIM_Base_Init(&TimEnvHandle) != HAL_OK) {     /* Initialization Error */   }      /* Set TIM1 instance (Motion)*/   TimCCHandle.Instance = TIM1;     TimCCHandle.Init.Period        = 65535;   TimCCHandle.Init.Prescaler     = uwPrescalerValue;   TimCCHandle.Init.ClockDivision = 0;   TimCCHandle.Init.CounterMode   = TIM_COUNTERMODE_UP;   if(HAL_TIM_OC_Init(&TimCCHandle) != HAL_OK)   {     /* Initialization Error */     Error_Handler();   }    /* Configure the Output Compare channels */ /* Common configuration for all channels */   sConfig.OCMode     = TIM_OCMODE_TOGGLE;   sConfig.OCPolarity = TIM_OCPOLARITY_LOW;   /* Output Compare Toggle Mode configuration: Channel1 */   sConfig.Pulse = uhCCR1_Val;   if(HAL_TIM_OC_ConfigChannel(&TimCCHandle, &sConfig, TIM_CHANNEL_1) != HAL_OK)   {     /* Configuration Error */     Error_Handler();   }    #ifdef OSX_BMS_MOTIONCP // ((defined OSX_BMS_MOTIONCP) || (defined OSX_BMS_MOTIONPM))   /* Output Compare Toggle Mode configuration: Channel2 */   sConfig.Pulse = uhCCR2_Val;   if(HAL_TIM_OC_ConfigChannel(&TimCCHandle, &sConfig, TIM_CHANNEL_2) != HAL_OK)   {     /* Configuration Error */     Error_Handler();   } #endif /* OSX_BMS_MOTIONCP */    #ifdef OSX_BMS_MOTIONAR   /* Output Compare Toggle Mode configuration: Channel3 */   sConfig.Pulse = uhCCR3_Val;   if(HAL_TIM_OC_ConfigChannel(&TimCCHandle, &sConfig, TIM_CHANNEL_3) != HAL_OK)   {     /* Configuration Error */     Error_Handler();   } #endif /* OSX_BMS_MOTIONAR */      /* Output Compare Toggle Mode configuration: Channel4 */   sConfig.Pulse = uhCCR4_Val;   if(HAL_TIM_OC_ConfigChannel(&TimCCHandle, &sConfig, TIM_CHANNEL_4) != HAL_OK)   {     /* Configuration Error */     Error_Handler();   }      /* Set TIM5 instance (Mic )*/   TimAudioDataHandle.Instance = TIM5;   /* Initialize TIM5 peripheral as follow:      + Period = 100 - 1 (10ms)      + Prescaler = ((SystemCoreClock/2)/10000) - 1      + ClockDivision = 0      + Counter direction = Up   */   TimAudioDataHandle.Init.Period = MICS_DB_UPDATE_MUL_10MS*100 - 1;   TimAudioDataHandle.Init.Prescaler = uwPrescalerValue;   TimAudioDataHandle.Init.ClockDivision = 0;   TimAudioDataHandle.Init.CounterMode = TIM_COUNTERMODE_UP;   if(HAL_TIM_Base_Init(&TimAudioDataHandle) != HAL_OK) {     /* Initialization Error */     Error_Handler();   } }复制代码   详情 回复 发表于 2017-4-1 18:30
点赞 关注
 
 

回复
举报

9714

帖子

24

TA的资源

版主

推荐
 
lefu 发表于 2017-4-1 17:50
就是怎么样实现用定时器完成流水灯,这个程序会改了,那我接下来就好做了。

BlueMicrosystem2例程里有定时器的例程可以参考一下
  1. /**
  2. * [url=home.php?mod=space&uid=159083]@brief[/url]  Function for initializing timers for sending the information to BLE:
  3. *  - 1 for sending MotionFX/AR/CP and Acc/Gyro/Mag
  4. *  - 1 for sending the Environmental info
  5. * @param  None
  6. * @retval None
  7. */
  8. static void InitTimers(void)
  9. {
  10.   uint32_t uwPrescalerValue;

  11.   /* Timer Output Compare Configuration Structure declaration */
  12.   TIM_OC_InitTypeDef sConfig;

  13.   /* Compute the prescaler value to have TIM4 counter clock equal to 10 KHz */
  14.   uwPrescalerValue = (uint32_t) ((SystemCoreClock / 10000) - 1);
  15.   
  16.   /* Set TIM4 instance (Environmental)*/
  17.   TimEnvHandle.Instance = TIM4;
  18.   /* Initialize TIM4 peripheral as follow:
  19.      + Period = 500 - 1 (10ms)
  20.      + Prescaler = ((SystemCoreClock/2)/10000) - 1
  21.      + ClockDivision = 0
  22.      + Counter direction = Up
  23.   */
  24.   TimEnvHandle.Init.Period = 50*100 - 1;
  25.   TimEnvHandle.Init.Prescaler = uwPrescalerValue;
  26.   TimEnvHandle.Init.ClockDivision = 0;
  27.   TimEnvHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
  28.   if(HAL_TIM_Base_Init(&TimEnvHandle) != HAL_OK) {
  29.     /* Initialization Error */
  30.   }

  31.   
  32.   /* Set TIM1 instance (Motion)*/
  33.   TimCCHandle.Instance = TIM1;  
  34.   TimCCHandle.Init.Period        = 65535;
  35.   TimCCHandle.Init.Prescaler     = uwPrescalerValue;
  36.   TimCCHandle.Init.ClockDivision = 0;
  37.   TimCCHandle.Init.CounterMode   = TIM_COUNTERMODE_UP;
  38.   if(HAL_TIM_OC_Init(&TimCCHandle) != HAL_OK)
  39.   {
  40.     /* Initialization Error */
  41.     Error_Handler();
  42.   }
  43.   
  44. /* Configure the Output Compare channels */
  45. /* Common configuration for all channels */
  46.   sConfig.OCMode     = TIM_OCMODE_TOGGLE;
  47.   sConfig.OCPolarity = TIM_OCPOLARITY_LOW;

  48.   /* Output Compare Toggle Mode configuration: Channel1 */
  49.   sConfig.Pulse = uhCCR1_Val;
  50.   if(HAL_TIM_OC_ConfigChannel(&TimCCHandle, &sConfig, TIM_CHANNEL_1) != HAL_OK)
  51.   {
  52.     /* Configuration Error */
  53.     Error_Handler();
  54.   }
  55.   
  56. #ifdef OSX_BMS_MOTIONCP // ((defined OSX_BMS_MOTIONCP) || (defined OSX_BMS_MOTIONPM))
  57.   /* Output Compare Toggle Mode configuration: Channel2 */
  58.   sConfig.Pulse = uhCCR2_Val;
  59.   if(HAL_TIM_OC_ConfigChannel(&TimCCHandle, &sConfig, TIM_CHANNEL_2) != HAL_OK)
  60.   {
  61.     /* Configuration Error */
  62.     Error_Handler();
  63.   }
  64. #endif /* OSX_BMS_MOTIONCP */
  65.   
  66. #ifdef OSX_BMS_MOTIONAR
  67.   /* Output Compare Toggle Mode configuration: Channel3 */
  68.   sConfig.Pulse = uhCCR3_Val;
  69.   if(HAL_TIM_OC_ConfigChannel(&TimCCHandle, &sConfig, TIM_CHANNEL_3) != HAL_OK)
  70.   {
  71.     /* Configuration Error */
  72.     Error_Handler();
  73.   }
  74. #endif /* OSX_BMS_MOTIONAR */
  75.   
  76.   /* Output Compare Toggle Mode configuration: Channel4 */
  77.   sConfig.Pulse = uhCCR4_Val;
  78.   if(HAL_TIM_OC_ConfigChannel(&TimCCHandle, &sConfig, TIM_CHANNEL_4) != HAL_OK)
  79.   {
  80.     /* Configuration Error */
  81.     Error_Handler();
  82.   }
  83.   
  84.   /* Set TIM5 instance (Mic )*/
  85.   TimAudioDataHandle.Instance = TIM5;
  86.   /* Initialize TIM5 peripheral as follow:
  87.      + Period = 100 - 1 (10ms)
  88.      + Prescaler = ((SystemCoreClock/2)/10000) - 1
  89.      + ClockDivision = 0
  90.      + Counter direction = Up
  91.   */
  92.   TimAudioDataHandle.Init.Period = MICS_DB_UPDATE_MUL_10MS*100 - 1;
  93.   TimAudioDataHandle.Init.Prescaler = uwPrescalerValue;
  94.   TimAudioDataHandle.Init.ClockDivision = 0;
  95.   TimAudioDataHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
  96.   if(HAL_TIM_Base_Init(&TimAudioDataHandle) != HAL_OK) {
  97.     /* Initialization Error */
  98.     Error_Handler();
  99.   }
  100. }
复制代码

点评

嗯嗯,好的,谢谢啦。可能我估计还要好久才能改好,谢谢你的帮助。  详情 回复 发表于 2017-4-2 12:10
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

9714

帖子

24

TA的资源

版主

板凳
 
你说的定时1ms是指采样率还是串口的输出数据的时间?算法可以直接在SensorTile上实现 输出对应的数据到电脑

点评

就是怎么样实现用定时器完成流水灯,这个程序会改了,那我接下来就好做了。  详情 回复 发表于 2017-4-1 17:50
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

4
 
littleshrimp 发表于 2017-3-31 21:07
你说的定时1ms是指采样率还是串口的输出数据的时间?算法可以直接在SensorTile上实现 输出对应的数据到电脑

就是串口输出的时间,传入电脑的数据太快了,所以需要定时。用手机APP确实能够观察xyz轴的加速度及其各值,但是我想要将数据传入电脑,上位机就可以用软件来读取传入的数据。

QQ图片20170401170828.jpg (181 KB, 下载次数: 21)

QQ图片20170401170828.jpg

点评

这个你多少需要一点上位机的编程基础 如果用现成的软件,就要知道他的通信协议,然后修改SensorTile按照他要求的协议输出传感器数据  详情 回复 发表于 2017-4-1 17:30
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

5
 
lefu 发表于 2017-4-1 17:14
就是串口输出的时间,传入电脑的数据太快了,所以需要定时。用手机APP确实能够观察xyz轴的加速度及其各值 ...

就是这个图片,这个是用labview做的,可以读取数据和显示数据,但是我不知道怎么把传入电脑的数据给解算出来。
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

6
 
littleshrimp 发表于 2017-3-31 21:07
你说的定时1ms是指采样率还是串口的输出数据的时间?算法可以直接在SensorTile上实现 输出对应的数据到电脑

你这里还有没有寄存器资料也,每次修改程序时都不知道改,改了之后又出现各种问题。

点评

你是指什么寄存器资料?  详情 回复 发表于 2017-4-1 17:31
 
 
 

回复

9714

帖子

24

TA的资源

版主

7
 
lefu 发表于 2017-4-1 17:14
就是串口输出的时间,传入电脑的数据太快了,所以需要定时。用手机APP确实能够观察xyz轴的加速度及其各值 ...

这个你多少需要一点上位机的编程基础
如果用现成的软件,就要知道他的通信协议,然后修改SensorTile按照他要求的协议输出传感器数据
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

9714

帖子

24

TA的资源

版主

8
 
lefu 发表于 2017-4-1 17:23
你这里还有没有寄存器资料也,每次修改程序时都不知道改,改了之后又出现各种问题。

你是指什么寄存器资料?
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

9
 
littleshrimp 发表于 2017-3-31 21:07
你说的定时1ms是指采样率还是串口的输出数据的时间?算法可以直接在SensorTile上实现 输出对应的数据到电脑

就是怎么样实现用定时器完成流水灯,这个程序会改了,那我接下来就好做了。

点评

BlueMicrosystem2例程里有定时器的例程可以参考一下 [mw_shl_code=c,true]/** * @brief Function for initializing timers for sending the information to BLE: * - 1 for sending MotionFX/AR/CP and Acc/Gy  详情 回复 发表于 2017-4-1 18:30
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

10
 
littleshrimp 发表于 2017-4-1 18:30
BlueMicrosystem2例程里有定时器的例程可以参考一下
[code]/**
* @brief  Function for  ...

嗯嗯,好的,谢谢啦。可能我估计还要好久才能改好,谢谢你的帮助。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表