高级应用

实例--基于Arduino的数字示波器_1

字号+ 作者:PLC工程师 来源:未知 2016-02-26 20:50 我要评论( )

实例--基于Arduino的数字示波器

基于Arduino的数字示波器


      
    
 

                    

一、概述

       经常在网上 看到有人制作数字示波器,数字示波器必须有数模转换单元,根据数模转换方式可以将电路分为两种模式:1.专用ADC芯片+单片机,2.利用单片机内部的ADC作数模转换。对于第一种模式我也做过两种(见我的博客: http://blog.sina.com.cn/ntwhq),这种模式电路要复杂一点,元器件也较难配齐,对初学者来说比较困难。第二种结构比较简单,容易制作,但有一个明显的缺点,就是带宽比较窄,其中一个比较典型的作品是国外网友制作的:http://www.serasidis.gr/circuits/AVR_oscilloscope/avr_oscilloscope.htm,这个示波器的带宽只有7.7KHz。国内也有网友用AVR和STC单片机制作的,但实际带宽均不超过10KHz。
        最近看到有网友用Arduino做示波器,这可以说比上面的第二种方式还要简单,但观察其制作的效果却不理想,带宽很窄。因此我也想试一下,看看又没有好的方法来解决这一问题。通过实验制作,不断修改代码,提高数模转换的取样率,取得了很好的效果。
        最终作品的主要参数
        频率响应:  10Hz-50KHz
     电    源:  5V 
     LCD液晶屏: 128x64(ST7920)
     测量显示区:96x64
     信息显示区:32x64,显示测试信号的频率、Vpp等内容
     同步方式:上升沿触发
        扫描速度:0.02ms/div~10ms/div,按1-2-5进位分九档
        Hold功能:冻结显示波形和参数 

二、基础试验

      使用Arduino 做项目的最大优势就是其丰富的资源,同时也不需要了解太多单片机的知识。我下面的制作就利用了一个LCD的资源库u8glib,使得编程变得简单多了,不然LCD的驱动会花费你好多时间。
      u8glib 下载:  u8glib_arduino_v1.13.zip 
       下面是我先用Arduino UNO搭建的试验电路,LCD使用ST7920控制的12864液晶屏。
        

只要输入法下列代码,编译下载后就能实现数字示波器的基本功能了,是不是很简单?

#include <U8glib.h> //声明库
 U8GLIB_ST7920_128X64_4X u8g(13, 12, 11); // 声明液晶屏 SPI Com: SCK =13, MOSI = 12, CS =  11
 int x,y; //绘点坐标
 int Buffer[128]; //缓存值储存数组
 void setup( ) {  } 
 //采样
 void sample( )  
{  
 for(x = 0;x < 128;x++) 
   Buffer[x] = analogRead(A0);  //信号采样
 for(x = 0;x < 128;x++)  
   Buffer[x] = 63-(Buffer[x]>>4); //计算纵坐标值
}
//显示
void draw( )  
{  
  for(x = 0;x < 127;x++)  
     u8g.drawLine(x,Buffer[x],x,Buffer[x+1]);  //画相邻两点连线  
 u8g.drawLine(64,0,64,63); // 画坐标轴 
 u8g.drawLine(0,32,128,32);
 for(x=0;x<128;x+=8)   //画坐标轴刻度 
   u8g.drawLine(x,31,x,33);
 for(x=0;x<64;x+=8)
   u8g.drawLine(63,x,65,x);
 u8g.drawFrame(0,0,128,64); //画边框 
}   
void loop( ) 
 { 
   sample();         //采样
   u8g.firstPage();  //清屏
   do  draw( );      //显示
   while( u8g.nextPage( ));
 } 

显示效果:

          
            
           利用这个试验电路,我测量了Arduino 直接使用analogRead() 函数完成一次数模转换的时间约为111微秒,转换速度很慢,因此其带宽只有1KHz多点, 接下来的首要任务就是提高数模转换速度,同时增加其它功能。

三、最新程序
         下面是最新的源代码,使用时请保留我的开机LOGO,呵呵。
           Arduino_oscilloscope.zip          

        上述程序ADC使用片内1.1V基准电压,如果要使用片外5V基准电压,应将程序中
        ADMUX=0xe0; 改为:ADMUX=0x60; 
        Vpp=(V_max-V_min)*1.1/255;改为: Vpp=(V_max-V_min)*5/255;

四、整机制作

       上面做试验用的是Arduino UNO,实际制作时使用Arduino PRO mini,这样才能有小体积。

        电路图:

 

       主要元器件清单:        
        名称                                                            数量
       Arduino PRO mini                                        1
        LCD12864液晶屏(ST7920)                       1
        电解电容器(100μ 25V)                              1                
        电位器(50k)                                             1
        洞洞板                                                           2
        按钮开关                                                       3
        电源开关                                                       1
        电池盒(配7号充电电池)                            1
        机壳                                                              1

      1、焊接Arduino PRO  mini 插针。

 

 

2、 焊接电路板元件

 

 

3、制作LCD洞洞板

 

 

4、组装电路板

 

 

 


如需更详细资料,如有好资源分享,请加入QQ交流群:214461008

欢迎阅读,欢迎转载,不用注明出处!本站只提供入门和进阶资料,做您学习的小伙伴!

老司机也欢迎光临指导!有好内容请加群:214461008 不要看声明了,看内容吧!

相关文章
  • 如何利用Arduino作为AVR ISP烧录bootloader

    如何利用Arduino作为AVR ISP烧录bootloader

    2016-05-10 18:54

  • 自制Arduino-Tiny最小系统

    自制Arduino-Tiny最小系统

    2016-04-27 15:37

  • 硬件木马: 用Arduino制作键盘记录器

    硬件木马: 用Arduino制作键盘记录器

    2016-04-26 13:59

  • Arduino as a programmable logic controller (PLC)

    Arduino as a programmable logic controller (PLC)

    2016-03-27 23:02

网友点评
Arduino