你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm定时器采集高电平数据有波动

[复制链接]
麦龙电子 提问时间:2020-3-16 20:19 /
通过STM32F103RCT6需要采集3路方波的高电平,没有使用输入捕获采集(输入捕获是特定的引脚,比较麻烦)采集的方波的周期是7MS频率145HZ,通过定时加外部中断的方式实现了采集,由于对采集电平的精度有要求,所以在串口直接打印得到的数据上看会有最小位数为10左右的跳动。但是通过软件滤波没有实现平稳的输出。我个人觉得是采集的方式有问题,导致的数据跳动,有没有高手请教一下,通过软件来修正一下,使用了窗口滑动滤波测试效果很差,延迟比较严重。
  1. 初始化部分
复制代码

串口打印输出数据

串口打印输出数据
收藏 评论4 发布时间:2020-3-16 20:19

举报

4个回答
麦龙电子 回答时间:2020-3-16 20:30:22
  1.          TIM2_Cap_Init(0XFFFF,100-1);              //1US分辨率 计数值65535 最大60ms
  2.          TIM3_Cap_Init(0XFFFF,100-1);              //1US分辨率 计数值65535 最大60ms
  3.          TIM4_Cap_Init(0XFFFF,100-1);              //1US分辨率 计数值65535 最大60ms         
  4.         delay_us(10);
  5.         EXTI_PA1_Init();                  //配置外部中断1
  6.         EXTI_PA2_Init();                  //配置外部中断2
  7.         EXTI_PA3_Init();                  //配置外部中断3        


  8. unsigned short High_Time_us_PA1=0; //PA1高电平时间
  9. unsigned short High_Time_us_PA2=0; //PA2高电平时间
  10. unsigned short High_Time_us_PA3=0; //PA3高电平时间

  11. void EXTI1_IRQHandler(void)                       //EXTI_Line1
  12. {
  13.   if(EXTI_GetITStatus(EXTI_Line1)!= RESET)      
  14.   {
  15.     if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1))        //上升沿中断
  16.                 {
  17.                         TIM2->CNT=0;         //从0开始计数
  18.                         TIM_Cmd(TIM2,ENABLE);//启动定时器2
  19.                 }
  20.     else //下降沿中断
  21.     {
  22.             High_Time_us_PA1=TIM2->CNT;//将高电平时间读出来
  23.                   TIM_Cmd(TIM2,DISABLE); //关闭定时器2等待下次测量
  24.                         TIM2->CNT=0;           //计数值清零
  25.     }        
  26.                 EXTI->PR = EXTI_Line1;//清除中断标志

  27.   }
  28. }


  29. void EXTI2_IRQHandler(void)                       //EXTI_Line2
  30. {
  31.   if(EXTI_GetITStatus(EXTI_Line2)!= RESET)      
  32.   {
  33.     if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2))        //上升沿中断
  34.                 {
  35.                         TIM3->CNT=0;         //从0开始计数
  36.                         TIM_Cmd(TIM3,ENABLE);//启动定时器3
  37.                 }
  38.     else //下降沿中断
  39.     {
  40.             High_Time_us_PA2=TIM3->CNT;//将高电平时间读出来
  41.                   TIM_Cmd(TIM3,DISABLE); //关闭定时器3等待下次测量
  42.                         TIM3->CNT=0;           //计数值清零
  43.     }        
  44.                 EXTI->PR = EXTI_Line2;//清除中断标志
  45.   }
  46. }


  47. void EXTI3_IRQHandler(void)                       //EXTI_Line3
  48. {
  49.   if(EXTI_GetITStatus(EXTI_Line3)!= RESET)      
  50.   {
  51.     if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3))        //上升沿中断
  52.                 {
  53.                         TIM4->CNT=0;         //从0开始计数
  54.                         TIM_Cmd(TIM4,ENABLE);//启动定时器4
  55.                 }
  56.     else //下降沿中断
  57.     {
  58.             High_Time_us_PA3=TIM4->CNT;//将高电平时间读出来
  59.                   TIM_Cmd(TIM4,DISABLE); //关闭定时器4等待下次测量
  60.                         TIM4->CNT=0;           //计数值清零
  61.     }        
  62.                 EXTI->PR = EXTI_Line3;//清除中断标志
  63.   }
  64. }
复制代码
麦龙电子 回答时间:2020-3-17 20:24:44
麦龙电子 回答时间:2020-3-18 18:15:27
mylovemcu 回答时间:2020-3-19 14:35:21
我没有实际做过  不过感觉你这个属于正常吧  1us的分辨率  波动个7-8us很正常  
再说了  输入信号的稳定性也有关系啊

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版