模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

8737查看 | 28回复

基于Arduino的数字示波器 [转帖]

  [复制链接]
发表于 2016-12-8 09:30:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
                     我特此声明是转帖。搬运过来服务模友。

(注:本作品在我写的新书《玩转Arduino电子制作》中有更详细的介绍)

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 3482           基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 2857

                    

一、概述

       经常在网上 看到有人制作数字示波器,数字示波器必须有数模转换单元,根据数模转换方式可以将电路分为两种模式: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 下载: 基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 2812 u8glib_arduino_v1.13.zip (989.55 KB, 下载次数: 2782)    
       下面是我先用Arduino UNO搭建的试验电路,LCD使用ST7920控制的12864液晶屏。
       基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 8855

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

[C] [color=rgb(51, 102, 153) !important]纯文本查看 [color=rgb(51, 102, 153) !important]复制代码
[color=white !important]
[color=white !important]?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

#include  //声明库
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的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 2977           基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 2695
            
           利用这个试验电路,我测量了Arduino 直接使用analogRead() 函数完成一次数模转换的时间约为111微秒,转换速度很慢,因此其带宽只有1KHz多点, 接下来的首要任务就是提高数模转换速度,同时增加其它功能。

三、最新程序
         下面是最新的源代码,使用时请保留我的开机LOGO,呵呵。
          Arduino_oscilloscope.zip (2.72 KB, 下载次数: 2984)         

         上述程序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的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 1029

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

      1、焊接Arduino PRO  mini 插针。

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 2218

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 714

2、 焊接电路板元件

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 8878

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 4944

3、制作LCD洞洞板

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 4620

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 7498

4、组装电路板

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 7900

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 2829

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 7317

5、制作机壳
       我用了一个充电宝的塑料包装盒改制机壳,在相应的地方打上孔。

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 9360

6、总装
      将电路板装入机壳,用厚点的白纸做一个面板,贴在前面板内侧。

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 1837

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 7495

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 9225

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 4670

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 7871

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 6774


五、程序下载与测试
        
      由于 Arduino PRO mini 不自带USB转串口的电路,所以要通过一根USB转串口的下载线才能下载程序。
      示波器的调试很简单,只要调节50k电位器使水平扫描线居中即可。
      我用一台信号发生器作信号源。

    基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 7370

   开机LOGO

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 5926
      
   测试图:

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 4523

基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 5540

六、测试视频

       测试过程中在调节信号源的频率输出方法,调节示波器的扫描速度按键和Hold按键。



评分

参与人数 1牛币 +5 收起 理由
飞来峰 + 5

查看全部评分

发表于 2019-12-17 20:05:18 | 显示全部楼层
谢谢分享,有时间照着做一个。
回复 支持 1 反对 0

使用道具 举报

发表于 2019-8-27 09:53:41 | 显示全部楼层
感谢分享!学习啦。我做的怎么一直显示LOGO,进入不了波形显示页面?
回复 支持 1 反对 0

使用道具 举报

发表于 2018-4-1 11:28:34 | 显示全部楼层
楼主这个示波器是否只能测几k到几十k的频率。我们玩模型应该对1.2-5.8g这个频段感兴趣。谢谢!
回复 支持 0 反对 1

使用道具 举报

发表于 2017-4-4 08:07:48 | 显示全部楼层
很久以前就看过 不错不错
回复 支持 1 反对 0

使用道具 举报

发表于 2017-4-1 15:39:42 | 显示全部楼层
这个应该可以用来检测接收机的PWM信号吧
回复 支持 1 反对 0

使用道具 举报

发表于 2017-3-14 12:33:36 | 显示全部楼层
楼主是否可以用你的示波器测试一下平时能够找得到的电子元件,这样的应用场景大家比较好理解。
回复 支持 0 反对 1

使用道具 举报

发表于 2017-3-13 10:12:40 | 显示全部楼层
好贴,很实用。希望可以
回复 支持 1 反对 0

使用道具 举报

发表于 2016-12-16 10:35:53 | 显示全部楼层
发现好物,有空试试。
回复 支持 1 反对 0

使用道具 举报

发表于 2016-12-9 23:01:46 | 显示全部楼层
羡慕许仙曰过蛇 发表于 2016-12-9 23:00 基于Arduino的数字示波器 [转帖] 示波器 作者:a369404982 3699
国外有开源项目,跟手持机一样功能

有时间研究研究
回复 支持 1 反对 0

使用道具 举报

发表于 2016-12-8 09:34:42 | 显示全部楼层
第一排顶起来
 楼主| 发表于 2016-12-8 09:47:22 | 显示全部楼层
就当长长知识了
发表于 2016-12-8 10:00:01 | 显示全部楼层
顶起来顶起来顶起来
发表于 2016-12-8 10:16:37 | 显示全部楼层
能测5.8g和2.4g吗?具体有什么用途?
发表于 2016-12-8 11:04:50 | 显示全部楼层
厉害了,我的楼主
发表于 2016-12-8 11:48:30 | 显示全部楼层
太好了,也想做个玩玩,不知道能不能成功
发表于 2016-12-8 12:05:13 | 显示全部楼层
路过看看,。
发表于 2016-12-8 12:27:44 | 显示全部楼层
虽然不知道是什么 感觉好牛逼
 楼主| 发表于 2016-12-8 16:23:56 | 显示全部楼层
只有一个目标0 发表于 2016-12-8 12:27 基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 9732
虽然不知道是什么 感觉好牛逼

示波器,都说了是示波器!
发表于 2016-12-8 17:47:13 | 显示全部楼层
支持个
发表于 2016-12-8 19:30:02 | 显示全部楼层
这 个看着简单   顶
发表于 2016-12-8 19:35:06 | 显示全部楼层
路过,6666666
发表于 2016-12-8 19:39:01 | 显示全部楼层
太好了,也想做个玩玩,不知道能不能成功
发表于 2016-12-8 22:22:35 | 显示全部楼层
厉害啊啊啊
发表于 2016-12-8 22:58:12 | 显示全部楼层
多谢,可以做出来也不会用这玩意
发表于 2016-12-8 23:28:43 | 显示全部楼层
好帖子。
发表于 2016-12-9 22:52:36 | 显示全部楼层
前段时间合计买一个来着,一看,太贵了
 楼主| 发表于 2016-12-9 23:00:28 | 显示全部楼层
a369404982 发表于 2016-12-9 22:52 基于Arduino的数字示波器 [转帖] 示波器 作者:羡慕许仙曰过蛇 9810
前段时间合计买一个来着,一看,太贵了

国外有开源项目,跟手持机一样功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|关于模吧|APP下载|广告报价|小黑屋|手机版|企业会员|商城入驻|联系我们|模吧 ( 冀公网安备13080502000084号 )

© 2013-2020 Moz8.com 模吧,玩出精彩!