《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 用AVR微处理器实现的简易示波器
用AVR微处理器实现的简易示波器
摘要: 用这种方法可以实现一个简易的示波器,整个系统结构简单,清晰。充分利用了AVR单片机内部资源使系统电路得以简单化,就连系统的工作时钟也是AVR内部自带的。通过测试该系统在测量频率方向的误差很小,可以用来比较准确的测量测试信号的频率。
关键词: avr 示波器
Abstract:
Key words :

46.jpg

1.1、信号调理电路

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

 

47.jpg

 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的采样频率。

 

48.jpg

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的大小可以通过触发电平上移与触发电平下移按键来设置它的大小。

1.2.3、还原波形

GDM12864A是一个具有128点x 64点的点阵LCD。根据所选的LCD的特点,Y轴上只有64个点,所以能显示的数据范围为0到63而采样得到的数据为8位的二进制数据为0到255。为了能在这个LCD上显示只取8位数据的高6位。那么如何把这高6位的二进制数据转换成在LCD上的Y轴座标和数据值呢?我想了这样一个计算的方法:

LCD的纵向分为8个地址从上到下依次为0~7,每个地址段有8个数据点。在某个数据段中如果想依次让这些位从上到下点亮就需要依次向这个地址段送数据0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,送入0x00后这个地址段的8个数据点将不被点亮。实现的具体过程如图4 所示。
dat = dat>>2
y = 7
dat >= 8 ?
dat = dat – 8; y--;
y == 1 ?
dat > 7 ?
dat = 7 ;
dat = 0x80 >> dat
write_add(y,x) ;
write_data(dat) ;
 

 

 

49.jpg

1.2.4、ADC采样频率控制

ADC的采样频率在上文已有提及,ADC中断的计算公式为: ,通过ATmega16的特殊功能寄存器TCCR0的低3位CS02,CS01,CS00的设置就可以改变 的频率,再把TCNT0设置成不同的数值就可以得到这个系统所需要的各个采样频率值了。表1中的数据是通过上面的公式计算出来的数据再经实际的系统调试并修正后的数据。

50.jpg
2.2、系统误差

系统的误差主要出在信号调理电路,因为模拟开关有一定的内阻约为80Ω对调理电路的放大倍数会造成一定的影响。通过1.1中的计算公式计算出来的电阻值在实际中不存在,通过几个电阻串联来实现也还是会有一定的误差。平衡电阻R3是固定的在R1,R2发生变化的时候,平衡电阻可能就不能平衡也会给运算放大器引入一定的误差。

2.3、可以改进的地方

系统可以进一步改进的地方在于信号调理电路,可以通过选择性能更好的模拟开关和运算放大器,更合理的选择电阻这样就可以提高信号调理电路的放大的准确度。使整个系统的性能得以进一步改善。

2.4、系统实际工作情况

LCD显示的信息分别有,波形图像,在波形的上面是横轴的标尺,在屏幕的右边为系统的运行状态(Run / Stop),Time 为整个波形框的时间长度,Volt- 为电压档,在波形框与信息框之间有个小点为信号的触发电平。信号的频率=波形框中信号的周期数/Time。

51.jpg

3、   结论

用这种方法可以实现一个简易的示波器,整个系统结构简单,清晰。充分利用了AVR单片机内部资源使系统电路得以简单化,就连系统的工作时钟也是AVR内部自带的。通过测试该系统在测量频率方向的误差很小,可以用来比较准确的测量测试信号的频率。

[参考文献]
[1]     刘海成.  AVR单片机原理及测控工程应用 [M] 北京:北京航空航天大学出版社,2008.3.
[2]     高吉祥. 全国大学生电子设计竞赛培训系列教程 [M] 北京:电子工业出版社,2007.6.
[3]     刘祖刚. 模拟电路分析与设计基础 [M] 北京:机械工业出版社,2007.10.
 

此内容为AET网站原创,未经授权禁止转载。