智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3450|回复: 12
打印 上一主题 下一主题

编码器脉冲捕捉计数问题

[复制链接]

38

主题

446

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6490
威望
4804
贡献
650
兑换币
1264
注册时间
2014-3-19
在线时间
518 小时
跳转到指定楼层
1#
发表于 2014-4-29 07:20:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在弄编码器时,之前写的程序是每有一个正跳变脉冲,就进入FTM中断,让里面的变量加一;但是学长说这种效率太低了,,,叫我i用一个TIP定时中断,定时为一毫秒,一毫秒进入一次中断,在中断服务程序中读出FTM脉冲捕捉的计数寄存器,让后让在清零;



现在有一个问题,就是不知道这个寄存器在哪,叫什么名字,百度也不到,完全手册里也没发现,求指点,,,,,,,,

谢谢了!
回复

使用道具 举报

54

主题

782

帖子

1

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3569
QQ
威望
1896
贡献
243
兑换币
1222
注册时间
2012-11-24
在线时间
715 小时
2#
发表于 2014-4-29 08:14:10 | 只看该作者
脉冲累加器?
回复 支持 反对

使用道具 举报

24

主题

492

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
13138
威望
5341
贡献
1645
兑换币
2222
注册时间
2012-3-9
在线时间
3076 小时
毕业学校
嘉兴学院
3#
发表于 2014-4-29 09:16:55 | 只看该作者
FTM输入捕捉?用FTM的正交解码
回复 支持 反对

使用道具 举报

38

主题

446

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6490
威望
4804
贡献
650
兑换币
1264
注册时间
2014-3-19
在线时间
518 小时
4#
 楼主| 发表于 2014-4-29 15:56:45 | 只看该作者
yyyzrxh 发表于 2014-4-29 08:14
脉冲累加器?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

38

主题

446

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6490
威望
4804
贡献
650
兑换币
1264
注册时间
2014-3-19
在线时间
518 小时
5#
 楼主| 发表于 2014-4-29 15:59:16 | 只看该作者
机遇 发表于 2014-4-29 09:16
FTM输入捕捉?用FTM的正交解码

正交解码  那个不是用来判断正反的么?
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
343
威望
183
贡献
78
兑换币
99
注册时间
2013-10-1
在线时间
41 小时
6#
发表于 2014-4-29 16:55:38 | 只看该作者
:):)
回复 支持 反对

使用道具 举报

38

主题

446

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6490
威望
4804
贡献
650
兑换币
1264
注册时间
2014-3-19
在线时间
518 小时
7#
 楼主| 发表于 2014-4-29 19:24:31 | 只看该作者
zhagsenkk 发表于 2014-4-29 16:55

同学  留个建议
回复 支持 反对

使用道具 举报

6

主题

308

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1467

活跃会员奖章优秀会员奖章

威望
701
贡献
410
兑换币
428
注册时间
2014-1-6
在线时间
178 小时
8#
发表于 2014-4-29 19:40:41 | 只看该作者
abacrya、军 发表于 2014-4-29 15:59
正交解码  那个不是用来判断正反的么?

正交解码既可以判断正反,又可以测速,测不出来速度怎么判断正反?看Fire的库吧,里面有正交解码,在FTM那里
回复 支持 反对

使用道具 举报

38

主题

446

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6490
威望
4804
贡献
650
兑换币
1264
注册时间
2014-3-19
在线时间
518 小时
9#
 楼主| 发表于 2014-4-29 19:47:03 | 只看该作者
狂野的庄稼汉 发表于 2014-4-29 19:40
正交解码既可以判断正反,又可以测速,测不出来速度怎么判断正反?看Fire的库吧,里面有正交解码,在FTM那 ...

FTM就这三个   没有找到你说i的。。。你给我复制一个把、、。谢谢啦  我只用了一个FTM口测速、、


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

6

主题

308

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1467

活跃会员奖章优秀会员奖章

威望
701
贡献
410
兑换币
428
注册时间
2014-1-6
在线时间
178 小时
10#
发表于 2014-4-29 19:50:17 | 只看该作者
abacrya、军 发表于 2014-4-29 19:47
FTM就这三个   没有找到你说i的。。。你给我复制一个把、、。谢谢啦

