2019-08-13 19:53发布
Acuity 发表于 2017-10-14 11:09 编码器不要用Z相,用得不好效果更差;我只用到A、B相,固定周期读取寄存器数值;中断不会导致丢失脉冲数 ...
最多设置5个标签!
贴上我设置TIM5编码器模式的代码
void TIM5_Encoder_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
TIM_DeInit(TIM5);
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);//时间基数单位初始化为默认值。
TIM_TimeBaseStructure.TIM_Period = 14396;//3600*4 -4,计数器预装载值。完成一圈时的总计数值。
TIM_TimeBaseStructure.TIM_Prescaler = 0;//预分频系数为0,即不进行预分频
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//设置时钟分割 T_dts = T_ck_int
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上计数
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
TIM_EncoderInterfaceConfig(TIM5, TIM_EncoderMode_TI12, TIM_ICPolarity_BothEdge ,TIM_ICPolarity_BothEdge);//使用编码器模式3,上升下降都计数(4倍频)
TIM_ICStructInit(&TIM_ICInitStructure);//将结构体中的内容缺省输入
TIM_ICInitStructure.TIM_ICFilter = 4;//选择输入比较滤波器
TIM_ICInit(TIM5, &TIM_ICInitStructure);
TIM5->CNT = 0;
TIM_Cmd(TIM5,ENABLE);
}
这样设置完TIM5->CNT的读取时间如何设置?还有读取TIM5->CNT的时候是否可以通过设置中断优先级之类的调整读取先后顺序?
一周热门 更多>