stm32滤波器测速
在STM32中实现滤波器测速(如编码器测速)通常涉及硬件定时器的输入捕获功能结合数字滤波器,以消除噪声并准确测量脉冲信号。以下是实现步骤和示例代码:
1. 测速原理
- M法测速:在固定时间内计数脉冲数量,适合高速测量。
- T法测速:测量两个脉冲之间的时间间隔,适合低速测量。
- 硬件滤波器:通过定时器的输入滤波器消除信号抖动。
2. 硬件配置(以TIM为例)
配置步骤:
- 选择定时器:如TIM2、TIM3等支持输入捕获的定时器。
- 配置输入通道:设置为输入捕获模式(如编码器脉冲输入)。
- 配置滤波器:通过TIMx_CCMRx寄存器中的
IC1F或IC2F位设置数字滤波器。 - 设置分频和极性:捕获边沿(上升沿/下降沿)。
滤波器参数:
- 滤波器的采样频率由定时器时钟分频决定。
- 连续采样次数(如4次)需根据噪声特性选择。
3. 代码示例(HAL库)
#include "stm32f1xx_hal.h"
TIM_HandleTypeDef htim2;
volatile uint32_t capture_value1 = 0, capture_value2 = 0;
volatile uint32_t period = 0;
float speed = 0.0;
// 定时器初始化
void MX_TIM2_Init(void) {
TIM_IC_InitTypeDef sConfigIC;
htim2.Instance = TIM2;
htim2.Init.Prescaler = 71; // 72MHz/(71+1)=1MHz,1个计数=1us
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 0xFFFFFFFF; // 最大计数周期
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
// 配置输入捕获通道1
sConfigIC.ICPolarity = TIM_ICPOLARITY_RISING;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 0x0F; // 设置滤波器:连续8次采样高电平
HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); // 启动输入捕获中断
}
// 输入捕获中断处理
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {
if (htim->Instance == TIM2) {
capture_value2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
period = capture_value2 - capture_value1;
capture_value1 = capture_value2;
// 计算速度(假设每个脉冲对应0.1转)
if (period != 0) {
speed = 1000000.0 / period * 0.1; // 单位:转/秒
}
}
}
// 主函数中启动定时器
int main(void) {
HAL_Init();
MX_TIM2_Init();
HAL_TIM_Base_Start(&htim2);
while (1) {
// 速度值已通过中断更新
}
}
4. 关键参数说明
- 滤波器设置(ICFilter):值
0x0F表示连续8次采样确认有效边沿,有效滤除短时噪声。 - 定时器分频:调整
Prescaler以改变时间分辨率(如1us或更长)。 - 速度计算:根据脉冲周期和每转脉冲数计算实际转速。
5. 软件滤波增强
若硬件滤波不足,可结合软件滤波:
#define FILTER_LEN 5
float speed_buffer[FILTER_LEN] = {0};
float filtered_speed = 0.0;
// 移动平均滤波
void MovingAverageFilter(float new_speed) {
static uint8_t idx = 0;
speed_buffer[idx] = new_speed;
idx = (idx + 1) % FILTER_LEN;
float sum = 0;
for (int i = 0; i < FILTER_LEN; i++) {
sum += speed_buffer[i];
}
filtered_speed = sum / FILTER_LEN;
}
6. 注意事项
- 信号频率范围:确保定时器频率足够高以避免溢出。
- 抗干扰设计:在硬件上增加RC滤波电路。
- 中断优先级:确保输入捕获中断及时响应。
通过以上方法,可实现高精度的STM32滤波器测速。
emi滤波器是什么滤波器
EMI滤波器(Electromagnetic Interference Filter)是一种用于抑制电磁干扰(EMI)的滤波器。电磁干扰是指在电子设备中由于电磁波的传播而产生的干扰信号,这些干扰信号
2024-08-25 15:59:50
高通滤波器和低通滤波器判别方法
高通滤波器和低通滤波器是信号处理领域中非常重要的两种滤波器。它们在各种应用中都有广泛的应用,如音频处理、图像处理、通信系统等。 一、
2024-07-15 11:15:56
基于DSP数字控制的并联有源滤波器
简要分析了并联电力有源滤波器的结构及工作原理。针对三相三线制供电系统设计了一采用DSP数字控制的并联有源滤波器。对该有源滤波器的硬件结枃、软件流
资料下载
佚名
2021-05-06 14:07:57
低通滤波器的设计与实现
低通滤波器的设计是已知ow(dB3-截止频率 )、LPH0(直流增益 )、Q(在dB3-截止频率时的电压放大倍数与通带放大倍数数值之比)三个参数来设计电路,可选的电路形式为压控电压源低通滤波器和无限增益多路反馈低通
资料下载
一把破剑
2021-04-22 09:23:11
如何了解滤波器的本置
依稀记得前师傅讲过,控制对象相对于控制器来说就是个滤波器;半夜睡不着则在考虑PID控制是不是把反馈的不同频率特性的信号通过其滤波特性,再决定其输
资料下载
远不及你
2020-10-14 10:43:00
滤波器的构成 滤波器的特点
滤波器网络:滤波器网络是滤波器的核心部分,它由各种不同的电路元件(如电容、电感、电阻等)组成,用于选择性地通过或者抑制特定频率的信号。根据不
2023-02-24 11:16:14
STM32使用FIR滤波器的实现过程
整个实现过程:STM32将AD采集的数据,通过USB传到PC;PC利用多功能虚拟信号分析仪的串口捕获功能,将AD采集的数据绘制波形;然后用QFilter设计滤波器,并借助多功能虚拟信号分析仪查看
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览