简易示波器课程设计报告_数字示波器设计报告

2020-02-27 其他范文 下载本文

简易示波器课程设计报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数字示波器设计报告”。

课程设计报告

课程名称 综合电子设计 题 目 简易数字示波器 指导教师 起止日期 系 别 自 动 化 专 业 自动控制 学生姓名 班级/学号 成 绩

摘要

本系统由CPLD,单片机控制模块,键盘,LED,幅度控制模块,低通滤波模块组 成,采用当前主流DDS 技术完成,能产生从1HZ-260KHZ 正弦波,方波,三角波以及这三种同频率波的线性组合,失真度限制在6%之内。

一、功能介绍

1.具有产生正弦波、方波、三角波三种周期性波形的性能。

2.用键盘输入编辑生成上述三种波形(同周期)的线性组合波形。

3.输出波形频率范围为1Hz~200kHz(非正弦波频率按10 次谐波计算;重复频 率可调,频率步进间隔1Hz。)

4.输出波形幅度范围 0~5V(峰-峰值),可按步进为0.1V(峰-峰值)。5.具有显示输出波形种类、重复频率(周期)和幅度的功能。

6.增加稳幅输出功能,当负载变化时,输出电压幅度变化不大于±3%(负载变 化范围:100Ω~∞)。

二、方案论证与比较

常见信号源的制作方法有: 方案一:采用锁相式频率合成。将一个高稳定度和高精确度的标准频率经过加减 乘除的运算产生同样稳定度的大量离散频率技术,它在一定程度上既要频率稳定精确,又要频率在很大范围内可变的矛盾。但频率受VCO 可变频率范围的影响,高低频率比不可能做的很高,而且只能产生方波和正弦波。

方案二:采用模拟奋力元件或单片压控函数发生器MAX0832,可产生正弦波,方 波,三角波,通过调整外部元件可改变输出频率,但采用模拟器件由于元件分散性太大,即使使用单片函数发生器,参数也与外部元件有关,外接的电阻电容对参数影响很大,不能实现波形运算输出等智能化的功能。

方案三:采用DDFS,即直接数字频率合成技术,以Nyquist 时域采样原理为基础,在时域中进行频率合成,它可以快速转换频率,频率,相位,幅度都可以实现程控,便于单片机控制,所以,本系统采用此方案。

三、系统设计

系统总体设计方框图:

系统设计方案:

1、实现A/D芯片的模数转换功能,通过keil的watch窗口观察ADC0读取的数据的变化。

2、设置合适的采样频率和采样时间,对输入信号进行连续采样,对规定时间内的采样结果进行存储。

3、对已有数据进行D/A转换,实现数字量到模拟量的变化,并在示波器上显示结果。

4、添加单次按键触发等功能,实现在满足触发条件后,对一个采样周期内的输入进行存储和连续显示。

5、增加1通道输入,实现双踪示波。

6、综合上述情况实现完整的数字双踪示波器。

四、单元电路设计及其初始化

1.ADC0电路的设计

初始化程序为:

