智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2770|回复: 2
打印 上一主题 下一主题

单向编码器如何判断正反转

[复制链接]

4

主题

18

帖子

0

精华

高级会员

Rank: 4

积分
665
威望
336
贡献
203
兑换币
198
注册时间
2015-1-18
在线时间
63 小时
毕业学校
太原工业学院
跳转到指定楼层
1#
发表于 2015-7-9 11:16:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//////////////////////////////// 以下为脉冲计数  //////////////////////////////////////////
/*!
*  @brief      脉冲计数初始化函数
*  @param      TPMn_e          模块号(TPM0、  TPM1、  TPM2)
*  @param      TPM_CLKIN_e     脉冲输入管脚
*  @param      TPM_PS_e        分频因子
*  @since      v5.2
*  @note       同一个TPM,只能干一个活,用于脉冲计数后就不要再用于其他功能,例如PWM、输入捕捉。
*  Sample usage:       tpm_pulse_init(TPM0,TPM_CLKIN1,TPM_PS_2);     //TPM0初始化为脉冲计数,脉冲输入管脚为 TPM_CLKIN1_PIN ,进行二分频计数。
*/
void tpm_pulse_init(TPMn_e tpmn,TPM_CLKIN_e clkin,TPM_PS_e ps)
{
    ASSERT(ps < TPM_PS_MAX);

    //配置 复用
    switch(tpmn)
    {
    case TPM0:
        SIM_SCGC6 |= SIM_SCGC6_TPM0_MASK;       //使能TPM0时钟


        break;
    case TPM1:
        SIM_SCGC6 |= SIM_SCGC6_TPM1_MASK;       //使能TPM1时钟
        break;

    case TPM2:
        SIM_SCGC6 |= SIM_SCGC6_TPM2_MASK;       //使能TPM2时钟
        break;
    default:
        ASSERT(0);
    }

    if(clkin == TPM_CLKIN0)
    {
        SIM_SOPT4 &= ~( SIM_SOPT4_TPM0CLKSEL_MASK << tpmn );
        port_init(TPM_CLKIN0_PIN,ALT4);
    }
    else if(clkin == TPM_CLKIN1)
    {
        SIM_SOPT4 |= ( SIM_SOPT4_TPM0CLKSEL_MASK << tpmn );
        port_init(TPM_CLKIN1_PIN,ALT4);
    }
    else
    {
        ASSERT(0);              //断言,clkin 只能 0 和 1
    }

    /******************** 配置时钟和分频 ********************/
    SIM_SOPT2 &= ~ SIM_SOPT2_TPMSRC_MASK;
    SIM_SOPT2 |= SIM_SOPT2_TPMSRC(1);        //     00 Clock disabled  01 MCGFLLCLK clock, or MCGPLLCLK/2  10 OSCERCLK clock   11 MCGIRCLK clock

    TPM_SC_REG(TPMN[tpmn])    = ( 0
                                  //| TPM_SC_CPWMS_MASK         //0:上升沿计数模式 ,1: 跳变沿计数模式选择 (注释了表示 0)
                                  | TPM_SC_PS(ps)             //分频因子,分频系数 = 2^PS
                                  | TPM_SC_CMOD(2)
                               );
    TPM_MOD_REG(TPMN[tpmn])   = 0xFFFF;
    TPM_CNT_REG(TPMN[tpmn])   = 0;                          //计数器。只有低16位可用(写任何值到此寄存器,都会清0)
}

////////////
能否在这个里边根据陀螺仪来判断????如果能该怎么弄??求指教

回复

使用道具 举报

1

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
352
威望
173
贡献
113
兑换币
112
注册时间
2014-3-3
在线时间
33 小时
毕业学校
海南大学
2#
发表于 2015-7-17 08:23:31 | 只看该作者
可以用74HC74.接一个I/O口,或者通过电机PWM输出,根据电机正转反转判断。
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

注册会员

Rank: 2

积分
14
威望
10
贡献
4
兑换币
3
注册时间
2015-8-18
在线时间
0 小时
毕业学校
长春大学
3#
发表于 2015-8-18 11:34:31 | 只看该作者
楼主你的编码器是什么参数?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-2 08:36 , Processed in 0.065234 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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