OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3075|回复: 5

STM32的编码器问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-5-3
在线时间
4 小时
发表于 2016-10-20 20:13:36 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 Albert_Wang 于 2016-10-21 19:38 编辑

我的是E6B2的正交编码器,分辨率1000,弄了好几天了,程序反复看了又看改了又改,但是串口反馈回来的数据都不正常

编码器反馈回来的数据

编码器反馈回来的数据
。我并没有转动编码器,反馈回来的数据呈规律向下计数。做了几天了实在弄不好,只能发帖请教大神们。。。感激不尽。[mw_shl_code=c,true]void TIM4_Mode_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_ICInitTypeDef TIM_ICInitStructure;           

        //PB6 ch1  A,PB7 ch2
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//使能
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能
        
        GPIO_StructInit(&GPIO_InitStructure);//将结构体中的参数按缺省值输入
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;         
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);                           

        NVIC_Config(2);/*此函数为void TIM4_NVIC_Config(NVIC_InitTypeDef NVIC_InitStructure2)
{
        NVIC_InitStructure2.NVIC_IRQChannel = TIM4_IRQn;
        NVIC_InitStructure2.NVIC_IRQChannelPreemptionPriority = 1;//?
        NVIC_InitStructure2.NVIC_IRQChannelSubPriority = 1;//?
        NVIC_InitStructure2.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure2);
}*/

        TIM_DeInit(TIM4);
        TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
        TIM_TimeBaseStructure.TIM_Period = 10000;  //重装载值
        TIM_TimeBaseStructure.TIM_Prescaler = 0; //分频值
        TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1 ;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
        TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);              
        
                 
        TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising ,TIM_ICPolarity_Rising);//编码器3模式
        TIM_ICStructInit(&TIM_ICInitStructure);//缺省值输入
        TIM_ICInitStructure.TIM_ICFilter = 6;  //滤波
        TIM_ICInit(TIM4, &TIM_ICInitStructure);
        TIM_ClearFlag(TIM4, TIM_FLAG_Update);//清楚更新标志位
        TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);//运行中断
        TIM4->CNT = 0;

        TIM_Cmd(TIM4, ENABLE);   //启用TIM4定时器

}[/mw_shl_code]



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-5-3
在线时间
4 小时
 楼主| 发表于 2016-10-21 12:36:18 | 显示全部楼层
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-10-21 13:42:43 | 显示全部楼层
你不是测量编码器的脉冲个数吗?可以用外部中断计脉冲数。同时启动定时器,测一段时间内的脉冲数来得到电机的转速
shop60994719.taobao.com
回复

使用道具 举报

0

主题

183

帖子

0

精华

高级会员

Rank: 4

积分
684
金钱
684
注册时间
2016-1-27
在线时间
184 小时
发表于 2016-10-21 14:37:11 | 显示全部楼层
示波器看一下波形
回复

使用道具 举报

16

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
321
金钱
321
注册时间
2014-12-3
在线时间
75 小时
发表于 2016-10-26 15:55:01 | 显示全部楼层
我今天也遇到了这个问题,加油
世界上最恐怖的事情比我还优秀的人比我还努力学习
回复

使用道具 举报

14

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
480
金钱
480
注册时间
2016-4-5
在线时间
148 小时
发表于 2016-10-26 16:34:19 | 显示全部楼层
你可以每个1s看向串口传TIMx->CNT的值,看问题出在哪里,要是真编码器都没连还向下计数那就是初始化程序的问题
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 11:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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