中科因仑“3+1”工程特种兵精英论坛
标题:
轻松打造一款“Arduino简易示波器”
[打印本页]
作者:
刘登辉
时间:
2015-5-17 23:36
标题:
轻松打造一款“Arduino简易示波器”
示波器: 示波器是一种用途十分广泛的电子测量仪器。它能把肉眼看不见的电信号变换成看得见的图像,便于人们研究各种电现象的变化过程。示波器利用狭窄的、由高速电子组成的电子束,打在涂有荧光物质的屏面上,就可产生细小的光点(这是传统的模拟示波器的工作原理)。在被测信号的作用下,电子束就好像一支笔的笔尖,可以在屏面上描绘出被测信号的瞬时值的变化曲线。利用示波器能观察各种不同信号幅度随时间变化的波形曲线,还可以用它测试各种不同的电量,如电压、电流、频率、相位差、调幅度等等。
对于电子爱好者来说,来一件称心的工具比一身比较哇塞的衣服要使心里畅快的多。
下面就请大家准备好一颗积极的心,一双神奇的手,来打造一款属于自己的简易示波器吧!
作者:
刘登辉
时间:
2015-5-17 23:39
本帖最后由 刘登辉 于 2015-5-18 20:21 编辑
[attach]3159[/attach][attach]3162[/attach]
主要参数: 频 率 响 应: 10Hz-50KHz
电 源: 5V
LCD液晶屏: 128x64(ST7920)
测量显示区:96x64
信息显示区:32x64,显示测试信号的频率、Vpp等内容
同 步 方 式:上升沿触发
扫 描 速 度:0.02ms/div~10ms/div,按1-2-5进位分九档
Hold 功 能:冻结显示波形和参数
二、基础试验
使用Arduino 做项目的最大优势就是其丰富的资源,同时也不需要了解太多单片机的知识。我下面的制作就利用了一个LCD的资源库u8glib,使得编程变得简单多了,不然LCD的驱动会花费你好多时间。
u8glib 下载:[attach]3160[/attach][attach]3160[/attach]下面是我先用Arduino UNO搭建的试验电路,LCD使用ST7920控制的12864液晶屏。
[attach]3161[/attach]只要输入法下列代码,编译下载后就能实现数字示波器的基本功能了,是不是很简单?
#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( ));
}
复制代码
显示效果:
[attach]3163[/attach]
[attach]3164[/attach]
利用这个试验电路,我测量了Arduino 直接使用
analogRead()
函数完成一次数模转换的时间约为111微秒,转换速度很慢,因此其带宽只有1KHz多点, 接下来的首要任务就是提高数模转换速度,同时增加其它功能。
三、最新程序
下面是最新的源代码,使用时请保留我的开机LOGO,呵呵。
[attach]3165[/attach]
上述程序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,这样才能有小体积。
电路图:
[attach]3166[/attach]
主要元器件清单:
名称 数量
Arduino PRO mini 1
LCD12864液晶屏(ST7920) 1
电解电容器(100μ 25V) 1
电位器(50k) 1
洞洞板 2
按钮开关 3
电源开关 1
电池盒(配7号充电电池) 1
机壳 1
1、焊接Arduino PRO mini 插针。
[attach]3167[/attach]
[attach]3168[/attach]
2、 焊接电路板元件
[attach]3169[/attach]
[attach]3170[/attach]
3、制作LCD洞洞板
[attach]3171[/attach]
[attach]3172[/attach]
4、组装电路板
[attach]3174[/attach]
[attach]3173[/attach]
5、制作机壳
我用了一个充电宝的塑料包装盒改制机壳,在相应的地方打上孔。
[attach]3177[/attach]
6、总装
将电路板装入机壳,用厚点的白纸做一个面板,贴在前面板内侧。
[attach]3178[/attach]
[attach]3178[/attach]
[attach]3179[/attach]
[attach]3180[/attach]
[attach]3181[/attach]
[attach]3182[/attach]
[attach]3183[/attach]
五、程序下载与测试
由于 Arduino PRO mini 不自带USB转串口的电路,所以要通过一根USB转串口的下载线才能下载程序。
示波器的调试很简单,只要调节50k电位器使水平扫描线居中即可。
我用一台信号发生器作信号源。
[attach]3184[/attach]
[attach]3185[/attach]
[attach]3186[/attach]
几点说明
1、这是一个最简单的数字示波器,可以在此基础上进一步完善;
2、大家可能注意到我没有使用 I/O端口0-7,这正好是AVR单片机的一个8位并口,这是我为后续升级准备的,在使用专用ADC芯片的时候它可以作为数据输入,如果大家对这个示波器感兴趣,以后我会考虑升级;
3、作品完成得比较仓促,有什么缺陷和不足的地方,请大家指教,你制作中有什么问题也可以在这里交流。
谢谢大家!
转自arduino论坛
欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/)
Powered by Discuz! X3.4