当前位置:首页 > Stm8s 定时器TIM1的编码模式 与旋转开关的接口 - 图文
Stm8s 定时器TIM1的编码模式 与旋转开关的接口
Stm8s只有定时器一有编码模式,硬件根据两个通道CH1 和CH2进来相位的关系,计数器自动加减。不需要再通过外部中断来进行旋转编码。一共有三种工作模式。
1.计数器只在TI2的边沿计数,则置TIMx_SMCR寄存器中的 SMS=001;
2.只在TI1边沿计数,则置SMS=010;
3.计数器同时在TI1和TI2边沿计数,则置SMS=011。 代码
CLK->PCKENR1 |=0X80; //开启time1时钟
TIM1->SMCR |= 0X02; //工作在编码器模式2
TIM1->CCMR1 |= 0X1; //IC1FP1映射到TI1)
TIM1->CCMR2 |= 0X1; //IC2FP2映射到TI2 CC2 MAP TI2FP2 CH2
TIM1->ARRH = 0XEA; // 60000产生溢出 最大65535
TIM1->ARRL = 0X60;
TIM1->IER |=0X1; //开中断 ,开中断前要有中断处理程序,中断
里需要清除中断标志位
TIM1->CNTRH = 0xea; / /我要有个大的初始化值 TIM1->CNTRL=0x56;
TIM1->CR1 =0X01; //启动计数
中断处理程序 #pragma vector=0x0d
__interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void) {
TIM1_ClearITPendingBit(TIM1_IT_UPDATE); if((TIM1->CR1&0x10)!=0) count2--; else count2++; }
当计数寄存器(TIM1_CNTR)里的计数值到由TIM1->ARR到0时,开中断的话,会产生溢出中断,根据读TIM1->CR1里的DIR位可以读出方向, DIR位等于1向下计数,DIR等于0向上计数(此时的DIR只读)
普通旋转编码开关的的波形。实际测试结果如下:
与网上所介绍的有所不同,根据旋转方向的不同,两个波形有相位差(超前或滞后)同一时刻对应的两个波形的脉宽相同,不同的是占空比。
实际操作中
1 TIM1->SMCR |= 0X01
顺时针旋转 不稳定 有时+2 逆时针 稳定-2 2 TIM1->SMCR |= 0X02 顺时针 +1逆时针-1 稳定 3 TIM1->SMCR |= 0X03 顺时针+1 逆时针-3
选用第二种模式比较稳定,与旋转开关的输出波形有关。按理说模式一和模式2应该效果一样但是实际不同。
共分享92篇相关文档