搜索
bottom↓
回复: 4

k60的正交解码实验,编码器输出的脉冲乱(已解决)

[复制链接]

出0入0汤圆

发表于 2014-4-6 10:20:12 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_ZJJ 于 2014-5-7 10:40 编辑

我在同学的程序上实验时转一下就有好几百的脉冲,我的编码器是360线的
我试了很多,修改了很多参数还是不行,求救啊


  1. /*!
  2. *     COPYRIGHT NOTICE
  3. *     Copyright (c) 2013,野火科技
  4. *     All rights reserved.
  5. *     技术讨论:野火初学论坛 http://www.chuxue123.com
  6. *
  7. *     除注明出处外,以下所有内容版权均属野火科技所有,未经允许,不得用于商业用途,
  8. *     修改内容时必须保留野火科技的版权声明。
  9. *
  10. * @file       main.c
  11. * @brief      野火K60 平台主程序
  12. * @author     野火科技
  13. * @version    v5.0
  14. * @date       2013-08-28
  15. */

  16. #include "common.h"
  17. #include "include.h"

  18. void PIT0_IRQHandler(void);

  19. void FTM_QUAD_Init(void)
  20. {
  21.    /*开启端口时钟*/
  22.   //  SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;
  23.     /*选择管脚复用功能*/
  24. //  port_init(FTM1_QDPHA, ALT6);
  25. ///   port_init(FTM1_QDPHB, ALT6);
  26.     // PORTA_PCR10 = PORT_PCR_MUX(6);
  27.     //PORTA_PCR11 = PORT_PCR_MUX(6);
  28.     /*使能FTM1、FTM2时钟*/
  29.   //  SIM_SCGC6|=SIM_SCGC6_FTM1_MASK;
  30.     //SIM_SCGC3|=SIM_SCGC3_FTM2_MASK;
  31.   // FTM1_MOD = FTM_MOD_MOD_MASK; //可根据需要设置
  32.    // FTM2_MOD = 14000;
  33. //   FTM1_CNTIN = 0;
  34.    // FTM2_CNTIN = 0;
  35.   //  FTM1_MODE |= FTM_MODE_WPDIS_MASK; //禁止写保护
  36.    // FTM2_MODE |= FTM_MODE_WPDIS_MASK; //禁止写保护
  37. //   FTM1_MODE |= FTM_MODE_FTMEN_MASK; //FTMEN=1,关闭TPM兼容模式,开启FTM所有功能
  38. //
  39.    // FTM2_MODE |= FTM_MODE_FTMEN_MASK; //FTMEN=1,关闭TPM兼容模式,开启FTM所有功能
  40.   //  FTM1_QDCTRL &= ~FTM_QDCTRL_QUADMODE_MASK; //选定编码模式为A相与B相编码模式
  41.   // FTM1_QDCTRL |= FTM_QDCTRL_QUADEN_MASK; //使能正交解码模式

  42.    //FTM2_QDCTRL &= ~FTM_QDCTRL_QUADMODE_MASK; //选定编码模式为A相与B相编码模式

  43.     //FTM2_QDCTRL |= FTM_QDCTRL_QUADEN_MASK; //使能正交解码模式
  44.    //FTM1_SC |= FTM_SC_CLKS(1)|FTM_SC_PS(3);  //选择外部时钟

  45. //   FTM1_CONF |=FTM_SC_CLKS(1)|FTM_SC_PS(3); //可根据需要选择

  46.    // FTM2_SC |= FTM_SC_CLKS(3);

  47. //   FTM2_CONF |=FTM_CONF_BDMMODE(3);
  48. //FTM_MemMapPtr FTMN[3] = {FTM0_BASE_PTR, FTM1_BASE_PTR, FTM2_BASE_PTR}; //定义三个指针数组保存 FTMn_e 的地址

  49.    SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;
  50.    SIM_SCGC6 |= SIM_SCGC6_FTM1_MASK;       //使能FTM1时钟
  51.    port_init(FTM1_QDPHA, ALT6);
  52.    port_init(FTM1_QDPHB, ALT6);
  53.     FTM_MODE_REG(FTM1_BASE_PTR)  |=    (0
  54.                                      | FTM_MODE_WPDIS_MASK  //写保护禁止
  55.                                      //| FTM_MODE_FTMEN_MASK   //使能 FTM
  56.                                     );
  57.     FTM_QDCTRL_REG(FTM1_BASE_PTR) |=   (0
  58.                                     | FTM_QDCTRL_QUADMODE_MASK
  59.                                      );
  60.     FTM_CNTIN_REG(FTM1_BASE_PTR)   = 0;
  61.     FTM_MOD_REG(FTM1_BASE_PTR)     = FTM_MOD_MOD_MASK;
  62.     FTM_QDCTRL_REG(FTM1_BASE_PTR) |=   (0
  63.                                     | FTM_QDCTRL_QUADEN_MASK
  64.                                      );
  65.     FTM_MODE_REG(FTM1_BASE_PTR)  |= FTM_QDCTRL_QUADEN_MASK;
  66.     FTM_CNT_REG(FTM1_BASE_PTR)     = 0;                    //计数器。只有低16位可用(写任何值到此寄存器,都会加载 CNTIN 的值)
  67. }
  68. /*!
  69. *  @brief      main函数
  70. *  @since      v5.0
  71. *  @note       FTM 正交解码 测试
  72. */
  73. void main(void)
  74. {
  75.     FTM_QUAD_Init();                        //FTM1 正交解码初始化
  76.     pit_init_ms(PIT0, 100);                                 //初始化PIT0,定时时间为: 1000ms
  77.     set_vector_handler(PIT0_VECTORn ,PIT0_IRQHandler);      //设置PIT0的中断复位函数为 PIT0_IRQHandler
  78.     enable_irq (PIT0_IRQn);                                 //使能PIT0中断

  79.     while(1);
  80. }

  81. /*!
  82. *  @brief      PIT0中断服务函数
  83. *  @since      v5.0
  84. *   PTA8----A   PTA9----B
  85. */
  86. void PIT0_IRQHandler(void)
  87. {

  88.     int32 val1;
  89.     val1 = FTM_QUAD_get(FTM1);          //获取FTM 正交解码 的脉冲数(负数表示反方向)
  90.    FTM_QUAD_clean(FTM1);      
  91.     printf("\n正转:%d",val1);
  92.     PIT_Flag_Clear(PIT0);       //清中断标志位
  93. }
复制代码



出0入0汤圆

 楼主| 发表于 2014-4-6 10:46:50 | 显示全部楼层
求助啊,在线等

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2014-4-6 11:42:56 | 显示全部楼层
解决了,忘了加上拉电阻了

出0入0汤圆

发表于 2014-4-8 09:19:07 | 显示全部楼层
thy110 发表于 2014-4-6 11:42
解决了,忘了加上拉电阻了

恭喜楼主问题解决了。

出0入0汤圆

发表于 2014-4-12 20:16:17 | 显示全部楼层
我以前用过的编码器也是这样,开漏输出的需要自己加上拉电阻。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 04:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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