「话说定时器系列」之九:定时器单通道测量脉宽和占空比
STM32定时器 是 ST MCU 内部最基础且常用的外设,实际应用尤为普遍。去年,电堂推出了《STM32 TIMER基础及常规应用介绍》 ,为大家梳理了 STM32 TIMER 的庞大内容,涵盖 TIMER 的基本应用原理、常规应用等。现在将课程内容整理为文章,针对STM32定时器有基本了解的用户,分享具体的应用实现环节及常见问题解决。
本文为【STM32定时器】系列第九篇分享文章,重点介绍通过定时器单个通道测量信号脉宽及占空比。
实验内容
一般来讲,通过STM32单片机对外来脉冲信号测量其脉冲宽度及占空比的方法较多,即使使用STM32定时器的捕获功能,我们可以使用一个通道、也可以使用两个通道;可以使用定时器基本的输入捕获功能实现、也可以利用PWM输入模式结合定时器的从模式 来完成。这里使用支持输入捕获功能的定时器的单个通道 ,来实现对1路外来信号脉冲宽度及占空比的测量,并在测量过程中统计和计算用于测量的定时器自身的溢出事件 。
这里用到的开发板:STM32F411 Nucleo 板 【实验对开发板并无特别要求】,集成开发环境不限。这里用的是ARM MDK IDE。
实验目的
1、熟悉定时器时基单元的基本寄存器及相关数据的拟定。
2、了解通过STM32定时器实现PWM波形输出的配置与使用。
【因为这里要使用一个定时器的pwm输出产生一个待测量脉冲信号】
3、熟悉定时器输入捕捉的基本应用与实现,并熟悉相关事件或中断。
4、为后面的PWM输入模式测量脉宽及占空比实例做铺垫。
实验思路及步骤
3.1 测量的思路
这里使用32F411Nucleo板的板载芯片内的TIM3的通道1 产生一个周期为5s ,占空比为40% 的PWM输出信号,然后用连线将该信号连接到TIM4的定时器输入通道2 ,通过它 对来自于TIM3的PWM输出信号进行脉宽及占空比的测量。
测量过程中,TIM4的通道2对外来信号的捕捉过程是这样的,TIM4的通道2对一个外来信号完整的测试过程实现 3次捕捉。
在初始状态【没进入测量的状态】下基于上升沿发起第一次捕捉,记录下第1次的捕捉值【Capture_1st】 ,并开启TIM4定时器溢出事件的统计,同时将捕获极性切换为下沿捕捉。之后进入状态1,等待后续的下沿捕获。
当发生下沿捕获时,记录下第2次的捕捉值【Capture_2nd】 ,并将前面这段时间的定时器溢出次数也记录下来【Front_Num_OvEvent】, 再次将极性切换为上沿捕捉,进入状态2,等待第3次捕获。在状态2的情况下,当发生上沿捕获时,记录下第3次的捕捉值【Capture_3rd】 ,并将整个测试周期内发生的定时器溢出次数记录下来【Total_NuOvEvent】 ,然后进入状态3进行占空比【Signal_Duty】和脉宽【Signal_Cycle】的计算。完毕后回到初始状态,准备下次的测量。另外,在TIM4的更新中断里对非初始状态的溢出事件累加统计,放在变量【Num_OvEvent】 里。实验代码里用到一个变量Measure_State 来记录和表示当前测试状态。
3.2 测量用到的算式
根据上面的介绍,那1次完整的测量下来,测得的周期和占空比可以用下面算式求得:
Signal_Duty=(Capture_2nd+(Front_Num_OvEvent*(TIM4_PERIOD+1))-Capture_1st)/ (Capture_3rd+(Total_Num_OvEvent*(TIM4_PERIOD+1))-Capture_1st)
Signal_Freq=Clk_Internal/ ((Capture_3rd+(Total_Num_OvEvent*(TIM4_PERIOD+1))-Capture_1st)*(TIM4_PSC+1));
因为:计数器时钟= Clk_Internal /(TIM4_PSC+1)
或者说:
Signal_Freq计数器时钟/ (Capture_3rd+(Total_Num_OvEvent*(TIM4_PERIOD+1))-Capture_1st);
3.3 基本配置准备
3.3.1 实现TIM3 通道1的PWM输出,计数周期5s ,占空比40% ,用来做被测量信号。
A、选择定时器内部时钟作为时钟源,STM32F411芯片定时器内部时钟为100Mhz;
B、设置分频比,选择计数模式、设置计数脉冲个数;
对时钟源20000分频,PSC=20000-1; 选择向上计数模式up counting;
计数器基于分频后的脉冲每计数设置为25000个后,发生溢出并产生更新事件及中 断。则:ARR=25000-1
按照上面参数来设计,定时器的定时周期或者说溢出周期就是5s.
C、它需做PWM输出,这里选择PWM 模式1,占空比为40%,则CCR =(ARR+1)*0.40 =10,000
CubeMx图形化配置界面:
3.3.2 实现TIM4通道2的输入捕获,假定计数器溢出周期为20ms.
1、选择定时器内部时钟为时钟源,32F411定时器内部时钟为100Mhz;
2、设置分频比,选择计数模式、设置计数脉冲个数;
先对时钟源100分频、即PSC=100-1; 选择向上计数模式up counting; 计数器基于 分频后的脉冲每计数20000个,发生溢出并产生更新事件及中断。则:
ARR=20000-1
按照上面参数来设计,定时计数周期或者说溢出周期就是20ms.
另外,通道2配置为输入捕捉 ,初始捕捉极性位选择上升沿 。
3.4 工程代码的生成、添加和整理
通过STM32CUBEMX依据上述参数完成配置,并开启TIM4的中断使能,然后生成工程。
再在工程里添加应用户代码。
TIM4中断处理代码说明:
在TIM4通道2的比较中断里做3次捕捉值的获取以及计算,在TIM4更新中断里对溢出事件进行统计。
实验结果验证
实验中tim4的时基参数保持不变,主要调整TIM3的PWM输出波形的脉宽和占空比,来看看实验结果。尤其看看当待测脉宽远长于TIM4定时器的溢出周期时的情况。
为了便于参数的修改和测试,这里针对TIM3和TIM4的时基参数定义了几个宏:
。。。。。。
我们选取几组数据,直接联机观察运行结果。
// pulse cycle = ((TIM3_PSC+1) * (TIM3_PERIOD+1))/100,000,000 【s】
// 5s ==>500,000,000 // 9s ==>900,000,000
//500ms ==>50,000,000 //80ms ==>8,000,000
//20ms ==>2,000,000 /////Same with measuring TIM4 cycle
//1ms ==>100,000 //100us ==>10,000
//10us ==>1000 //5us ==>500
…… 4 us?
小结
上面实验的实现思路及提到的代码,仅供参考,旨在抛砖引玉。
其它地方也有相关的例程,不过往往有个前提,待测信号的周期不能长于用来测量的定时器的溢出周期。如果按照上面的代码设计,就没有这个限制了。基于现有软硬件环境,我们可以对一定宽度以上的外来脉冲准确测量其脉冲宽度及占空比,当然这个一定宽度跟我们的软硬件境有关,比方时钟频率、计数脉冲精度、代码效率等。基于刚才的实验来看,5us以上时都能准确测得结果。
应用UCC27524实现电平变换和脉宽信号互锁
电源驱动中,尤其是数字由DSP或者单片机发出的脉宽信号通常由于驱动能力和电平幅值的限制,需要进行驱动能力放大和电平变换,下面介绍一种满足这两个功能的芯片。
门极驱动芯片UCC27524的应用—PWM互锁和电平变换
1、UCC27524管脚排布及引脚功能说明
引脚功能说明
2、UCC27524的功能框图如下
功能框图
功能块说明
(1)输入信号都是带施密特触发器,利用窗口或回差电压可以防止误触发,提高抗干扰能力;
(2)输入使能信号ENA和ENB都是弱上拉(弱上拉:用大阻值连接电源);输入信号INA和INB都是弱下拉(弱下拉:用大电阻接地),无论上拉还是下拉都是为了抗干扰作用,因为输入浮空时,信号状态不定(高或者低),输出逻辑容易出错;
(3)逻辑单元,是判断输出状态的电路单元,用"与门"逻辑实现;
(4)电平变换单元,假设输入信号是单片机或DSP发出,一般电平都是3.3V左右,驱动后级一般是15V,因此利用电平变换单元可以实现电平变换。
3、UCC27524的应用—PWM互锁电路
(1)引言—全桥或半桥的驱动时序
如下图是常见的H桥电路(或称为全桥电路拓扑),"T1"和"T3"上管和下管结构称为半桥结构,控制中要求上管和下管驱动信号互补;"T2"和"T4"同样也是一个半桥结构,驱动控制信号同样也是互补。整个H桥"T1"和"T4"驱动信号相同,"T2"和"T4"驱动信号相同,"T1、T4"和"T2、T3"驱动信号互补。
假如任意一个半桥结构,上管和下管的信号相同,那么则会出现桥臂直通的问题。
全桥电路拓扑
(2)针对可能出现的上下管驱动逻辑出现错误导致上管和下管(T1和T3或者T2和T4)直通,必须做上下管的互锁。
互锁,假如都为高电平开通有效,上管和下管驱动信号要进行相互制约,当上管为高电平,下管必须为低电平,反之下管为高电平,那么上管必须为低电平,形成掣肘关系,那么我们利用UCC27524如何实现电平转换和PWM信号互锁
电平转换,PWM1-IN — PWM1,只要VDD引脚供电如15V,那么当PWM1-IN和ENA输入有效时,输出电平是15V。同样PWM2-IN — PWM2,一样的道理。
电平变换
互锁功能,上面我们已经说了互锁原理,如下图是上管和下管信号的制约电路,实质是一个非门逻辑,当PWM1-IN为高时,EN-PWM2为低,那么无论PWM2-IN什么状态,对应PWM2都是无效(低电平),只有PWM1-IN为低电平时,PWM2-IN对应输出的PWM2才有效,这就实现了完全的上管和下管的制约;第二路信号道理也相同。
互锁逻辑
上面就是通过UCC27524使能端以及电平转换单元实现的互锁和电平转换功能。
上面实现电平转换和互锁,驱动信号当然不能直接去驱动上管和下管,因为上管是参考对系统来说是浮动的,所以还应该进过后级隔离变换才可以直接驱动。
隔离驱动方式:前面介绍过变压器隔离驱动,当然光耦也是可以进行隔离驱动的,如下是光耦示意图。
光耦实物图
光耦电路符号
相关问答
单片机脉宽 是什么?脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。PWM的一个优点是...
做室内停车车位检测方案时,如何选择Arduino、arm、树莓派、 单片机 ?...如果未来5G普及,可以通过5G将位置信息发送给汽车的显示屏,通过显示屏引导车主停车。从上分析来看,要实现所说的功能,控制器要采用实时操作系统,必须要在m...
单片机 pwm口怎么定义?分两点讨论:1.PWM脉冲宽度调制(PWM),是英文“PulseWidthModulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有...
单片机 有多少PWM输出的引脚 - 懂得不是哪,PWM简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。能够有PWM输出只是单片机的个别引脚,这些引脚能够配...
单片机 有多少PWM输出的引脚 - Sz 的回答 - 懂得PWM功能,不同单片机有所不同。一般指的PWM是指单片机包含硬件PWM模块,不需要软件模拟,可实现稳定、高速的PWM占空比输出,且不占用太多软件资源。部...
基于51 单片机 的数字频率计设计(proteus仿真)?刚刚下了一楼传的附件,测试后发现精度和测量范围都比较差。如果单从测频的角度来说,51的频率计是很简单的。恰好几年前我写过类似的程序,是用来测频率和占空...
单片机 中的P是什么?单片机中单独的P指的是奇偶标标志位,是程序状态字PSW中的最低位。P1口和P2口以及P3口都可以做普通的I/O使用!其中P3口具有第二功能:P3.0RXD(串行输入口)...
单片机 是用什么编程的?1.什么事单片机编程:就是硬件是单片机,基于单片机进行的程序开发,在有周围外设支持的情况下,用软件来控制的部分就是能过单片机编程来实现。单片机能识别的...
单片机 pop是什么指令?POP指令的在单片机中执行是这样的,首先将SP中的值作为地址,并将此地址中的数送到POP指令后面的那个direct中,然后SP减1。单片机(Microcontrollers)是一种集...
mq2 单片机 程序怎么写?MQ2是烟雾浓度传感器,将其模拟输出AO接入到一个AD转换器(比如ADC0832)上,再读取转换结果就可以了。程序的编写就是读取ADC的值。单片机(Single-ChipMicroco...