查看:
3729
|
回复:
6
|
利用51单片机输出pwm
|
|||
小小宅138
13
主题
42
回复 |
发表于2018-10-22 20:17:23
|
只看该作者
1#
电梯直达
单片机是可以输出PWM的,比较的麻烦。此时需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。 用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。大致的的编程思路是这样的:T0定时器中断让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比。 下面重点介绍用一个定时器的实现PWM的方法。以周期为1ms(1kHZ)为例,要产生其它频率的PWM波,程序中只需作简单修改即可。用一个定时器时(如定时器T0),首先要确定PWM的周期T和占空比D,确定了这些以后,就可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多少个时间基准n。 因为这里我们是产生周期为1ms(1kHZ)的PWM,所以可设置中断的时间基准为0.01ms,,然后中断100次即为1ms。在中断子程序内,可设置一个变量如time,在中断子程序内,有三条重要的语句: 1、当time>=100时,time清零(此语句保证频率为1kHZ); 2、当time>n时(n应该在0-100之间变化开),让单片相应的I/O口输出低电平; 3、当time<=n时,让单片相应的I/O口输出高电平,此时占空比就为%n。 下面程序产生30%占空比的pwm:
最后的到波形,在示波器上显示如下图所示:
如果想修改占空比,直接在程序里面修改下面这句即可。 if(time<=30)//占空比%30,可改占空比 单片机小白
|
|||
叮当
3
主题
72
回复 |
发表于2018-10-22 22:53:05
|
只看该作者
2#
那么多便宜又大碗的增强型8051不用,哪个不带硬件PWM? 现在两三毛钱的单片机很多也带PWM啊。 |
|||
小小宅138
13
主题
42
回复 |
发表于2018-10-24 00:55:13
|
只看该作者
3#
有可以输出pwm的51吗?
单片机小白
|
|||
GZFeng
2
主题
5
回复 |
发表于2018-10-24 08:13:46
|
只看该作者
4#
好像除了古董级AT89CXX系列的51,其它51都带PWM吧?
|
|||
WCHCN
37
主题
241
回复 |
发表于2018-10-24 13:46:41
|
只看该作者
6#
①低功耗、高性价比蓝牙M0单片机CH577 ②超高性价比USB单片机CH552 ③免编程,串口扩展以太网芯片CH9120 ④免编程,串口转蓝牙芯片CH9141
|
|||
小小宅138
13
主题
42
回复 |
发表于2018-10-24 14:50:45
|
只看该作者
7#
长见识了
单片机小白
|
|