STM32F429--STM32的PWM占空比产生与测量

一、PWM波形的产生;

使用定时器2 (TIM2)PA5端口输出。

通过配置

TIM_TimeBaseStructure.TIM_Period= 1000 - 1;

TIM_TimeBaseStructure.TIM_Prescaler= 9000 - 1;

TIM_OCInitStructure.TIM_Pulse= 300 ;

三个参数,TIM_Prescaler控制计数频率,此处9000即计数频率为90M/9000 = 10Khz,即计数一次的时间为0.1ms,TIM_Period控制PWM波周期时间,此处1000即PWM波的周期为1000*0.1ms = 100ms;TIM_Pulse控制有效电平时间,此处300即有效电平时间为300*0.1ms=30ms;调用初始化程序,上点即产生PWM波信号。

二、PWM波占空比的测量:

捕获输入通过定时器5(TIM5)通道二PA1端口;

初始化函数同课堂使用的函数,此处略写。

下面详写捕获中断服务函数。

定义五个变量

TIM5CH1_CAPTURE_STA 存放输入捕获状态     

TIM5CH1_CAPTURE_VAL存放输入捕获值(TIM2/TIM5是32位)

CATCH2 存放第一次触发中断到第二次触发中断的时间;

CATCH3 存放第二次触发中断到第三次触发中断的时间;

okflag 捕获结束标志位;

捕获原理:通过获取第一次触发中断到第二次触发中断的时间,和第二次到第三次触发的时间,两次时间求和即为总时间,即周期,然后用     (前文产生PWM波使用的是高电平有效);

一个成功的捕获周期顺序如上图标识1-2-3所示:

过程1:原本初始化之后,该中断为下降沿触发,所以当检测到有下降沿时进入到该中断服务函数,此时

if(TIM5CH1_CAPTURE_STA & 0x80)

if(TIM5CH1_CAPTURE_STA&0X40)

以上两个if均不成立,所以程序直接进入最后一个else中,先进行清空操作,然后把STA标志位次高位置1,表示捕获到了第一次,捕获了一个下降沿,初始化定时器5(TIM5),然后开启定时器,将中断捕获触发信号改为上升沿触发,下一次为上升沿触发;

过程2:第二次进入该中断服务函数时

if(TIM5CH1_CAPTURE_STA&0X40)

成立,进入第二个阶段,将标志位STA最高位置1,表示捕获完第二次,将当前时间存入全局变量:CATCH2中,初始化定时器5(TIM5),然后开启定时器,将中断捕获触发信号改为下降沿触发,下一次为下降沿触发。

 

过程3:第三次进入该中断服务函数时:

if(TIM5CH1_CAPTURE_STA & 0x80)

成立,进入第三阶段,获取当前定时器时间,放入全局变量CATCH3,即第二次捕获到第三次捕获时间间隔,即高电平时间,将全局标志位okflag置1,通知main函数接下来可以打印到串口了。

main 函数中新建变量Comp存放占空比,total存放CATCH2+CATCH3即总时间,周期。用高电平时间CATCH3/total即占空比。

 

三、运行结果

测出占空比为29%,与实际值在误差允许范围内近似相等,程序正确。

 

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值