【6-8】编码器接口测速

编码器代码书写思路

1.RCC时钟声明

2.GPIO初始化

3.时基单元的配置。其中ARR配置为最大值65535

4.对输入通道进行配置

5.对编码器接口初始化

6.TIM_Cmd()

一、新函数学习

TIM_EncoderInterfaceConfig()定时器编码器接口配置

参数2:编码器模式,选择使用TI1、TI2、TI12一起使用三种模式对应此图,一般使用TI12同时计数

参数3和4就是通道1、2的上升或下降沿,效果与普通输入捕获的相同

二、编码器接口测速初始化程序

GPIO初始化阶段,需要使用PA6与PA7两个引脚,另外对于输入模式,需要根据外部输入来判断使用,外部外部模块默认输出的是高电平则使用上拉输入,默认输出低电平则使用下拉输入。如果不知道外部电路选输出高低电平或者,则使用浮空输入

时基单元部分,预分频器给0(即是不分频),ARR给65536-1(即最大值),输入模式被编码器接管失效

输入捕获单元,编码器只使用了滤波器与边沿检测极性,可以使用TIM_ICStructInit()来初始化捕获单元的各个通道。捕获单元的边沿选择不代表只实现上升沿检测,而是代表不翻转,而下降沿表示翻转(对应上一节的一种输出波形展示出两种方向)。另外,调用TIM_ICInit之后,就已经将函数写入硬件中了,所以无需再次定义结构体,可以直接初始化通道2的模式

	TIM_ICInitTypeDef TIM_ICInitStruct;
	TIM_ICStructInit(&TIM_ICInitStruct);

	TIM_ICInitStruct.TIM_Channel = TIM_Channel_1;
	TIM_ICInitStruct.TIM_ICFilter = 0xF;
	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising;
	TIM_ICInit(TIM3,&TIM_ICInitStruct);

	TIM_ICInitStruct.TIM_Channel = TIM_Channel_2;
	TIM_ICInitStruct.TIM_ICFilter = 0xF;
	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising;
	TIM_ICInit(TIM3,&TIM_ICInitStruct);

使用新函数,EncoderInterfaceConfig的上升沿会覆盖ICInit的上升沿

TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,
                           TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);

最后使用TIM_Cmd结束初始化

三、其他辅助函数的编写

实现输出时呈现正负号的值

int16_t Encoder_GetCounter(void)
{
    return TIM_GetCounter(TIM3);
}

但是为了实现测速的效果,可以结合主程序来实现

int16_t Encoder_GetCounter(void)
{
	int Counter;
	Counter = TIM_GetCounter(TIM3);
	TIM_SetCounter(TIM3,0);
	return Counter;
}
	while (1)
	{
		OLED_ShowSignedNum(2,1,Encoder_GetCounter(),5);
		Delay_ms(1000);
	}

效果是一秒内旋转的角度就是输出的编码器速度。设置1s的时间是为了配合手摇的低速,如果选用的是电机等设备,可以将间隔时间调低

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用,在《STM32入门教程-2022持续更新》的第20集视频中提到了编码器接口测速,该视频集共有30集,可以在Bilibili网站观看。而根据引用,本资源包含了电机驱动代码、光电测速、寻迹等源码,其中也提到了编码器接口。根据引用,编码器接口可以接收增量编码器的信号,并通过自动控制CNT自增或自减来指示编码器的位置、旋转方向和旋转速度。 至于stm32f103c8t6的PA0接口是否可以用来编码器测速,根据提供的引用内容,没有明确提到PA0接口是否适用于编码器测速。因此,无法准确回答该问题。建议参考相关的STM32资料或咨询专业人士以获得更准确的答案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [STM32F103C8T6编码器电机的使用](https://blog.csdn.net/HX091624/article/details/127379465)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [STM32f103c8t6 智能车部分功能(测速(光电)寻迹)+电机+oled+寻迹+个人见解(word见解+压缩包 源码)](https://download.csdn.net/download/qq_65741769/86322451)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值