OpenEdv-开源电子网

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

TIM8用做编码器模式

[复制链接]

2

主题

3

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-11-30
在线时间
6 小时
发表于 2018-1-20 21:14:42 | 显示全部楼层 |阅读模式
5金钱
程序如下,TIM1、TIM2、TIM5用作正交编码模式都没问题,电机也调好了,TIM3用来产生PWM波了,TIM4被红外遥控器用了,暂时还得靠红外遥控来调试。
故用TIM8来编码计数,问题是:读不到编码器值啊。。。tmp1=TIM_GetCounter(TIM8);。。。。问题是TIM8没配置好,看不出来哪里的问题,还请大神赐教。


void TIM8_Configuration(u16 arr,u16 psc)  // 电机1    编码器接口设置(TIM8)/PC6-A相  PC7-B相  
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_ICInitTypeDef  TIM_ICInitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

//GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);  //关闭JTAG接口
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);  //关闭JTAG接口 ,开启SWD
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

//GPIO_PinRemapConfig(GPIO_FullRemap_TIM1,ENABLE);       //TIM8没有引脚重定向 。注释掉
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;      //PC6,PC7
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;         
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
GPIO_Init(GPIOC, &GPIO_InitStructure);      
GPIO_WriteBit(GPIOC, GPIO_Pin_6|GPIO_Pin_7,Bit_SET);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE);
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period = 65535; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值,设置足够大即可
            // 只要在采样周期内不超过这个数即可
TIM_TimeBaseStructure.TIM_Prescaler = 0; //设置用来作为TIMx时钟频率除数的预分频值  不分频
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式           
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim

TIM_EncoderInterfaceConfig(TIM8, TIM_EncoderMode_TI12,TIM_ICPolarity_BothEdge,TIM_ICPolarity_BothEdge);//使用编码器模式3,上升下降都计数

TIM_ICStructInit(&TIM_ICInitStructure);
    TIM_ICInitStructure.TIM_ICFilter = 6;  //输入滤波器9
    TIM_ICInit(TIM8, &TIM_ICInitStructure);
    TIM_ClearFlag(TIM8, TIM_FLAG_Update);  //清除所有标志位
    TIM_ITConfig(TIM8, TIM_IT_Update, ENABLE); //允许中断更新

TIM8->CNT = 0;


TIM_Cmd(TIM8, ENABLE);
}

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-21 00:17:39 | 显示全部楼层
既然TIM1都可以了,TIM8应该也快了,差不多的。 再调调吧,建议用简单的代码试试先不要加其他太多的东西
回复

使用道具 举报

0

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-9-25
在线时间
80 小时
发表于 2018-1-22 13:32:35 | 显示全部楼层
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
这个要用上吧,不能注释掉
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2019-12-22
在线时间
36 小时
发表于 2020-2-14 18:34:09 | 显示全部楼层
楼主有关代码还有吗?求助
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2020-1-4
在线时间
2 小时
发表于 2020-4-25 18:01:47 | 显示全部楼层
我用TIM1和8测相同电机转的圈数都不一样,相差1200,不知道为啥
回复

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2019-9-4
在线时间
13 小时
发表于 2020-7-14 10:49:53 | 显示全部楼层
huangyanga 发表于 2018-1-22 13:32
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
这个要用上吧,不能注释掉

確實是
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 11:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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