额,我用的是新库,这是MK60_ftm.c里的函数
  1. //////////////////////////////// 以下为正交解码 //////////////////////////////////////////

  2. /*!
  3. *  @brief      初始化FTM 的正交解码 功能
  4. *  @param      FTMn_e    模块号( FTM1、  FTM2)
  5. *  @since      v5.0
  6. *  Sample usage:       FTM_QUAD_Init(FTM1);    //初始化 FTM1 为正交解码模式
  7. */
  8. void FTM_QUAD_Init(FTMn_e ftmn)
  9. {
  10.     ASSERT( (ftmn == FTM1) || (ftmn == FTM2 ) ); //检查传递进来的通道是否正确

  11.     /******************* 开启时钟 和 复用IO口*******************/
  12.     switch(ftmn)
  13.     {

  14.     case FTM1:
  15.         SIM_SCGC6 |= SIM_SCGC6_FTM1_MASK;       //使能FTM1时钟
  16.         if(FTM1_QDPHA == PTA8)                  //管脚复用
  17.         {
  18.             port_init(FTM1_QDPHA, ALT6);
  19.         }
  20.         else if(FTM1_QDPHA == PTA12)
  21.         {
  22.             port_init(FTM1_QDPHA, ALT7);
  23.         }
  24.         else if(FTM1_QDPHA == PTB0)
  25.         {
  26.             port_init(FTM1_QDPHA, ALT6);
  27.         }
  28.         else
  29.         {
  30.             ASSERT(0);                          //断言,配置的管脚不符合要求
  31.         }

  32.         if(FTM1_QDPHB == PTA9)
  33.         {
  34.             port_init(FTM1_QDPHB, ALT6);
  35.         }
  36.         else if(FTM1_QDPHB == PTA13)
  37.         {
  38.             port_init(FTM1_QDPHB, ALT7);
  39.         }
  40.         else if(FTM1_QDPHB == PTB1)
  41.         {
  42.             port_init(FTM1_QDPHB, ALT6);
  43.         }
  44.         else
  45.         {
  46.             ASSERT(0);                          //断言,配置的管脚不符合要求
  47.         }
  48.         break;

  49.     case FTM2:
  50.         SIM_SCGC3 |= SIM_SCGC3_FTM2_MASK;                           //使能FTM2时钟
  51.         if(FTM2_QDPHA == PTA10)                  //管脚复用
  52.         {
  53.             port_init(FTM2_QDPHA, ALT6);
  54.         }
  55.         else if(FTM2_QDPHA == PTB18)
  56.         {
  57.             port_init(FTM2_QDPHA, ALT6);
  58.         }
  59.         else
  60.         {
  61.             ASSERT(0);                          //断言,配置的管脚不符合要求
  62.         }

  63.         if(FTM2_QDPHB == PTA11)                  //管脚复用
  64.         {
  65.             port_init(FTM2_QDPHB, ALT6);
  66.         }
  67.         else if(FTM2_QDPHB == PTB19)
  68.         {
  69.             port_init(FTM2_QDPHB, ALT6);
  70.         }
  71.         else
  72.         {
  73.             ASSERT(0);                          //断言,配置的管脚不符合要求
  74.         }
  75.         break;
  76.     default:
  77.         ASSERT(0);                              //断言,配置的模块有误
  78.         break;
  79.     }

  80.     FTM_MODE_REG(FTMN[ftmn])  |=    (0
  81.                                      | FTM_MODE_WPDIS_MASK  //写保护禁止
  82.                                      //| FTM_MODE_FTMEN_MASK   //使能 FTM
  83.                                     );
  84.     FTM_QDCTRL_REG(FTMN[ftmn]) |=   (0
  85.                                     | FTM_QDCTRL_QUADMODE_MASK
  86.                                      );
  87.     FTM_CNTIN_REG(FTMN[ftmn])   = 0;
  88.     FTM_MOD_REG(FTMN[ftmn])     = FTM_MOD_MOD_MASK;
  89.     FTM_QDCTRL_REG(FTMN[ftmn]) |=   (0
  90.                                     | FTM_QDCTRL_QUADEN_MASK
  91.                                      );
  92.     FTM_MODE_REG(FTMN[ftmn])  |= FTM_QDCTRL_QUADEN_MASK;
  93.     FTM_CNT_REG(FTMN[ftmn])     = 0;                    //计数器。只有低16位可用(写任何值到此寄存器,都会加载 CNTIN 的值)
  94. }

  95. /*!
  96. *  @brief      获取FTM 正交解码 的脉冲数
  97. *  @param      FTMn_e    模块号( FTM1、  FTM2)
  98. *  @since      v5.0
  99. *  Sample usage:       int16 count = FTM_QUAD_get(FTM1);    //获取  FTM1 交解码 的脉冲数
  100. */
  101. int16 FTM_QUAD_get(FTMn_e ftmn)
  102. {
  103.     int16 val;
  104.     ASSERT( (ftmn == FTM1) || (ftmn == FTM2 ) );        //检查传递进来的通道是否正确
  105.     val = FTM_CNT_REG(FTMN[ftmn]);

  106.     return val;
  107. }

  108. /*!
  109. *  @brief      清 FTM 正交解码 的脉冲数
  110. *  @param      FTMn_e    模块号( FTM1、  FTM2)
  111. *  @since      v5.0
  112. *  Sample usage:       FTM_QUAD_clean(FTM1);    //复位 FTM1 正交解码 的脉冲数
  113. */
  114. void FTM_QUAD_clean(FTMn_e ftmn)
  115. {
  116.     ASSERT( (ftmn == FTM1) || (ftmn == FTM2 ) ); //检查传递进来的通道是否正确

  117.     FTM_CNT_REG(FTMN[ftmn])     = 0;             //计数器。只有低16位可用(写任何值到此寄存器,都会加载 CNTIN 的值)
  118. }


复制代码



回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 19:55 , Processed in 0.209186 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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