【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
|
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!