ETR获取转速及PID调节原则

ETR获取转速及PID调节原则本文介绍了如何在资源有限的 STM32 环境下 利用单脉冲 ETR 功能获取转速 以替代可能丢数的外部中断方案

一、前言

        由于单片机硬件资源稀缺,有些时候无法使用正交编码的方式获取速度,可使用单脉冲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);//重映射TIM2的CH1、CH2到PA15和PB3
// GPIO config
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = ENCODER_RIGHT_A_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_

今天的文章 ETR获取转速及PID调节原则分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-17 11:30
下一篇 2024-12-17 11:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/88953.html