【Proteus仿真】 51单片机利用定时器制作简易SPWM波形输出

【Proteus仿真】 51单片机利用定时器制作简易SPWM波形输出


  • Proteus仿真
    在这里插入图片描述

幅值小看的不是很明显。

PWM和SPWM简介
  • PWM 是英文Pulse Width ModulaTIon(脉冲宽度调制)缩写,按一定规律改变脉冲序列的脉冲宽度,以调节输出量和波形的一种调制方式。
  • SPWM是在PWM的基础上用正弦波来调制合成的具有正弦波规律变化的方波。SPWM原理正弦PWM的信号波为正弦波,就是正弦波等效成一系列等幅不等宽的矩形脉冲波形,其脉冲宽度是由正弦波和三角波自然相交生成的。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/\*-------------------------------

--------------------------------\*/
#include <reg52.h>
#include "delay.h"

#define uchar unsigned char
#define uint unsigned int

sbit X=P0^0;
sbit Y=P0^1;
sbit Z=P0^2;
uchar counttim0=0;
uchar T=0;

void main()
{
X=0;
Y=0;
Z=0;
TMOD=0x01;
EA=1;
ET0=1;
TH0=0xb1;//定时器初值,24M的晶振
TL0=0xe0;
TR0=1;
while(1)
{
if(counttim0 >=20 )
{
counttim0=0;
T++;
}
X=1;
delay\_1ms(50);
X=0;
delay\_1ms(10);
if(T>5)
{ Y=1;
delay\_1ms(50);
Y=0;
delay\_1ms(10);
}
if(T>10)
{
Z=1;
delay\_1ms(50);
Z=0;
delay\_1ms(10);
}
}
}

void tim0() interrupt 1
{
TH0=0xb1;
TL0=0xe0;
counttim0++;
// if(counttim0==22)
// {
// counttim0=0;
// T++;
// }
}


程序源码和仿真资源

1
2
3
链接:https://pan.baidu.com/s/1RUBnHWzVvAeDsrlkdH6Aeg 
提取码:x210