P18 输入捕获

 

4个输入捕获和输出比较通道,共用4个CCR寄存器

输入捕获和输出比较:
 

输入捕获输出比较
引脚输入端口输出端口

执行

流程

接收到输入信号,执行CNT锁存到CCR的动作CNT/CCR的大小关系来执行输出动作
电路资源分配情况高级、通用定时器基本相同、基本定时器无此功能

 STM32测频率而言,只能测量数字信号,若想测量正弦波,还需搭建一个信号预处理电路——运放搭建比较器——将正弦波转化为数字信号,输入给STM32;若测量电压非常高,还需考虑隔离问题——利用隔离放大器、电压互感器等元件——隔离高压端和低压端,保证电路的安全。

最终输入给STM32的信号是高电平3.3v,低电平0v的数字信号

频率测量理论知识

测频法实现——对射式红外传感器计次、定时器外部时钟稍加改进

一个通道灵活切换两个引脚、两个通道同时捕获一个引脚——交叉目的

每捕获一次CNT的值,都要把CNT清零一下,以便于下一次的捕获——硬件电路(主从触发)可以在捕获之后自动完成CNT的清零工作。

Q——如何自动清零CNT???

A——从模式完成自动化操作的利器

主从触发模式(老师起名)

  • 主模式——将定时器内部信号映射至TRGO引脚
  • 从模式——接收其他外设或自身外设的一些信号,用于控制自身定时器的运行,即也就是被别的信号控制
  • 触发源选择(从模式的一部分)——选择从模式的触发信号源

2022.10.24

  • 预分频器在更新事件重装
  • 更新事件生效 ——有缓存器延迟参数的写入事件,等到更新事件结束,再统一改变参数,保证每个周期的完整性
  • 预分频器立即重装
  • 立即生效——在值改变时,产生切断波形的现象,会出现不完整周期
  • instinct——影子寄存器预装载的问题——写入的值是立即生效,还是在更新事件生效 

2022.10.27

编写IC.c 文件

  • 1.RCC开启时钟,打开GPIO、TIM时钟
  • 2.GPIO初始化,把GPIO配置成输入模式,一般选择上拉输入或浮空输入模式
  • 3.配置时基单元,让CNT在内部时钟的驱动下自增运行
  • 4.配置输入捕获单元——滤波器、极性、直连通道还是交叉通道、分频器这些参数——使用结构体统一配置
  • 5.选择从模式的触发源——触发源选择为TI1FP1,这里调用一个库函数,给一个参数即可
  • 6.选择触发之后执行的操作——执行RESET操作——这里也是调用一个库函数即可
  • 7.以上电路配置好后,调用TIM_Cmd函数,开启定时器

本次代码计划使用TIM3的通道1引脚——PA6(详见引脚定义表)

 

 

 

 

	//-------初始化输入捕获比较单元------------
	TIM_ICInitTypeDef TIM_ICInitStructure;
	TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
	TIM_ICInitStructure.TIM_ICFilter = 0XF;
	TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising ;
	TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1 ;
	TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
	TIM_ICInit(TIM3, &TIM_ICInitStructure);
	
	TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
	TIM_ICInitStructure.TIM_ICFilter = 0XF;
	TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling ;
	TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1 ;
	TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_IndirectTI ;
	TIM_ICInit(TIM3, &TIM_ICInitStructure);
	

ST公司怕我们麻烦:

  •  //在函数里,会自动把剩下的一个通道初始化成相反的配置
  • 例如:通道1 直连 上升沿——on the contrary——通道2 交叉 下降沿
  • 局限性——只支持通道1、通道2的配置,不要传入通道3/4
  • 上小节分析——高电平计数值存入CCR2里,整个周期的计数值存在CCR1中
  • 则占空比 Duty = CCR2 / CCR1
	TIM_BaseInitStructure.TIM_Period = 65536 - 1;//周期——ARR自动重装器的值
	TIM_BaseInitStructure.TIM_Prescaler = 72 - 1;//PSC预分频器的值

测量频率的上下限问题: 

  • 测量频率的下限:目前我们给定的标准频率是1MHz,计数器最大记到65535,所以可得所测量的最低频率 = 1M / 65535 = 15Hz,如果信号频率再低,计数器就要溢出了,若想再降低一点最低频率的限制——solution——把预分频PSC再加大一点——致使标准频率就更低,所支持测量的最低频率也就更低。(也是测量频率的下限)
  • 测量频率的上限——测量的最大频率——随着待测频率的增大,误差也会逐渐增大,若非要找一个频率上限——标准频率1MHz,超过1MHz,信号频率 > 标准频率,肯定测不了。(无意义——因为信号频率接近1MHz时,误差已经非常大了)
  • 最大频率要看你对误差的要求,正负1误差——1 / 计数值
  • 例如计100个数,误差一个,相对误差即就是百分之一。计1000个数,误差一个,相对误差即就是千分之一。
  • 若要求误差为千分之一,频率上限为——1M /1000 = 1KHz
  • 若要求误差为百分之一,频率上限为——1M /100 = 10KHz

若想提高频率上限——solution——把预分频器值PSC给降低一点,提高标准频率,即上限就会提高。若还要提高频率,则考虑测频法,测频法适合高频,测周法适用于低频。

误差分析——除前面提到的正负1误差外,还有晶振误差(例如STM32的晶振不是那么准,在计数几万次之后,误差积累起来也会造成一些影响。)

数值抖动——滤波处理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值