野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11253|回复: 1

求助贴:关于增量型光电编码器的脉冲捕获问题

[复制链接]
发表于 2017-4-30 14:44:03 | 显示全部楼层 |阅读模式
本人最近在做一个光电编码器脉冲捕获的实验,按照一些资料和手册做了相应IO口的配置,下面是我个人移植的一些代码。
“encorder.c”文件代码:
  1. #include "encoder.h"

  2. TIM_ICInitTypeDef TIM5_ICInitStructure;
  3. void TIM5_Cap_Init(u16 arr,u16 psc)
  4. {
  5. GPIO_InitTypeDef GPIO_InitStructure;
  6. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  7. NVIC_InitTypeDef NVIC_InitStructure;
  8. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //ê1Äü TIM5 ê±Öó
  9. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //ê1Äü GPIOB ê±Öó
  10. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PB0 Çå3t֮ǰéèÖÃ
  11. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PB0 êäèë
  12. GPIO_Init(GPIOB, &GPIO_InitStructure);//3õê¼»ˉ GPIOB.0
  13. GPIO_ResetBits(GPIOB,GPIO_Pin_0);  //PB0 ÏÂà-
  14. TIM_TimeBaseStructure.TIM_Period = arr; //é趨¼ÆêyÆ÷×Ô¶ˉÖØ×°
  15. TIM_TimeBaseStructure.TIM_Prescaler =psc; //Ô¤·ÖÆμÆ÷
  16. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // TDTS = Tck_tim
  17. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM ÏòéϼÆêyÄ£ê½
  18. TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMx
  19. TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; // Ñ¡Ôñêäèë¶Ë IC1 ó3éäμ½ TI1 éÏ
  20. TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;  //éÏéyÑØ2¶»ñ
  21. TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //ó3éäμ½ TI1 éÏ
  22. TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //ÅäÖÃêäèë·ÖÆμ,2»·ÖÆμ
  23. TIM5_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 ÅäÖÃêäèëÂË2¨Æ÷ 2»ÂË2¨
  24. TIM_ICInit(TIM5, &TIM5_ICInitStructure);//3õê¼»ˉ TIM5 êäèë2¶»ñí¨μà 1

  25. NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn; //TIM5 ÖD¶Ï
  26. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //ÏèÕ¼óÅÏ輶¶t¼¶
  27. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //′óóÅÏ輶0¼¶
  28. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ í¨μà±»ê1Äü
  29. NVIC_Init(&NVIC_InitStructure); //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉ NVIC

  30. TIM_ITConfig( TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//ÔêDí¸üDÂÖD¶Ï2¶»ñÖD¶Ï
  31. TIM_Cmd(TIM5,ENABLE );}  //ê1Äü¶¨ê±Æ÷5
  32. u8 TIM5CH1_CAPTURE_STA=0;  //êäèë2¶»ñ×′ì¬
  33. u16 TIM5CH1_CAPTURE_VAL; //êäèë2¶»ñÖμ
  34. //¶¨ê±Æ÷5·tÎñÖD¶Ï3ìDò
  35. void TIM5_IRQHandler(void)
  36. {
  37. if((TIM5CH1_CAPTURE_STA&0X80)==0)//»1Î′3é1|2¶»ñ
  38. {
  39. if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)
  40. {
  41. if(TIM5CH1_CAPTURE_STA&0X40)//òѾ-2¶»ñμ½¸ßμçƽáË
  42.         {
  43. if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//¸ßμçƽì«3¤áË
  44. {
  45. TIM5CH1_CAPTURE_STA|=0X80;//±ê¼Ç3é1|2¶»ñáËò»′Î
  46. TIM5CH1_CAPTURE_VAL=0XFFFF;
  47. }else TIM5CH1_CAPTURE_STA++;
  48. }
  49. }
  50. if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)//2¶»ñ1·¢éú2¶»ñê¼t
  51. {
  52. if(TIM5CH1_CAPTURE_STA&0X40) //2¶»ñμ½ò»¸öϽμÑØ
  53. {
  54. TIM5CH1_CAPTURE_STA|=0X80;  //±êÖ¾3é1|2¶»ñμ½ò»′ÎéÏéyÑØ
  55. TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);
  56. TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); //éèÖÃÎaéÏéyÑØ2¶»ñ
  57. }else //»1Î′¿aê¼£¬μúò»′Î2¶»ñéÏéyÑØ
  58. {
  59. TIM5CH1_CAPTURE_STA=0;  //Çå¿Õ
  60. TIM5CH1_CAPTURE_VAL=0;
  61. TIM_SetCounter(TIM5,0);
  62. TIM5CH1_CAPTURE_STA|=0X40;  //±ê¼Ç2¶»ñμ½éÏéyÑØ
  63. TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling); //éèÖÃÎaϽμÑØ2¶»ñ
  64. }
  65. }
  66. }
  67. TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); //Çå3yÖD¶Ï±ê־λ
  68. }
复制代码


“encoder.h"文件代码:
  1. #ifndef _ENCODER_H
  2. #define _ENCODER_H
  3. #include "stm32f10x.h"
  4. #include "misc.h"
  5. #include "stm32f10x_tim.h"
  6. #endif

  7. void TIM5_Cap_Init(u16 arr,u16 psc);
  8. void TIM5_IRQHandler(void);
复制代码

想利用定时器做一个1s的中断,统计1s内输入的高电平数并将该数值打印,但不知道该如何写相应的程序,有大神能帮我看看嘛?

                       
                  
回复

使用道具 举报

发表于 2017-4-30 15:03:33 | 显示全部楼层
我有移植过输入捕获求占空比和频率的程序,中断里面有检测高电平和低电平个数。 你看看

TIME5-输入捕获频率占空比(PA1).rar

455.58 KB, 下载次数: 46

回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-15 21:42 , Processed in 0.028455 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表