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

【经验分享】STM32F103正交解码采集编码器圈数和方向程序

[复制链接]
STMCU小助手 发布时间:2022-4-24 17:00
我的硬件连接是PA0->TIM2_CH1,PA1->TIM2_CH23 Z4 b$ n8 h  A% L7 ]6 y
需要注意的是编码器需要接上拉电阻,下面是代码
# g4 z0 q8 ^3 Q9 t) s  c5 v9 h6 R
  1.         GPIO_InitTypeDef GPIO_InitStructure;        //定义一个GPIO结构体变量
    & Q+ j; }+ Y1 K& H; d* @2 p1 E2 v
  2.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//定义一个定时器结构体变量. u% C) g5 N  f! k
  3.         TIM_ICInitTypeDef TIM_ICInitStructure;        //定义一个定时器编码器结构体变量
    ' f' t8 I$ K9 p

  4. / j3 {7 @# r1 U
  5.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能GPIOA时钟5 {! j  W& S/ \; z% s7 c' D* B
  6.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//使能定时器28 [5 E6 h+ j, M+ ]( w. Y- Y! e! R) K
  7. : H+ c0 @2 {+ y$ S% }# C) c
  8.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;                //配置PA0->TIM2_CH1,PA1->TIM2_CH2/ r" o, w7 E: l5 X7 b' `
  9.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                //设置50MHz时钟6 f* j% a5 c3 i5 {
  10.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;                //设置为下拉输入模式
    , g) |/ D2 N% k" u' N- {
  11.         GPIO_Init(GPIOA, &GPIO_InitStructure);6 N0 u4 C; E1 M, p" X' J0 s  l, r

  12. * {. W+ c" c! s
  13.         TIM_TimeBaseStructure.TIM_Period = 0xffff;        //计数器最大值        * b- a1 I! T. ]& E5 c$ Z& o/ K
  14.         TIM_TimeBaseStructure.TIM_Prescaler = 0;        //时钟不分频
    2 k5 P$ c% O% [; }, y9 Y8 m
  15.         TIM_TimeBaseStructure.TIM_ClockDivision = 0;        // 使用的采样频率之间的分频比例
    + y1 I9 u! E. d2 Q7 |; Q
  16.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;        //向上计数
    6 V$ m: t' d  P8 R/ T
  17.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);        //初始化定时器2
    7 O; ~& ?9 q; T7 F$ A
  18. & I2 ^8 ?/ S+ y  a
  19.         TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12,TIM_ICPolarity_Falling, TIM_ICPolarity_Falling);
    ) ]1 C9 N; E$ V$ s+ }
  20.         TIM_ICStructInit(&TIM_ICInitStructure);+ E$ i0 T# i' ?6 W% B' T* F5 y
  21.         TIM_ICInitStructure.TIM_ICFilter = 6;  s3 R, }4 F& g9 c  p. G; l
  22.         TIM_ICInit(TIM2, &TIM_ICInitStructure);/ E5 g. h1 j4 }- b0 I; }; h/ Z
  23. 3 j8 E0 S1 b; v  p' h( [
  24.         TIM_SetCounter(TIM2, 0x7fff);9 g. ]! F: T2 A+ Z' l4 d) Q& _' p
  25. & G# }$ |( _7 K5 [
  26.         //  TIM_ClearITPendingBit(TIM2, TIM_IT_Update);                //清除定时器2中断标志位; E3 y7 T, M; L. d! |
  27.         TIM_ClearFlag(TIM2, TIM_FLAG_Update);3 J; v# g- m0 Q+ X) K7 N0 D) ]

  28. + c/ j, |2 |* n% A" G. v5 o; d
  29.         //        TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);                //打开定时器2中断! z& z7 q9 M1 k+ s- a" L
  30.         TIM_Cmd(TIM2, ENABLE);  //计数器使能,开始计数
复制代码

+ U  x& ]0 S  ~% i2 P( w) |; i获取计数值
  1.         encoderCount=TIM_GetCounter(TIM2)-0x7fff;- T7 M# s" i& h, x( H6 L5 _
  2.         TIM_SetCounter(TIM2, 0x7fff);' S! }, f. L. y5 R( c' l: W. h% [
复制代码
" A8 P, m% O% N) ~* f7 A+ X
减去0x7fff是因为区分正反转,正转值为正 反转值为负
赞 收藏 评论0 发布时间:2022-4-24 17:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版