历史上的今天
今天是:2024年11月12日(星期二)
2019年11月12日 | 一个定时器生成多路PWM波形的原理和方法
2019-11-12 来源:51hei
在很多工程应用中,需要使用到PWM波(脉宽调制),例如电机调速、温度控制调整功率等。本文讲述怎么利用单片机的一个定时器生成多路PWM波形。
一般的,PWM的周期t1是一个固定值,如1ms,10ms,100ms等,在一个周期中包含了高电平t2和低电平t3,它们的关系是t2+t3=t1。改变一个周期中高电平的时间,就能达到速度或者功率调整的目的。PWM适用于高速开关器件的控制,不适合于继电器等低速开关元件的控制,因为继电器等低速元件达不到如此快的开关速度。
PWM控制的关键是控制改变PWM的高电平时间t2,这个时间在其他子程序中由控制算法中进行修改,如PID控制算法。
图 1
在微处理器,如单片机中,实现一个定时器生成多路PWM的方法如下。
首先来看看用一个定时器实现一路PWM输出的方法:
>>定义一个时间基准刻度t,这个也是计时器中断周期,一般在程序中t不改变。PWM的周期、高低电平时间由若干个基准时间t组成;
>>定义一个全局计时变量n,n表示这段时间经过了多少个基准时间t;
>>定义一个全局计时变量n1,n1表示一个PWM的周期包含多少个基准时间t,n1=t1/t。一般在程序中n1,t1不改变。
>>定义一个全局计时变量n2,n2表示一个PWM周期中高电平包含多少个基准时间t,n2=t2/t。由于高电平的时间受其他算法控制改变的,n2也是随时在改变。
程序的流程如下:
①初始化定时器,定时器中断时间设置为t,如设置t为1ms或其他;
②初始化变量:n=0;//计时变量n清零
n1=t1/t;//一个PWM的周期t1包含了多少个基准时间t.
//假如设PWM周期为100ms,则n1=100;
n2=t2/t;//计算一个PWM中高电平时间t2由多少个基准时间//t组成。t2由其他控制算法改变。
③开始计时,打开定时器中断。定时器中断程序中n++;
当n
程序流程图如下:
图2
如果在同一个定时器中需要多路PWM,再定义多组类似的变量,按照图2 中流程处理即可。
史海拾趣
|
FPGA可综合性对初学着的一些建议一、HDL不是硬件设计语言 过去笔者曾碰到过不少VHDL或Verilog HDL的初学者问一些相似的问题,诸如如何实现除法、开根号,如何写循环语句等等。在这个论坛上,也时常能看到一些网友提出这一类的问题。 对于这些问 ...… 查看全部问答> |
|
安静的生活不需再起什么波澜,即将进入四十岁不再进入研发黄金时间段,想把自己做过的想过的都留下来,没有什么名利场的事情了,说出来格外轻松。面对目前大部分国内杂志近乎清一色的嵌入系统,单片机和软件的文章,硬件电路尤其是模拟电路设计似乎 ...… 查看全部问答> |
|
“外包在线”网络技术有限公司CEO喻烜为大家讲述了她鲜为人知的创业经历,从初识“外包”到立志创业,从寻求投资到初有成就,借由这朵铿锵玫瑰坚韧不拔的毅力和非凡的智慧,国内首家外包服务网络平台终于问世,自此“外包”服务更加平民化,从 ...… 查看全部问答> |
|
地址总线A15—A0(低),存储器地址空间为3000H-67FFH,按字节编址。其中3000H-4FFH为ROM区,选用EPROM芯片(4K*2b/片);5000H-67FFH为RAM区,选用DRAM芯片(2K*4位/片) 解释3000H是如何推出(A15A14为00),而 4FFFH又是如何推出(A15A14为01) ...… 查看全部问答> |
|
国内站点: 华恒公司的主页,里面有很多的相关资料,有待大家去发现 http://www.hhcn.com/chinese/embedlinux-res.html SkyEye嵌入式硬件仿真项目 www.skyeye.org http://gro.clinux.org/projects/skyeye/ 公社的SkyEye项目专栏 http://www.linuxfa ...… 查看全部问答> |
|
最近在折腾LINUX 的GPIO中断。用驱程实现了的情形是:1 在驱程里,借用copy_to_user函数,在中断发生时,让一个数值发生变化写回用户态,使得应用程序可以读出这个变化。问题是:这样看起来,好像跟查询没什么区别。以前玩51的时候,情况不是这样的 ...… 查看全部问答> |




