简易 PWM 信号发生器的设计与制作

要求:

       设计一个简易 PWM 信号发生器,利用两个按键来进行调节 PWM 信号 的占空比,同时使用液晶显示 PWM 信号的目前占空比,并且能够通过 AT24C02 芯片将 当前的 PWM 信号的占空比设置参数保存,以便在掉电之后,下次上电时能够进行读取上次的数据,进行掉电储存的功能。并且之后通过示波器进行 PWM 输出的显示以及占空比的测量。

仿真:

简易 PWM 信号发生器的设计与制作_第1张图片

分析:仿真中通过 P1.6 和 P1.7 两个按键来作为调整 PWM 信号的占空比,P2.7 引脚输出 PWM 信号并且通过示波器来显示波形,频率计显示当前 PWM 信号的频率,电压探针来 计算模拟电压的数值。通过液晶来显示当前的占空比,D1 指示灯用来调试程序。

程序设计:

思路:检测按键按下,修改定时器中电平反转的时间,之后AT24C02保存当前翻转时间的参数,定时器移除之后触发中断,电平信号反转,输出PWM波---结果给液晶。

主函数:

#include "reg52.h" 
#include "key.h" 
#include "timer.h" 
#include "lcd.h" 
sbit led1=P1^4;
sbit led2=P1^3;
extern u8 t,step;
void main() 
{ 
 u8 num_1=0,num_2=0;
 InitLcd1602();
Timer1Init();
LcdShowStr(1,0,"KS OF SJF PWM:");
LcdShowStr(1,1,"DR: %");
LcdShowStr(8,1,"STEP: %");
t=At24c02Read(2);
step=At24c02Read(1);
PWM =0; 
led1 = 0;
led2 = 0;
 while(1) 
 { 
 key_scan(); 
 Lcd_numble(4,1,step,2);
- 18 - 
 Lcd_numble(13,1,t,2); 
 } 
} 

按键部分:用来调节占空比的

按键部分(调整占空比部分) 
#include "key.h" 
u8 t=10,step=1;
extern u16 k;
void delay(u16 x) 
{ 
 int i,j;
 for(i=0;i=90) t=90;
 At24c02Write(2,t);
 } 
 while(KEY_1==0); 
 } 
 if(KEY_2 ==0) 
 { 
 delay(10);
 if(KEY_2 ==0) 
 { 
 t= t-step;
 if(t<=10) t=10;
 At24c02Write(2,t); 
 } 
 while(KEY_2==0);
 } 
} 

定时器部分:

#include "timer.h" 
#include "lcd.h" 
u16 k=0;
extern u8 t;
void Timer1Init() 
{ 
TMOD|=0X20;
TH1=156; 
TL1=156;
ET1=1;
EA=1;
TR1=1; 
} 

 void Timer1() interrupt 3 
{ 
k++;
if(k>100) k=0;
if(k

仿真验证结果:

占空比为90%时: 

 简易 PWM 信号发生器的设计与制作_第2张图片

占空比为50%时

简易 PWM 信号发生器的设计与制作_第3张图片

 

电路图的绘制:

简易 PWM 信号发生器的设计与制作_第4张图片

实物和结果展示:

占空比为10%时

简易 PWM 信号发生器的设计与制作_第5张图片

 简易 PWM 信号发生器的设计与制作_第6张图片

占空比为50%时:

简易 PWM 信号发生器的设计与制作_第7张图片 

 简易 PWM 信号发生器的设计与制作_第8张图片

占空比为90%时:

简易 PWM 信号发生器的设计与制作_第9张图片

 简易 PWM 信号发生器的设计与制作_第10张图片

 误差分析:

        当输出为 PWM 信号的时候,通过示波器显示的波形,PWM 波形,上下出现了部分 的过冲和毛刺。占空比显示基本误差很小,但是波形出现了失真和毛刺。推测误差来源为,可能是环境干扰和 BNC 线的不稳定,以及板子制作时过孔之间的电流的影响。以及晶振电路间,12MHz 晶振和 30pf 电容的工艺的误差,以及其他元器件之间的误差,线路之间流向的问题。

 

你可能感兴趣的:(单片机,51单片机)