历史上的今天
今天是:2025年08月21日(星期四)
2019年08月21日 | STM32F429--STM32的PWM占空比产生与测量
2019-08-21 来源:eefocus
一、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%,与实际值在误差允许范围内近似相等,程序正确。
史海拾趣
|
基于SRAM的可重配置PLD(可编程逻辑器件)的出现,为系统设计者动态改变运行电路中PLD的逻辑功能创造了条件。PLD使用SRAM单元来保存字的配置数据决定了PLD内部互连和功能,改变这些数据,也就改变了器件的逻辑功能。由于SRAM的数据是易失的,因此这 ...… 查看全部问答> |
|
德州仪器高性能模拟器件在大学生电子设计中的应用与快速选型指南 本帖最后由 paulhyde 于 2014-9-15 04:00 编辑 德州仪器高性能模拟器件在大学生电子设计中的应用与快速选型指南 两部分需要一起下载才能解压 [ 本帖最后由 open82977352 于 2009-7-27 18:07 编辑 ] … 查看全部问答> |
|
小弟看了很多人用IAR生成可执行.bin格式的文件,为什么我用他们的方法我生成的.bin文件居然有700M,很是郁闷,不知道是怎么一回事啊。在Category理得output converter里面我选择输出格式是binary。按理说也就2M左右吧,居然这么大,大家有遇到这种问 ...… 查看全部问答> |
|
我用的是市场买的2440开发板,配夏普LQ121S1LG45液晶自己开发驱动。 夏普LQ121S1LG45的pdf资料网上找不到,我只找到了LQ121S1LG41和LQ121S1LG61的,它们参数都一样,目前我计算的是下面的一组参数,可以很清晰的显示静态开机画面了,但显示画面几 ...… 查看全部问答> |
|
在DDK中我学winio源码一样创建一个dll来动态加载键盘过滤驱动kbfiltr.sys,可是总是在StartService时出错,错误号为ERROR_SERVICE_DISABLED,可换成winio.sys就行了。我似乎看到过键盘驱动好像是不能动态加载的,可又不确定。 所以总结一下,我想 ...… 查看全部问答> |
|
这本书我本想私藏,但想想还是共享吧,让大家都看到什么叫好书,比起国内的数据结构我看强百倍,国内的我看就晕,本来很简单确讲得很难,也不知道作者明白不明白.更有甚者还传道解惑呢!唯一不足不是PDF的 [ 本帖最后由 ddllxxrr 于 2010-10-9 06:13 编辑 ...… 查看全部问答> |
|
假设额定功率100KW,三相380V * 1.414 大约按500V计算,2个IGBT组成半桥,单IGBT占空比0.4,则计算出实际电流大约为:100K/500/0.4/2=250A,一般加倍选则,所以应该选500A/1200V的IGBT模块 因为IGBT导通时会有浪涌电流,有时候会很大甚至超过管子的 ...… 查看全部问答> |




