基于51单片机正弦波发生器课程设计

  • 格式:doc
  • 大小:2.06 MB
  • 文档页数:10

下载文档原格式

  / 10
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《单片机课程设计》

设计报告

设计课题:正弦波信号发生器

专业班级:电子信息工程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;

}