介绍
通过按键调整输出正弦波频率的大小,最小单位为1Hz,输出频率的可调范围为从4Hz到99Hz。使用的单片机为STC89C52RC,AD转换器为TLC5615,显示器为LCD1602。
总体方案及设计思路
本作品以STC89C52RC单片机为核心,由串行口下载电路、D/A转换电路、按键电路、电源电路和LCD1602显示电路六部分组成。采用MATLAB软件绘制一个正弦波,并对其进行采样量化编码得到一个正弦波的编码,进而利用KEIL5为编程软件并用C51语言为编程语言来设计正弦波发生装置。
本作品的总体设计思路为:先通过MATLAB对正弦波进行采样、量化、编码,再利用STC89C52RC单片机将编码传输到TLC5615内,即可输出一个正弦波信号,通过设置单片机定时器传输一个编码的时间从而控制正弦波的频率。
硬件框图
该作品主要由STC8952RC最小系统、串行口下载电路、D/A转换电路、按键电路、电源电路和LCD1602显示电路等六部分组成。LCD1602直接连接52单片机,显示输出正弦波的频率,并能够根据外部信息进行实时刷新和调整。程序经由串行口下载电路下载到单片机后,系统根据按键信息调整输出正弦波的频率值(初始输出频率为4Hz)。D/A转换电路将系统提供的数字量转换为模拟量进行输出。电源电路负责为整个开发系统进行供电。
软件流程图
LCD1602用来显示设置输出的正弦波的频率,四个按键分别控制正弦波频率的增加和减少,定时器0中断中控制单片机向TLC5615芯片传输正弦波编码。程序开始时,先进行定时器和LCD1602的初始化,之后在while(1)循环中检测按键是否按下,并进行相应频率的调节,之后根据设置的频率计算每个字节传输所需要定时的时间。
MATLAB采样量化编码程序
MATLAB程序如下:
f0=1; %设置正弦波信号的频率
T0=1/f0;
t=0:0.01:T0;
xt=127*sin(2*pi*f0*t); %产生正弦波信号
fs=36*f0;
Ts=1/fs;
n=0:1:T0/Ts-1; %采样点数
xn=127*sin(2*pi*f0*n*Ts)+128;
Xn=round(xn); %转化为整数(量化)
hn=dec2hex(Xn) %十进制转化为十六进制(编码)
stem(n,Xn);
运行结果:
TLC5615传输程序
void TLC5615_DAC(uint da)
{
uchar i;
da<<=2;
CLK=0;
CS=0;
for(i=0;i<10;i++)
{
DIN=(bit)(da&0x200);
CLK=0;
da<<=1;
CLK=1;
}
CS=1;
CLK=0;
}
测试结果
硬件测试结果:
设定值(Hz) | 测量值(Hz) |
---|---|
6 | 6.002 |
7 | 7.002 |
8 | 8.000 |
9 | 9.001 |
10 | 10.00 |
20 | 20.01 |
30 | 30.02 |
40 | 40.00 |
50 | 50.13 |
60 | 60.22 |
70 | 70.38 |
80 | 80.03 |
90 | 90.10 |
99 | 99.59 |
软件仿真结果:
f=4Hz:
f=50Hz:
f=99Hz:
原理图
整体程序
https://download.csdn.net/download/qq_45416964/18698921
其中包括MATLAB采样量化编码程序和KEIL程序。