void ADC0_Init(void){ ADC0CN = 0x05;// ADC0 T3定时采样,左对齐 REF0CN = 0x03;// 启用内部基准源

AMX0CF=0x00;// 选择采样输入源 ADC0CF =((SYSCLK/2500000)-1)

采用数据左对齐存储方式。由0端口输入。T3定时器启动,当T3溢出时启动ADC0。转换结束时产生15号中断。执行中断程序。2.DAC电路的设计

初始化程序:

void DAC0_Init(void){ DAC0CN = 0x82;} void DA0_Out(unsigned int con_volt){ con_volt=con_volt

其中控制字DAC0CN说明如下:采用更新于写入DAC0H时,数据格式为高八位的低六位和低八为的高六位。

五、软件设计

1.软件流程图:

开始系统初始化扫描键盘循环扫描否定时器3是否溢出是启动ADC015号中断ADC数据采集DAC数据输出输出结束

3.相关程序及其功能

AD DA转换

#include sfr16 ADC0 = 0xbe;sfr16 ADC0GT = 0xc4;sfr16 ADC0LT = 0xc6;sfr16 TMR3RL = 0x92;//Timer3 reload value sfr16 TMR3 = 0x94;#define SYSCLK 22118400 //18432000 #define SAMPLE_RATE 2500000 // Sample frequency in Hz采样频率 #define INT_DEC 1 // integrate and decimate ratio #define uchar unsigned char #define uint unsigned int

void SYSCLK_Init(void);void ADC0_Init(void);void Timer3_Init(int counts);void ADC0_ISR(void);void DA0_Out(unsigned int con_volt);void DAC0_Init();uchar int_dec=INT_DEC;uchar tt=0;void main(void){ WDTCN = 0xde;WDTCN = 0xad;SYSCLK_Init();Timer3_Init(SYSCLK/SAMPLE_RATE);ADC0_Init();AD0EN = 1;DAC0_Init();EA = 1;while(1){

} } void SYSCLK_Init(void)

// 配置系统时钟使用外部晶振22.1184MHz { int i;OSCXCN = 0x67;// 晶体振荡器未用,晶体振荡器方式 for(i=0;i 1ms)while(!(OSCXCN & 0x80));// Wait for crystal osc.to settle OSCICN = 0x88;// 选择外部振荡器作为系统时钟,内部振荡器禁止 } void ADC0_Init(void){ ADC0CN = 0x06;// ADC0 T3定时采样,左对齐 REF0CN = 0x03;// 启用内部基准源 AMX0SL = 0x00;// 选择采样输入源0 ADC0CF =(SYSCLK/2500000)

hbyte=con_volt/256;lbyte=con_volt%256;DAC0L=lbyte;DAC0H=hbyte;} void Timer3_Init(int counts){ TMR3CN = 0x02;TMR3RL =-counts;TMR3 = 0xffff;EIE2 &= ~0x01;TMR3CN |= 0x04;} void ADC0_ISR(void)interrupt 15 { AD0INT = 0;int_dec--;if(int_dec == 0){ int_dec =INT_DEC;DA0_Out(ADC0);} }

六、设计结果

1.对原温度采集程序进行修改完成对信号的采集,以下分别为对于方波、三角波及正弦波的信号采集。

2.加入单次触发程序后,可进行按键触发:(以正弦波为例)

按下采样键K5前 按下采样键K5后

3.加入回放功能键K5,可实现在采样之后,进行波形回放(以正弦波为例)首先按下K5键得到正弦采样信号如图:

然后按下K2键得到回放波形如图:

(由于采样频度与周期等问题,回放波形有失真显现)经程序调整后得到:

更接近采样波形

4.完成双踪示波的采集,见图。

5将双踪示波与触发脉冲结合起来,完成对于双踪信号的采集、存储及回放,原始信号为三角波和方波。

按键k5对信号进行采样存储 按键k2对三角信号进行回放

按键k3恢复信号采集初始状态(等待采集信号)

七、心得体会

通过本次设计我进一步了解数字示波器的基本控制原理,掌握了怎样利用C8051F020开发板实现一个简易数字示波器的设计与制作以及处理器C8051F020芯片的应用,多通道ADC采集功能等应用技术。本次课程设计所设计的是基于C8051F020芯片,通过软硬件结合实现普通示波器显示被测波形的简易数字示波器。能完成对ADC0的0通道和1通道的信号的分时或同时采集(高电平约2V、低电平接近0V)并且对采集的信号通过DAC0和DAC1两个输出口同时输出实现双踪示波器功能。另增加单次触发存储显示方式,即每按动一次“单次触发”键,仪器在满足触发条件时,能对被测周期信号或单次非周期信号进行一次采集与存储,然后通过其他触发键触发信号的回放,观测波形无明显失真。

由于时间和硬件条件关系没有把做出LCD液晶显示示波器有点遗憾,不过我从网络上搜索了有关资料,对其也有了一定的了解。

八、参考文献

[1] 潘琢金【译】.《C8051F020/1/2/3混合信号ISP FLASH微控制器数据手册》

九、附录

1、元器件清单

(1)MCU 为美国Silabs 公司C8051F020,64KB FLASH、(4096+256)B RAM、最高25MIPS 执行速度;

(2)4 路12 位AD 输入,AIN1 到AIN4 输入信号量程0~+2.4V ;(3)2 路12 位DA 输出,输出信号量程0~+2.4V;(4)1 路标准RS232 通讯接口;(5)1 个16X2LCD 接口;(6)1 个128X64LCD 接口;(7)1 个复位键,4 个按键;(8)JTAG 调试接口;(9)外扩总线接口;

(10)C8051F020 上的资源对用户开放。

2、程序清单

/*************************************************************** 功能:实现ADC信号采样和DAC信号输出 用外部基准:

J7 NC2 内部VREF 外部VREF 3 4 内部DAC工作基准输入

外部VREF 5---6 内部ADC0工作基准输入

外部VREF 7 8 内部ADC1工作基准输入 或用内部基准:

J7 NC2-内部VREF 外部VREF 3 4 | 内部DAC工作基准输入

外部VREF 5 6-内部ADC0工作基准输入

外部VREF 7 8 内部ADC1工作基准输入

***************************************************************/ #include //调用头文件 #include #include //---------------// 16-bit SFR Definitions for 'F02x //---------------sfr16 DP = 0x82;// data pointer sfr16 TMR3RL = 0x92;// Timer3 reload value sfr16 TMR3 = 0x94;// Timer3 counter sfr16 ADC0 = 0xbe;// ADC0 data sfr16 ADC0GT = 0xc4;// ADC0 greater than window sfr16 ADC0LT = 0xc6;// ADC0 le than window sfr16 RCAP2 = 0xca;// Timer2 capture/reload sfr16 T2 = 0xcc;// Timer2 sfr16 RCAP4 = 0xe4;// Timer4 capture/reload sfr16 T4 = 0xf4;// Timer4 sfr16 DAC0 = 0xd2;// DAC0 data sfr16 DAC1 = 0xd5;// DAC1 data sbit P31=P3^1;//按键K5端口定义 sbit P32=P3^2;// 按键K4端口定义 sbit P34=P3^4;// 按键K3端口定义 sbit P33=P3^3;// 按键K2端口定义

#define BAUDRATE 115200 // Baud rate of UART in bps #define SYSCLK 22118400 // 系统晶振频率(Hz)#define SAMPLE_RATE 100000 // Sample frequency in Hz void SYSCLK_Init(void);void PORT_Init(void);void ADC0_Init(void);void Timer3_Init(int counts);void ADC0_ISR(void);void DAC0_Init(void);void DAC1_Init(void);void DA1_Out(unsigned int con_volt);void DA0_Out(unsigned int con_volt);long xdata NCDdata [510];int i=0,j=0,y =0,z=0,x=0,n,k=0,c=0,d,f,m;long a,b;

long result;void main(void){ WDTCN = 0xde;// 看门狗 WDTCN = 0xad;SYSCLK_Init();// initialize oscillator PORT_Init();// initialize crobar and GPIO Timer3_Init(SYSCLK/SAMPLE_RATE);// initialize Timer3 to overflow at

// sample rate ADC0_Init();// init ADC DAC0_Init();DAC1_Init();AD0EN = 1;// enable ADC EA = 1;while(1){

if(P31==0)

//K5循环扫描

{ for(m=0;m

f=1;DAC0CN = 0x02;x=0;} } if(P33==0)

//K3循环扫描

{ for(m=0;m

if(P34==0)

//K2循环扫描

{ for(m=0;m

//---------------// SYSCLK配置

//---------------// 配置系统时钟使用外部晶振22.1184MHz void SYSCLK_Init(void){ int i;// delay counter OSCXCN = 0x67;// start external oscillator with

// 22.1184MHz crystal for(i=0;i 1ms)while(!(OSCXCN & 0x80));// Wait for crystal osc.to settle OSCICN = 0x88;// select external oscillator as SYSCLK

// source and enable miing clock

// detector } //---------------// PORT配置

//---------------void PORT_Init(void){ XBR0 = 0x04;// Enable UART0 XBR1 = 0x00;XBR2 = 0x40;// Enable crobar and weak pull-ups P0MDOUT |= 0x01;// enable TX0 as a push-pull output P2MDOUT = 0xff;// P2口设为推挽方式 P3MDOUT = 0xe0;// P3口设为推挽方式 } //---------------// ADC0配置,T3定时启动ADC //---------------void ADC0_Init(void){ ADC0CN = 0x05;// ADC0 T3定时采样,左对齐 REF0CN = 0x03;// 启用内部基准源 AMX0CF=0x00;// 选择采样输入源

ADC0CF =((SYSCLK/2500000)-1)

//---------------void ADC0_ISR(void)interrupt 15 { AD0INT = 0;// 清 ADC 中断标志位 result=ADC0;if(AMX0SL==0x00)a=result;else b=result;DA1_Out(b);//DAC1输出通道1采集的数据

if(f==0)DA0_Out(a);else { NCDdata[x]=a;if(x

else DAC0CN = 0x02;} if(y==1){k=0;f=0;y=0;} } if(AMX0SL==0x00)AMX0SL=0x01;//改变采样输入源 else AMX0SL=0x00;} //---------------// DAC0配置

//---------------void DAC0_Init(void){ DAC0CN = 0x82;// Enable DAC0 in left-justified mode

// managed by Timer4 overflows } //---------------// DAC1配置

//---------------void DAC1_Init(void){ DAC1CN = 0x82;// Enable DAC0 in left-justified mode

// managed by Timer4 overflows } //---------------// DAC输出数据处理

//---------------void DA0_Out(unsigned int con_volt){ con_volt=con_volt

void DA1_Out(unsigned int con_volt){

con_volt=con_volt

3、系统功能说明:

当没有按键的时候系统为完整的双踪示波器,能对双通道的输入输出进行分别采样和输出。当K5按下的时候,DAC0屏蔽,系统开始将数据采集后存放于设定的数组当作,此时当K2键按下的时候系统使能DAC0,输出存储在数组中的采集好的数据,当数据输出完成的时候关闭DAC0。当按下K3时,系统还原到初始状态(双踪示波)。

《简易示波器课程设计报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
简易示波器课程设计报告
点击下载文档
相关专题 数字示波器设计报告 报告 示波器 简易 数字示波器设计报告 报告 示波器 简易
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文