给你一个单片机,你能造出一个示波器吗?

给你一个单片机,你能造出一个示波器吗?,第1张

1、系统结构框图

给你一个单片机,你能造出一个示波器吗?,第2张

图1系统结构图

1.1、信号调理电路

信号调理电路要完成的功能是:程控放大,叠加直流分量。程控放大的作用是:当输入信号的幅度很小的时候就需要对输入信号进行放大,使得被测信号可以在LCD上尽可能清楚的显示出来。叠加直流分量的作用是:ATmega16自带的A/D是单电源的,没办法输入负压而待测信号又往往有负压。这时候就需要这样一个电路,可以把负压抬高到0电平以上。

给你一个单片机,你能造出一个示波器吗?,第3张

图2信号调理电路原理图

R1,R2分别由一个模拟开关CD4051来连接不同的电阻,不同的R1,R2通过公式:这样就可以实现程控放大功能了。可调电阻R9用来设置信号调理电路加入的直流分量的大小。放大后的信号和直流分量最后由U3模拟加法器叠加后输出。

输入信号与输出信号的关系:只要R4、R6、R7的阻值相同,调理电路输入与输出的关系简化为:。

Ux为U3的输出电压,输出电压的电压值与可调电阻R9中间抽头的电压一至。

1.2、主控芯片软件设计

这个系统的主控芯片选择的是,Atmel公司的AVR系列单片机ATmega16,最高可达到16MPIS指令速度。ATmega16有16K的flash, 1K的SRAM, 512 B的EEPROM单片机内部自带一个10 bits精度的逐次逼近型模数转换器,内建采样/保持电路。ADC时钟是可编程的,在这个设计中为了太到最高的采样频率100KHz ADC的时钟设置为2MHz。ADC的触发源选择为定时器/计数器0溢出,ATmega16的定时器的时钟源也是可编程的。这样就可以通过控制定时器/计数器0溢出中断频率来控制ADC的采样频率。

给你一个单片机,你能造出一个示波器吗?,第4张

图3简易示波器系统程序流程图

1.2.1、键盘功能

在这个系统中设置了7个按钮分别为:运行与停止,放大倍数增大,放大倍数减小,采样频率增大,采样频率减小,触发电平上移,触发电平下移。

运行与停止键:是通过开启和关闭ATmega16 ADC转换完毕中断的方式来实现的。

放大倍数的增大与减小:是通过ATmega16控制模拟开关CD4051来实现放大倍数的数字化控制。CD4051为8通道的模拟开关,所以程控放大器可以有8档。

采样频率的增大与减小:是通过控制ATmega16的定时器0的时钟源及定时器的初始值来实现系统所需要的各个采样频率。定时器0的中断频率就等于ADC的采样频率。

触发电平的上移与下移:是通过对采样来的数据进行数字触发时,当数据的二进制值在增加的过程中某个数据的大小刚好与数字触发的二进制数值一样,在此以后的波形数据才存入显示RAM中。

当这7个按键中的某一个被触发,都会置位相应的标志位,以便刷新LCD液晶屏上相应的显示信息。

1.2.3、数字触发功能

如何实现触发呢?用硬件来完成的话又会增加系统硬件电路的复杂度,我就想了一个办法,有软件的方式来实现触发的功能。实现的过程如下:

for (ik=0;ik<500;ik++){

if (k0_ram){

if (box_buff[ik] < trigger) {

kk_ram = 1 ;

}

if (kk_ram){

if ((box_buff[ik] >= trigger) & (ik < 402)){

en_ram = 1 ;

k0_ram = 0 ;

kk_ram = 0 ;

}}}

if (en_ram){

boxing[adc_data]=box_buff[ik] ;

adc_data++ ;

if (adc_data > 96){

adc_data = 0x00 ;

en_ram = 0 ;

}}}

trigger的大小可以通过触发电平上移与触发电平下移按键来设置它的大小。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2641137.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-12
下一篇 2022-08-12

发表评论

登录后才能评论

评论列表(0条)

保存