首页 > 其他分享 >定时器之编码器接口

定时器之编码器接口

时间:2023-08-22 22:11:07浏览次数:48  
标签:TimeBaseInitStructure TIM3 编码器 定时器 接口 TIM GPIO ICInitStructure

实现对正交(相位相差90°)编码器自动计次

 这个编码器接口。其实就相当于是一个带有方向控制的外部时钟

它同时控制着CNT的计数时钟和计数方向

每隔一段事件计数并清零,就可以得到其速度

正交信号精度高,可以抗噪声(一个引脚不变,另外引脚毛刺的话,计数的值会+1-1循环,而保持不变)

 

 uint16_t:减到0继续就是65535  改为int16_t就是-1

TODU: 按键按一下,显示当前速度

 

 

外部模块空闲默认输出高电平,就选择上拉输入(保持一致);外部信号很小,就用浮空输入

 

void Encoder_Init(void)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	//不需要内部时钟
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period = 65536 - 1;		//ARR
	TIM_TimeBaseInitStructure.TIM_Prescaler = 1 - 1;		//PSC
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);
	
	TIM_ICInitTypeDef TIM_ICInitStructure; 
	TIM_ICStructInit(&TIM_ICInitStructure);//结构体初始化
	TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
	TIM_ICInitStructure.TIM_ICFilter = 0xF;
	TIM_ICInit(TIM3, &TIM_ICInitStructure);
	TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
	TIM_ICInitStructure.TIM_ICFilter = 0xF;
	TIM_ICInit(TIM3, &TIM_ICInitStructure);
	//配置编码器接口
	TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
	//TIM_ICPolarity_Rising 这里的上升沿代表高低电平不反转(在边沿检测器那里)

	TIM_Cmd(TIM3, ENABLE);
}

int16_t Encoder_Get(void)
{
	int16_t Temp;
	Temp = TIM_GetCounter(TIM3);
	TIM_SetCounter(TIM3, 0);
	return Temp/4;
}

定时中断为一秒是因为在Timer—init那里配置了预分频和计数值

在system里有个timer是定时器2的初始化,所以这里直接用了定时器2的中断

标签:TimeBaseInitStructure,TIM3,编码器,定时器,接口,TIM,GPIO,ICInitStructure
From: https://www.cnblogs.com/liujinmeng/p/17649731.html

相关文章

  • 定时器之输入捕获
    同一个定时器,输入捕获和输出比较只能使用一个 检测到电平跳变,执行后面的动作。当前CNT的值,锁存到CCR寄存器中   高频使用测频法,低频使用测周法,分界值呢?使用中界频率区分 测频法实现逻辑:每来一个上升沿记一次X+=1,  使用定时器定时1S,到时间统计这个X值,就是频率,同......
  • 定时器
      基本定时器,只能使用内部时钟 时基单元包括:PSC预分频器、CNT计数器、自动重装寄存器 当PSC=0时不分频,还是72MHz;当PSC=1时就是2分频,等于72/2=36MHz   16位 CNT计数器对分频后的脉冲计数,通过上升沿+1   16位,//当值增加到65535后再增加就清零,触发中断,运......
  • java应用接口自动化覆盖率统计实践
    一、背景Java应用接口自动化覆盖率统计的意义在于:确保测试覆盖率:通过自动化覆盖率统计,可以确保测试用例对应用程序的各个接口进行了全面的覆盖。这有助于发现潜在的代码错误、逻辑漏洞或者未处理的异常情况。提高代码质量:通过自动化覆盖率统计,可以发现代码中未被测试到的部......
  • java-sdk接口测试覆盖率统计实践
    一、背景接口覆盖率统计在JavaSDK开发中具有重要的意义。它衡量了代码中接口被测试用例覆盖的程度,即测试用例对接口的执行情况进行了多少次验证。接口覆盖率统计的意义包括:质量保证:接口覆盖率统计可以帮助开发团队评估测试的全面性和质量,确保代码的正确性和稳定性。高覆盖率......
  • Jmeter接口上传图片/文件
    参考:https://blog.csdn.net/weixin_46039178/article/details/1101793351)配置接口基本信息 2)添加信息头管理器content-type:multipart/form-data3)上传文件,填写需要上传文件的地址填写文件地址,参数名称,MIME类型:multipart/form-data 4)填写该接口的其他参数 5)选择客......
  • web浏览器访问系统接口弹出下载框下载文件
    1.下载文件@ApiOperation("下载文件")@GetMapping("/download/{id}/byBi")publicvoiddownFile(@ApiParam(required=true,value="id")@PathVariable(value="id")Stringid,HttpServletRequestrequest,......
  • EasyCVR视频融合平台Linux环境下CGO调用C接口推流异常,H.265转H.264失败的原因是?
    EasyCVR视频融合云平台采用云边端一体化架构,可以将分散在仓储各处的前端监控设备(如IPC、NVR等)集中接入,并提供实时视频监控、视频录像、云存储、录像检索与回放、智能告警、云台控制、平台级联、服务器集群等视频能力服务。通过实时高清视频监控,仓储管理人员可以高效地监管人员和货......
  • GoLang:接口
    学习自:Go教程119页1、说明接口是为了定义某些标准,接口本身不需要实现这些标准。2、定义接口中不能有任何数据字段,只能有函数声明type接口名称interface{函数声明} 接口中嵌入另一个接口但是嵌入的接口中方法不能重名,把自己嵌入自己3、例子1)常规用法定义一......
  • 类与接口
    抽象类和接口的对比:抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。相同点:•接口和抽象类都不能实例化•都位于继承的顶端,用于被其他实现或继承•都包含抽象方法,其子类都......
  • Apipost中自定义接口字段如何配置
    Apipost项目设置中可以配置接口文档中的自定义接口字段,创建状态码字典。分享分档时会展示到文档页面状态码字典在状态码字典中可以自定义状态码即其含义自定义的状态码会在分享的API文档中展示接口属性接口属性中可以自定义接口和接口文档展示字段,在接口属性中添加一个时间类型字段......