EC11数字电位器使用方法,利用定时器的编码(Encoder)模式

EC11数字电位器使用方法,利用定时器的编码(Encoder)模式

1. 硬件连接

PB6 ------> TIM4_CH1   EC11_A_Pin

PB7 ------> TIM4_CH2   EC11_B_Pin
>

2.定时器配置

(1)寄存器配置
分频(PSC):	5
自动装载值是30,扭动电位器旋钮,往上加到30后又从0开始。
输入滤波是4。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yI2N2TH5-1617332095652)(E:\记录\EC11\TIM4.png)]

(2)开中断

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O7I8Nr6k-1617332095658)(E:\记录\EC11\开中断.png)]

(3)引脚的标签

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2BKZEsPX-1617332295283)(E:\记录\EC11\生成.png)]

3. 生成

在这里插入图片描述

4. 中断函数

void EC11_Init()
{
	// HAL_TIM_Encoder_Start(htim4,TIM_CHANNEL_1);
	HAL_TIM_Encoder_Start_IT(&htim4,TIM_CHANNEL_1);

}
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if(htim == &htim4)
	{
		HAL_TIM_StateTypeDef state;
		// state = HAL_TIM_Encoder_GetState(&htim4);
		state =htim->State;
		if(state)
		{

			EC11_count();

		}

	}

}
void EC11_count()
{
	// EC11_cnt = __HAL_TIM_GET_COMPARE(&htim4,TIM_CHANNEL_1);
	EC11_cnt +=1;
	// EC11_cnt =1;

}

5.试验

改变分频值(PSC)和自动装载值时,对程序无影响。  
如下,是把自动装载值(Counter Period),即ARR寄存器改为20时,扭动旋钮,寄存器CNT和CCR1计数到20时,又从0开始。  

正转: CR1和DMAR的值是0x01,CCR1从0增加到20时,又从0开始。
在这里插入图片描述
反转: CR1和DMAR的值是0x11,CCR1从20递减到0时,又从20开始。
在这里插入图片描述

6.几个库函数

(1)__HAL_TIM_SET_AUTORELOAD 同时设置自动加载寄存器ARR值和初始化库函数。
Instance->ARR
Init.Period
(2) __HAL_TIM_SET_COMPARE 设置捕获值寄存器CCR1的值
(3) __HAL_TIM_GET_COMPARE 取得捕获值寄存器CCR1的值
(4)__HAL_TIM_SET_COUNTER 设置计数器寄存器CNT的值
(5) __HAL_TIM_GET_COUNTER 取得计数器寄存器CNT的值
定时器编码(Encoder)模式下 CCR1和CNT两个寄存器的值时相同的,都是和ARR里面值相同时从0开始,使用时取其中一个都可。
定时器在中心对齐模式或编码器模式下运行时,也可以用库函数__HAL_TIM_IS_TIM_COUNTING_DOWN(HANDLE) 来判断方向,本例中返回值是0正转,1反转。

CCR1和CNT两个寄存器的数值相同,都是正转时增加,反转时递减。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值