全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
理解STM32定时器中的输入捕获滤波器关于STM32定时器中的输入捕获滤波器的功能描述,在中文参考手册中描述如下:我不理解官方的说明,在网上搜了老半天,基本都是下面这几句话:1)当滤波器连续采样到N次个有效电平时,认为一次有效的输入电平。2)该数字滤波器实际上是个事件计数器,它记录到N个事件后会产生一个输出的跳变。例如:当f(CK_INT) = 72MHz, CKD1:0 = 01时,选择f(DTS) = f(CK_INT)/2 = 36MHz;而ETF3:0 = 0100,则采样频率f(SAMPLING) = f(DTS) / 2 = 18MHz, N = 6,此时高于3MHz的信号将被这个滤波器滤除,这样就有效地屏蔽了高于3MHz的干扰。看了这些说法,我还是不理解这个数字滤波器到底是如何工作的,问题如下:问题1:当滤波器连续采样到N次个有效电平时,是输出这个电平?还是输出一个跳变?问题2:当滤波器没有连续采样到N次个有效电平时,输出是的什么?带着这两个问题,我们来分析一下,下面以TIM3为例:首先可以肯定输入捕获过程如下:详细信息见参考手册中的14.2节,通用定时器框图TIM3_CH1(PA.6) - TI1(外部信号) -输入滤波器IC1F3:0 -IC1(滤波器输出信号) - 输入捕获预分频器IC1PSC1:0 - 捕获/比较1寄存器CCR1从上面的过程可以知道,1)发生输入捕获所需要的跳变沿是由滤波器输出产生的。2)滤波器和预分频器可软件编程,如果IC1F3:0 = 0x0,则滤波器全通,即TI1 和 IC1是同一个信号。借助这两点分析,我假设的滤波器的工作原理是:问题1猜测答案:当滤波器连续采样到N次个有效电平时,就输出这个有效电平。问题2猜测答案:当滤波器没有连续采样到N次个有效电平时,再从0开始计数,输出一直保持上一次输出的有效电平。例如:滤波器上一次输出是高电平,本次连 续采样到N-1个高低平,但第N是个低电平,那么滤波器仍然保持上次输出的高电平,并重新开始计数,记录1次低电平,如果在其后采样的N-1个也是低电 平,此时滤波才输出低电平,于是一个下降沿才出现在IC1上。举例:如果我们产生一个f = 1MHz的占空比为50%的方波信号,滤波器的采样频率f(SAMPLING) = 18MHz,那么如果滤波器要想监测的1MHz信号,并且滤除高频干扰,则理论上 N = 2 * f,这让我想起了信号与系统中的“奈圭斯特采样频率”。如下图所示:从上图中我们可以看到,对于1MHz的信号,当采样频率为18MHz时,N最大为9。当N大于9时,是不可能连续采样到大于10个的有效电平的。下面我们验证这个猜测:按照这个猜想,我们先求一下这个数字低通滤波器的最小通带截止频率。令 CKD1:0 = 01b, 即f(DTS) = f(CK_INT) / 4 = 18MHz; IC1F3:0 = 1111b, 即f(SAMPLING) = f(DTS) / 32 = 562.5KHz, N = 8;由公式 f(SAMPLING) / N= 2 * f 可得: f APB2ENR|= RCC_APB2Periph_GPIOA; /* 复位USART1,再结束复位 */ RCC-APB2RSTR |= RCC_APB2Periph_USART1; RCC-APB2RSTR &= RCC_APB2Periph_USART1; RCC-APB2ENR|= RCC_APB2Periph_USART1; /* TIM3 */ RCC-APB1ENR|= RCC_APB1Periph_TIM3; RCC-APB1RSTR |= RCC_APB1Periph_TIM3; RCC-APB1RSTR &= RCC_APB1Periph_TIM3; void GPIO_Configure(void) GPIO_InitTypeDef GPIO_InitStructure; /* 设置USART1复用端口- */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; /* TXD */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; /* RXD */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);void NVIC_Configure(void) NVIC_InitTypeDef NVIC_InitStruct; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* TIM3_CC_IRQHandler*/ NVIC_InitStruct.NVIC_IRQChannel =TIM3_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct);#define ARR /1800, 2000, 2048, 2057 void Tim_Configure( void ) TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_ICInitTypeDef TIM_ICInitStucture; /*TIM3 Configration */ /* Time Base configuration f =*/ TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_Period = ARR - 1; /ARR = 1800, 2000, 2048, 2057 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV4; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /* Channel 1 Configuration in PWM mode */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = ARR / 2; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_ICInitStucture.TIM_Channel = TIM_Channel_2; TIM_ICInitStucture.TIM_ICFilter = 0x0F; TIM_ICInitStucture.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM_ICInitStucture.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM_ICInitStucture.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInit(TIM3, &TIM_ICInitStucture); TIM3-CR1|= TIM_CR1_CEN; TIM3-DIER |= TIM_IT_CC2; void TIM3_IRQHandler ( void ) if (TIM3-DIER & TIM_IT_CC2) TIM3-SR = (uint16_t)TIM_IT_CC2; printf(%drn, TIM3-CCR2); void main (void) /初始化RCC /初始化NVIC /初始化GPIO /初始化USART /初始化TIM while(1)=在串口输出的数据中,我们捕获的数值不等于 ARR / 2, 这是因为输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福建省莆田市九中2026届物理高二上期末统考模拟试题含解析
- 广州天河区一一三中2025年高二数学第一学期期末学业水平测试试题含解析
- 2026届河南省鹤壁市淇县第一中学高二上物理期末复习检测模拟试题含解析
- 中国海洋大学《圣经与文学英》2024-2025学年第一学期期末试卷
- 2025年上海市上外附属大境中学生物高一上期末学业水平测试试题含解析
- 贵州省遵义市凤冈二中2025年高二上生物期末教学质量检测试题含解析
- 集美大学《汽车保险与理赔》2024-2025学年第一学期期末试卷
- 2026届远程授课山西省大同市第一中学高二上数学期末检测模拟试题含解析
- 黑龙江工程学院《园林设计(一)》2024-2025学年第一学期期末试卷
- 2026届安徽省阜阳市颍上县第二中学高一生物第一学期期末监测模拟试题含解析
- GB/T 22126-2025物流中心作业通用规范
- 影视多媒体技术
- 计算机网络安全实训课程标准
- 2025年卫健委考试题库及答案
- 美食城管理办法
- 2025年黑龙江乐理试题及答案
- 食堂人员编制及岗位职责
- DB37∕T 4683-2023 非煤矿山企业安全管理信息化建设基本规范
- 体育教练培训课件
- JJF 2225-2025 高绝缘电阻测量仪(高阻计)校准规范
- 高血压疾病讲课件
评论
0/150
提交评论