ETR获取转速及PID调节原则

一、前言

        由于单片机硬件资源稀缺,有些时候无法使用正交编码的方式获取速度,可使用单脉冲ETR功能获取转速,通过软件设定的转速判定方向。其他方案缺点:比如使用外部中断方式,来一个信号触发一次中断,在中断程序里实现计数累加,但由于被统计的信号频率较高,而中断本身也是需要时间的,往往导致有些脉冲没被统计而发生丢数的问题。况且,CPU这样频繁地去响应中断还会衍生出其它系统性问题。

         对于这种情况,我们可以将被统计信号连接到定时器的ETR脚,并作为定时器的计数时钟,择时读取计数器的值和溢出次数即可。这样既避免了CPU频繁进中断而无法应对别的事情的困境,也避免了因CPU优先忙于别的事情而来不及响应外部中断导致计数出错的麻烦。对于STM32(GD32)来讲,从ETR脚引入时钟信号,可以有两种模式。

第一种模式,即外部时钟1模式,此时来自ETR脚的信号经过滤波、边沿检测和极性选择后,以触发信号的角色连接到从模式控制器,并作为定时器的时钟源,即下图中的1路。
第二种模式,即外部时钟2模式,来自ETR脚的时钟信号经过极性选择、分频、滤波后不经过从模式控制器,而是像内部时钟源一样直接为计数器提供计数时钟,即下图中的2路。

二、编码器配置

1、GPIO配置

static void GPIOConfiguration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // 关闭JTAG功能

//  GPIO config
GPIO_InitStructure.GPIO_Pin = ENCODER_LEFT_A_PIN;// | ENCODER_LEFT_B_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE);/

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值