一个定时器需要捕捉多路信号,可以完成任务么

[复制链接]
1758|11
 楼主| 会飞的大白 发表于 2015-8-23 13:34 | 显示全部楼层 |阅读模式
一个定时器需要捕捉多路信号,因为定时器不够用了,这样做可以么,对信号有什么要求呢?
deliciouscook 发表于 2015-8-23 16:18 | 显示全部楼层
可以的,本身就有这样的功能的
deliciouscook 发表于 2015-8-23 16:19 | 显示全部楼层
网上找的一段话
stm32f3捕获多路pwm输入
1.定时器有捕获 PWM 的功能. 这个方式用起来最简单, 但是一个定时器只能捕获一路.
2.只用定时器双边沿捕获功能, 发生捕获时产生中断, 在中断里识别上升下降沿. 从而计算出 PWM 的频率和占空比, 这样一个定时器最多可捕获4路.
3. 用 IO 口双边沿触发中断, 在中断里读取定时器的值. 这样一个定时器可以测量任意个 PWM 信号.
通宵敲代码 发表于 2015-8-23 17:09 | 显示全部楼层
做好信号区分就行,完全没问题的
HARRY007 发表于 2015-8-23 21:03 | 显示全部楼层
可以的,我们用的STM8的一个定时器也是捕捉的多路信号。不过速度太快,交叉很多的话也会存在问题的
李冬发 发表于 2015-8-24 02:13 | 显示全部楼层
现代的MCU的定时器捕捉都是多路的,3路到7路不等。
e08610318 发表于 2015-8-24 09:38 | 显示全部楼层
1.读datasheet,看看芯片硬件功能是否可以实现
2.考虑软件实现的可能性
yklstudent 发表于 2015-8-24 12:12 | 显示全部楼层
STM32F207上试过,调试测路数没有问题,不过频率不要太高
若相依 发表于 2015-8-28 08:55 | 显示全部楼层
  1. void EXTI3_IRQHandler(void)
  2. {
  3.          if(GPIOB->IDR & GPIO_Pin_3)
  4.          {
  5.          //高启动定时器,清标准字
  6.          PPM_star[1]=TIM_GetCounter(TIM2);
  7.          }
  8.          else
  9.          {
  10.          PPM_end[1]=TIM_GetCounter(TIM2)-PPM_star[1];
  11.          if(PPM_end[1]>900 && PPM_end[1]<2100)
  12.      {PPMINF[1]=PPM_end[1]-INF_DAT[PPM_mid1];}
  13.          }
  14.      EXTI_ClearITPendingBit(EXTI_Line3);        
  15. }

  16. void EXTI4_IRQHandler(void)
  17. {
  18.          if(GPIOB->IDR & GPIO_Pin_4)
  19.          {
  20.          //高启动定时器,清标准字
  21.          PPM_star[2]=TIM_GetCounter(TIM2);
  22.          }
  23.          else
  24.          {
  25.          PPM_end[2]=TIM_GetCounter(TIM2)-PPM_star[2];
  26.          if(PPM_end[2]>900 && PPM_end[2]<2100)
  27.      {PPMINF[2]=PPM_end[2]-INF_DAT[PPM_mid2];}
  28.          }
  29.      EXTI_ClearITPendingBit(EXTI_Line4);        
  30. }

  31. void EXTI9_5_IRQHandler(void)
  32. {
  33. if(EXTI_GetITStatus(EXTI_Line5) != RESET)
  34.   {
  35.      //高开始计时
  36.          //低停止计时
  37.          if(GPIOB->IDR & GPIO_Pin_5)
  38.          {
  39.          //高启动定时器,清标准字
  40.          PPM_star[3]=TIM_GetCounter(TIM2);
  41.          }
  42.          else
  43.          {
  44.          PPM_end[3]=TIM_GetCounter(TIM2)-PPM_star[3];
  45.          if(PPM_end[3]>900 && PPM_end[3]<2100)
  46.      {PPMINF[3]=PPM_end[3]-INF_DAT[PPM_mid3];}
  47.          }
  48.      EXTI_ClearITPendingBit(EXTI_Line5);
  49.   }

  50. if(EXTI_GetITStatus(EXTI_Line8) != RESET)
  51.   {
  52.      //高开始计时
  53.          //低停止计时
  54.          if(GPIOB->IDR & GPIO_Pin_8)
  55.          {
  56.          //高启动定时器,清标准字
  57.          PPM_star[4]=TIM_GetCounter(TIM2);
  58.          }
  59.          else
  60.          {
  61.          PPM_end[4]=TIM_GetCounter(TIM2)-PPM_star[4];
  62.          if(PPM_end[4]>900 && PPM_end[4]<2100)
  63.      {PPMINF[4]=PPM_end[4]-INF_DAT[PPM_mid4];}
  64.          }
  65.      EXTI_ClearITPendingBit(EXTI_Line8);
  66.   }

  67. if(EXTI_GetITStatus(EXTI_Line9) != RESET)
  68.   {
  69.      //高开始计时
  70.          //低停止计时   
  71.          if(GPIOB->IDR & GPIO_Pin_9)
  72.          {
  73.          //高启动定时器,清标准字
  74.          PPM_star[5]=TIM_GetCounter(TIM2);
  75.          }
  76.          else
  77.          {
  78.          PPM_end[5]=TIM_GetCounter(TIM2)-PPM_star[5];                 
  79.            if(PPM_end[5]>900 && PPM_end[5]<2100)
  80.      {PPMINF[5]=PPM_end[5]-INF_DAT[PPM_mid5];}
  81.          }
  82.      EXTI_ClearITPendingBit(EXTI_Line9);
  83.   }
  84. }
  85. //外部中断
  86. void EXTI15_10_IRQHandler(void)
  87. {
  88. if(EXTI_GetITStatus(EXTI_Line13) != RESET)
  89.   {
  90.      //高开始计时
  91.          //低停止计时   
  92.          if(GPIOC->IDR & GPIO_Pin_13)
  93.          {
  94.          //高启动定时器,清标准字
  95.          PPM_star[6]=TIM_GetCounter(TIM2);
  96.          }
  97.          else
  98.          {
  99.          PPM_end[6]=TIM_GetCounter(TIM2)-PPM_star[6];                 
  100.            if(PPM_end[6]>900 && PPM_end[6]<2100)
  101.      {PPMINF[6]=PPM_end[6]-INF_DAT[PPM_mid6];}
  102.          }
  103.      EXTI_ClearITPendingBit(EXTI_Line13);
  104.   }
  105. }


给你个例程看看
 楼主| 会飞的大白 发表于 2015-8-31 08:45 | 显示全部楼层
yklstudent 发表于 2015-8-24 12:12
STM32F207上试过,调试测路数没有问题,不过频率不要太高

207比103主频高多了
 楼主| 会飞的大白 发表于 2015-8-31 08:45 | 显示全部楼层

我试试看看
 楼主| 会飞的大白 发表于 2015-8-31 08:59 | 显示全部楼层
e08610318 发表于 2015-8-24 09:38
1.读datasheet,看看芯片硬件功能是否可以实现
2.考虑软件实现的可能性

学习了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

139

帖子

0

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