基于51单片机正弦波发生器课程设计
- 格式:doc
- 大小:2.06 MB
- 文档页数:10
《单片机课程设计》
设计报告
设计课题:正弦波信号发生器
专业班级:电子信息工程121班
学生姓名:**
指导教师:**
设计时间: 2015.07.10 赣南师范学院科技学院数学与信息科学系
正弦波信号发生器
一、设计任务与要求
系统上电产生f=100Hz,Vpp<=5V的正弦波。频率可通过按键在f=100Hz到f=10Hz之前切换。
二、方案设计与论证
1设计方案
本次课设的任务是基于AT89C51单片机的数字式简易低频信号发生器的设计,要求实现用程序产生正弦波,并可以通过键控在10—100Hz之间切换。而且需在Proteus电子设计平台上对设计方案进行仿真。采用了AT89C51单片机作为控制核心,外围采用数字模拟转换电路(DAC0832)来实现模数转换,从而输出正确的波形,设计中还连接了按键电路来实现键控改变频率。89C51是整个波形发生器的核心部分,通过程序的编写和执行,并从键盘接收数据产生100HZ-10HZ 正弦波信号。当数字信号电路到达转换电路,将其转换成模拟信号也就是所需要的输出波形。波形ROM表是将信号一个周期等间距地分离成256个点,储存在单片机得RON内。具体ROM表是通过MATLAB生成的,例如正弦表,MATLAB生成的程序如下:x=0:2*pi/64:2*pi; y=round(sin(x)*127)+128
2 原理框图
图1 系统原理框图
三、电路设计
1 电路设计
图2 系统电路图
2.主要性能参数计算
第一级运算放大器的作用是将DAC0832输出的电流信号转化为电压信号V1,第二级运算放大器的作用是将V1通过反向放大电路-(R2/R1)倍。
第二个运算放大器的输出端连了一个低通滤波器。如果不加低通滤波器,也能够生成波形,但是产生的信号中毛刺很多,加一个低通滤波器不仅起到的滤波的作用,还起到了平滑的作用。低通滤波器的截止频率F=1/(2*pi*R3*C6),这里选择R3 为1K欧姆电阻,C6为104电容。
波形ROM表是将信号一个周期等间距地分离成64个点,储存在单片机得RON 内。具体ROM表是通过MATLAB生成的,例如正弦表,MATLAB生成的程序如下:x=2*pi /256; y=round(sin(x)*255)+256
该电路用11.0592MHz晶振,由于频率较大时,正弦波中每一点延时时间为几μ秒,故延时时间还要加上指令时间即可得到指定频率的波形。
3.程序流程图
图3.程序流程图4.系统仿真
图4.软件仿真图
四、电路制作及调试
1 实物图
通过以上步骤,制作出实物图。如图所示:`
图5.实物图正面
图6.实物图反面
2.电路调试测试
图7.电路测试波形
3 元件清单
器件型号数量单价合计
电阻1K、10k,20k1个1个、2个0.05元0.2元
电容0.1u 10u 2个、1个0.1元0.3元
晶振12M 1个0.2元0.2元
运放LM324 1个1元1元
DA芯片DAC0832 1个5元5元
单片机STC89C52 1个 3.2元 3.3元
合计12 10元
五参考文献
[1]潘永雄.沙河.电子线路CAD实用教程(第四版)[M].西安电子科技大学出版社,2012.
[2]高吉祥.电子技术基础实验与课程设计(第二版)[M].电子工业出版社,2005.
[3]王港元.电子设计制作基础[M].江西科学技术出版社,2011.
[4]彭介华.电子技术课程设计指导[M].高等教育出版社,2009
[5]阎石. 数字电子技术基础[M]. 北京:高等教育出版社,2001年
[6]王贺明编.电工电子技术实验与设计[M],北京:兵器工业出版社,1998年
附录:
#include
#include
sbit wr=P3^6; //P3.6为DAC0832输入寄存器的写信号WR1,低电平有效
sbit cs=P3^0; //P3.0为DAC0832片选信号CS,低电平有效
unsigned char k,t;
sbit key=P3^1;
void keyscan();
//正弦波数据
unsigned char code Table[]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,
0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5 ,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7, 0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5 ,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb, 0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xfe,0xfd ,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1, 0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda ,0xd8,0xd6,0xd4, 0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab, 0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80, 0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51 ,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29, 0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d, 0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05, 0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15 ,0x16,0x18,0x1a, 0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d, 0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69, 0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};
void Delay(int Time_ms);
void main()
{
unsigned char i;
k=4;
cs=0; //DAC0832片选信号,低电平有效
while(1)
{
wr=1;
P0=Table[t];
wr=0;
keyscan();
Delay(k);
t++;
if(t==256) t=0;
}