怎么用示波器测量频率范围arduino的采样频率

如何巧妙的使用示波器
> 如何巧妙的使用示波器
如何巧妙的使用示波器
  的使用方法本文引用地址:
  1.获得基线:当操作者在使用无使用说明书的时,首先要获得一条最细的水平基线,然后才能用探头进行其他测量,其具体方法如下: (1)预置面板各开关、旋钮。 亮度置适中,聚焦和辅助聚焦置适中,垂直输入耦合置&AC,,,垂直电压量程选择置&5mv/div&,垂直工作方式选择置&CHl&,垂直灵敏度微调校准位置置&CAL&,垂直通道同步源选择置中间位置,垂直位置置中间位置,A和B扫描时间因数一起预置在&0.5ms/div&,A扫描时间微调置校准位置&CAL&&,水平位移置中间位置,扫描工作方式置&A&,触发同步方式置&AUTO&,斜率开关置&+& ,触发耦合开关置&AC&&,触发源选择置&INT&。 (2)按下电源开关,电源指示灯点亮。 (3)调节A亮度聚焦等有关控制旋钮,可出现纤细明亮的扫描基线,调节基线使其位置于屏幕中间与水平坐标刻度基本重合。 (4)调节轨迹平行度控制使基线与水平坐标平行。
  2.显示信号:一般情况下,本身均有一个0.5Vp&p标准方波信号输出口,当获得基线后,即可将探头接到此处,此时屏幕应有一串方波信号,调节电压量程和扫描时间因数旋钮,方波的幅度和宽窄应变化,至此说明示波器基本调整完毕可以投入使用。
  3.测量信号:将测试线接在CHl或CH2输入插座,测试探头触及测试点,即可在示波器上观察到。如果幅度太大或太小,可调整电压量程旋钮;如果周期显示不适合,可调整扫描速度旋钮。
  特殊使用方法 1.交流峰值电压测量 (1)获得基线。 (2)调整V/div旋钮,使波形在垂直方向显示5div(即5格)。 (3)调节&A触发电平&获得稳定显示。 (4)用以下公式计算峰值电压。 电压(p&p):垂直偏转幅度/度x(VOLTS/div)/开关档极x探极衰减倍率。 例如:测得上峰到下峰偏转是5.6度,VOLTS/dir开关置0.5,用x10探极衰减倍率,将数据代人:电压二5. 6X0.5 X 10二28 V。 2.上升时间测量 上升时间:水平距离(度)x时间/度(档极)/扩展系数。 例如:波形两点间的距离为5度,时间/度档级为1Us,x10扩展末扩展(即x1),将给定值代人:上升时I司;5X1 /1;51xs。 3.相位差测量 相位差:水平差值(度)x水平刻度校准值(度/度)。 例如:水平差值为0.6度,每度校准到45度,将给定值代人公式:相位差:0.6x45:27
  示波器的使用技巧
  1、如何测量直流电压?
  答:首先需要设置耦合方式为直流,根据大概的范围调节垂直档位到一个合适的值,然后比较偏移线跟通道标志的位移。
  2、用户反应测量220V市电的时候幅度超出屏幕范围?三相电源的相位差如何测?
  答:DS5000系列最大输入峰峰值电压是400V,根据有效值换算峰峰值公式220V市电超过了400V峰峰值,幅度超出屏幕范围正常现象。用示波器测量三相电源相移的时候,可以设置触发源为市电,并使用一通道先测A-B波形,然后存储为参考波形,再使用探头连接B-C,这时可以测量出相移。
  3、什么是混淆抑制作用?
  答:混淆是指示波器采集的频率低于实际信号最大频率的2倍采集产生的一种状况。混淆抑制是为了防止混淆的产生而专门设计的,混淆抑制可判别信号的最大频率,并以2倍的最大频率采集信号。
  4、如何捕捉非周期性的信号?
  答: ①、设定触发电平至需要的值。 ②、点击主控按钮SINGLE,机器开始等待,如果有某一信号达到设定的触发电平,即采样一次,显示在屏幕上。利用此功能可以轻易捕捉到偶然发生的事件,例如幅度较大的突发性毛刺:将触发电平设置到刚刚高于正常信号电平,点击SINGLE按钮,则当毛刺发生时,机器自动触发并把触发前后一段时间的波形记录下来。拖动触发位置标志线可以得到不同长度的负延迟触发,便于观察毛刺发生之前的波形。
  5、如何观察低压直流电源的噪声?
  答:①、连接示波器探头于通道A1(或A2)与被测点之间。 ②、设定触发源(Trigger Source)为A1或A2(必须与实际被测信号输入的通道一致)。 ③、点击A1或A2按钮,选定耦合方式为AC(交流)耦合。 ④、调节采样速率及垂直灵敏度,直至得到满意的显示。
  6、DS5000示波器的获取方式可应用在哪些场合?
  答:观察单次信号请选用实时采样方式,观察高频周期性信号可以选用等效采样方式。希望观察信号的包络避免混淆,请选用峰值检测方式。期望减少所显示信号中的随即噪音,请选用平均采样方式,平均值的次数可以选择。观察低频信号,选择滚动模式方式。希望显示波形接近模拟示波器效果,请选用模拟获取方式。
  7、触发和波形采集的关系如何?
  答:针对不同类型的示波器,示波器不同的捕获方式,触发和波形采集的关系不同。如果是采样示波器或实时示波器的等价时间采样模式,一个波形的采集需要多次触发完成的。针对实时示波器的实时采样模式,触发一次,波形肯定会采集一次,不触发,波形也可能采集,这就是触发的AUTO模式。(有三种触发模式,一种是AUTO,不触发,波形也会刷新,但波形在屏幕上会不稳定,另一种是NORMAL,只有触发才刷新,最后一种是SINGLE,第一次触发捕获波形,以后就不在捕获波形了。)。
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一强烈推荐:示波器使用常见问题集锦
> 强烈推荐:示波器使用常见问题集锦
强烈推荐:示波器使用常见问题集锦
  1、如何测量直流电压?本文引用地址:
  答:首先需要设置耦合方式为直流,根据大概的范围调节垂直档位到一个合适的值,然后比较偏移线跟通道标志的位移。
  2、用户反应测量220V市电的时候幅度超出屏幕范围?三相电源的相位差如何测?
  答:系列最大输入峰峰值电压是400V,根据有效值换算峰峰值公式220V市电超过了400V峰峰值,幅度超出屏幕范围正常现象。用测量三相电源相移的时候,可以设置触发源为市电,并使用一通道先测A-B波形,然后存储为参考波形,再使用探头连接B-C,这时可以测量出相移。
  3、什么是混淆抑制作用?
  答:混淆是指采集的频率低于实际信号最大频率的2倍采集产生的一种状况。混淆抑制是为了防止混淆的产生而专门设计的,混淆抑制可判别信号的最大频率,并以2倍的最大频率采集信号。
  4、如何捕捉非周期性的信号?
  答: ①、设定触发电平至需要的值。 ②、点击主控按钮SINGLE,机器开始等待,如果有某一信号达到设定的触发电平,即采样一次,显示在屏幕上。利用此功能可以轻易捕捉到偶然发生的事件,例如幅度较大的突发性毛刺:将触发电平设置到刚刚高于正常信号电平,点击SINGLE按钮,则当毛刺发生时,机器自动触发并把触发前后一段时间的波形记录下来。拖动触发位置标志线可以得到不同长度的负延迟触发,便于观察毛刺发生之前的波形。
  5、如何观察低压直流电源的噪声?
  答:①、连接探头于通道A1(或A2)与被测点之间。 ②、设定触发源(Trigger Source)为A1或A2(必须与实际被测信号输入的通道一致)。 ③、点击A1或A2按钮,选定耦合方式为AC(交流)耦合。 ④、调节采样速率及垂直灵敏度,直至得到满意的显示。
  6、示波器的获取方式可应用在哪些场合?
  答:观察单次信号请选用实时采样方式,观察高频周期性信号可以选用等效采样方式。希望观察信号的包络避免混淆,请选用峰值检测方式。期望减少所显示信号中的随即噪音,请选用平均采样方式,平均值的次数可以选择。观察低频信号,选择滚动模式方式。希望显示波形接近模拟示波器效果,请选用模拟获取方式。
  7、触发和波形采集的关系如何?
  答:针对不同类型的示波器,示波器不同的捕获方式,触发和波形采集的关系不同。如果是采样示波器或实时示波器的等价时间采样模式,一个波形的采集需要多次触发完成的。针对实时示波器的实时采样模式,触发一次,波形肯定会采集一次,不触发,波形也可能采集,这就是触发的AUTO模式。(有三种触发模式,一种是AUTO,不触发,波形也会刷新,但波形在屏幕上会不稳定,另一种是NORMAL,只有触发才刷新,最后一种是SINGLE,第一次触发捕获波形,以后就不在捕获波形了。)。
  8、RIGOL产品保存波形后的数据能自动生成EXCEL表?
  答:能。Ultrascope软件能够把下载后波形数据自动保存为Excel表的文件格式。RVO虚拟仪器在软件里没有自动生成Excel表的功能,但是我们提供一个转换工具(在RIGOL的官方主页有免费下载,软件名称:DatKit for RVO Series)。利用这款工具可以把RVO保存为&*.dat&文件格式转换为&*.txt&的文本文件格式,修改txt为xls即可将数据保存在Excel表上。
  9、采集信号后,画面中并未出现信号的波形。怎么处理?
  答:可以按照下面步骤检查处理: 1. 检查探头是否正常接在信号连接线上; 2. 检查信号连接线是否正常接在BNC(即通道连接器)上; 3. 检查探头是否与待测物正常连接; 4. 检查待测物是否有讯号产生(可将有讯号产生的通道与有问题的通道接在一起来确定问题所在)。 5. 再重新采集信号一次。
  10、毛刺/脉宽触发的应用场合有那些?
  答:毛刺/脉宽触发一般有两种典型应用场合,一是同步电路行为,如利用它来同步串行信号,或对于干扰非常严重的应用,无法用边沿触发正确同步信号,脉宽触发就是一个选择;另一是用来发现信号中的异常现象,如因干扰或竞争引起的窄毛刺,由于该异常是偶发显现,必须用毛刺触发来捕获(另一种方法是峰值检测方式,但峰值检测的方法有可能受其最大采样率的限制,同时,一般是能看,不能测)。若被测对象的脉冲宽度是50ns,而且该信号没有任何问题,也就是说,没有因干扰,竞争等问题引起的信号畸变或更窄的,用边沿触发就可同步该信号,无需使用毛刺触发。
  11、选择示波器时,一般考虑最多的是带宽。在什么情况下要考虑采样速率?
  答:取决于被测对象,在带宽满足的前提下,希望最小采样间隔(采样率的倒数)能够捕捉到您需要的信号细节。业界有些关于采样速率经验公式,但基本上都是针对示波器带宽得出的,实际应用中,最好不用示波器测相同频率的信号。若您在选型,对正弦波,选择示波器带宽是被测正弦信号频率的3倍,以上,采样率是带宽的4到5倍,实际上是信号的12到15倍,若是其它波形,要保证采样率足以捕获信号细节。若您正在使用示波器,可透过以下方法验证采样率是否够用: 将波形停下来,放大波形,若发现波形有变化(如某些幅值),采样率就不够,否则无碍。也可用点显示来分析,采样率是否够用。
  12、在使用示波器时如何消除毛刺?
  答:如果毛刺是信号本身固有的,而且想用边沿触发同步该信号(如正弦信号),可以用高频抑制触发方式,通常可同步该信号。如果信号本身有毛刺,但想让示波器虑除该毛刺,不显示毛刺,通常很难做到。可以试着使用限制带宽的方法,但不小心可能也会把信号本身虑掉一部分信息。若使用逻辑分析仪器,一般来说,使用状态采集的方法,有些在定时方式下采集到的毛刺,就看不到了。
  13、示波器的各种触发的应用,比如说边沿触发,脉宽触发和视频触发,它们各适合测那种信号?
  答:边沿触发,可设触发电平,上升沿或下降沿。边沿触发也称为基本触发。 脉宽触发,可根据脉冲宽度来确定触发时刻。可以通过设定脉宽条件捕捉异常脉冲。 视频触发,即可在NTSC,PAL或SECAM标准视频信号的场或行上触发。
  14、使用DS5000系列的示波器,怎样将一次性随机出现的信号完整的捕捉并保存下来,然后重显分析?
  答:如果测的所谓随机信号为一个单次信号,那么只要设置与该信号相匹配的垂直和水平刻度,调整好触发电平,使用单次触发等待信号出现即可,然后利用STORAGE的存储类型的波形保存功能即可将捕获的波形存储,需要重显保存的波形,只需将波形调出就能重显分析了。
  15、为什么波形存储已经存储了设置,还要存储设置有什么用?
  答:首先,两者最主要的区别是波形存储占据的存储空间要比设置存储空间要大的多,因此以存储器的空间和成本考虑,就需将两者分别保存。其次,两者的调出上也存在差别。波形调出示波器处于STOP状态,设置调出时不改变保存的运行状态,可方便直接观测波形。
  16:每台示波器都有一个频率范围,比如10M、60M、100M...我手头用的示波器标称为60MHz,是不是可以理解为它最大可以测到60MHz?可我用它测4.1943MHz的方波时都测不到,这是什么原因?
  答:60MHz带宽示波器,并不意味着可以很好地测量60MHz的信号。根据示波器带宽的定义,若输入峰峰值为1V的60MHz正弦波到60MHz带宽示波器上,您在示波器上将看到0.707V的信号(30%幅值测量误差)。如果测试方波,选择示波器的参考标准应是信号上升时间,示波器带宽=0.35/信号上升时间&3,此时您的上升时间测量误差为5.4%左右。
  示波器的探头带宽也很重要,若使用的示波器探头包括其前端附件构成的系统带宽很低,将会使示波器带宽大大下降。如若使用20MHz带宽的探头,则能实现的最大带宽是20MHz,如果在探头前端使用连接导线,将会进一步降低探头性能,但对4MHz左右方波不应有太大影响,因为速度不是很快。
  另外还要看一下示波器使用手册,有的60MHz示波器在1:1设置下,其实际带宽将锐减到6MHz以下,对于4MHz左右的方波,其三次谐波是12MHz,五次谐波是20MHz,若带宽降到6MHz,对信号幅值衰减很大,即使能看到信号也绝对不是方波,而是幅值被衰减了的正弦波。
  当然,测不出信号的原因可能有多种,如探头接触不好(该现象很容易排除),建议用BNC电缆连接一函数发生器,检验该示波器本身有没有问题,探头有没有问题,如有问题,可和厂家直接联系。
手机电池相关文章:
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一基于arduino的环境噪声测试仪需要哪些东西?
元件的组装以及写入单片机的程序
按投票排序
关于分贝计,我很有兴趣分享我们的经历,因为我们曾经用STM32做过一个分贝计。这个问题可能比较偏门,所以总共也才3个回复。不知道有没有看。首先来说说声音的大小的单位db,db这个单位其实可以叫没有单位,因为他其实表示的是一种比例关系,给出计算公式:
SPL=20 x log10[ p(e) / p(ref) ]SPL及我们所说的分贝,p(e)为待测声压,p(ref)为参考声压。也就是说其实我们所说的XXdb都是说的这个声音相对于我们规定的一个声音的大小的比值,并取以10为底的对数再乘以20。之所以采用取对数是因为这个比值可能会非常大。例如正常的人耳能够听到最微弱的声音叫作“听觉阈”,为20微帕斯卡 (μPa) 的压强变化,即20 x 10-6 Pa (百万分之二十 帕斯卡)。而一架太空穿梭机在发出最大马力时能在近距离产生大约 2,000 Pa 或2 x 109μPa的噪音这么大的数值处理起来非常不方便。弱采用db的形式,他们差距将只有160db.所以首先要理解db这种单位带来了形式上的简单,也在直觉上让我们觉得一个噪音计从30db测到90db好像很简单,其实仔细算算便能得出,这个2个声音的声压大小相差了1000倍,所以其实做好一个噪音计并不是很简单的。再来说说实际上的声音大小我们是怎么计算的。我们知道人耳对于不同频率的声音的感受是不一致的,类似于一个带通滤波器,首先只对20-20000HZ之间的频率有反应,造成同样的声压,频率不同,对人听觉的影响也不同。下图即为人耳对于不同频率的反应程度。注意,单位同样是db。
图1此曲线叫做A率曲线,用他测出的分贝值较多dBA,这也是声音用的最多也是最接近人耳的加权方式。所以综上,要测定一个对于人耳感受有参考意义的声音大小,必须对不同频率的声音进行加权。那么问题来了,怎么得到声音的频率?关于这个问题,可能是大部分人都弄不清楚的。一般认为,通过测定麦克风输出信号的有效值,我们就能得到对应的声音大小。但是经过上面的研究我们已经发现,不同声音频率对于我们感受有很大影响,最简单的可以举例超声波和次声波,麦克风可能仍有很大信号,但对于我们人来说,无论多大,可能我们都无法感受到了。若此时显示几十上百db,那对于拿着这个噪声计的人一定是非常莫名其妙的。又扯了这么多,还是这个问题,如何得到声音的频率?这设计到大学电信专业的一门课程,名为:数字信号处理,这门课程对于数学的要求如此之高以至于大部分并没有想去看他的欲望。基本只需要记住几个公式就完事了。但其中有一个我们这需要使用到的数学方法傅里叶变换。那么什么叫做傅里叶变换?傅立叶变换在应用中算是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。他的数学公式是这样的。。
当然这只是装个B。他的数学公式是这样的。。
当然这只是装个B。作为工程狗基本上不用了解这么详细的数学公式,简单的理解傅里叶变换就是,他可以把一个信号分解为无数个由他的谐波信号相加而成。及
a=a1+a2+a3+...+an后面全部是他的谐波信号,及各种频率的波的叠加。所以当实际的声音信号经过傅里叶变换之后,就可以分解为各种不同频率的声音的叠加,也可以说,真实的声音必然是不同频率的正弦波的叠加。而经过傅里叶变换之后,声音也就由时域转换到了频域。此时就可以方便的得出各给频率处声音的强度和大小。便能对声音大小进行加权计算了。由图1可以看出a率加权曲线是连续的,那我们是否需要把每个频率都进行加权?答案是可以,但也没必要。在实际中我们对于频率的选取叫做倍频程。倍频程的中心频率为31.5、63、125、250、500、1K、2K、4K、8K、16KHz,某些要求更精细的条件下可以使用1/3倍频程。一个声音在倍频程上的分量可能是这样,是不是很熟悉,很多音乐软件都有这个显示,以前的dvd播放机或者功放也大多有这个显示。如此一来,通过编程我们实现傅里叶变换,得到频域,取出倍频程上的值,通过加权,最终计算出声音的分贝。然后呢?然后就需要做最后一步,那就是校准。如此一来,通过编程我们实现傅里叶变换,得到频域,取出倍频程上的值,通过加权,最终计算出声音的分贝。然后呢?然后就需要做最后一步,那就是校准。通过与专业的仪器进行校准,对比输出。我的经验是只要完全按照以上理论,硬件上ok,基本上只需要调节声音的放大倍数,就可以和专业的几百块的噪声计符合的相当完美。注:本答案只涉及声音分贝算法知识。其实对于分贝计还有同样重要的信号调理能力,毕竟是1000倍信号大小的差距。==============================================创客这么火,为什么身边没创客?还一个人玩DIY?Arduino入门难?DFRobot淘宝最大代理商,首个Arduino知识分享公众号,更适合GEEK的公众号。理论与实践并重。期待你的关注。
环境噪声测试仪难就难在如何对噪声正确定标和可信测量。噪声的单位是分贝(dB),但分贝本身其实是一个表示比值而不是能量强度。实际上声音强度的真正定义是声压(Pa, 帕斯卡)。分贝用于噪音计量的时候其实隐含了基准点(0dB)等于20微帕(μPa)的信息。所以声音虽然容易采集,但定标没法定——如何把这个声音引发出来,从而确定麦克传感到的电压值,所对应的分贝数到底是多少呢?要知道我们日常生活的环境底噪尚且有20-40dB甚至更多。 另外一个问题就是测量的可信与权威性。如何保证测量设备传感、频响和模数转换的正确?又如何向别人证明这一点?这几乎是个无解的问题。当然可以去记录测量的全程录音,但这也只是个参考。我的建议是干脆不要自己去测量噪声,而是购买一个成品的噪音计。例如胜利的这一款:然后好好做一个精度比较高的模数转换电路,把噪音计的DC类比信号输出直接接上。这样,测量到的电平和噪声之间,就有了经过权威仪器标定的关系,你就可以自由的读取、利用或永久记录噪声的权威测量数据了。——测准电压并不是什么难事。当然如果你坚持自己制作,你也可以用这种成型的噪声计,去调教、标定和检验你用麦克风测量到的声音强度,与噪声分贝数之间的关系。总之做仪器的原则就是:无基准,不做事。千万别忘记。
楼上答得很专业!学生时代做过一个远程噪声监测的项目。用了5块钱的麦克风模块,直接接到单片机的ADC,然后不停地采样并且显示数据。接着用楼上说的标准声级计来标定,得到ADC的输出和声压之间的关系。我记得还挺准的。
不知道题主有没有搞定...最近正好也在弄这个,供题主参考下吧我不是想要做出多精确的仪器,就是想做个东西监测环境的噪音情况,所以是不是严格按照分贝什么的计算要求去测也就没管我的方案是:arduino uno+ 某宝买的麦克风咪头(最好自带放大器的)接线是:麦克风咪头为3线,模拟量输出的,电源和GND分别接arduino的5V和GND,输出线(OUT有的写的是S)接arduino的A0口程序是:setup里只把serial初始话以下,Serial.begin(9600); 噪音检测都放在loop里;通过analogRead(A0),读取A0口的模拟量(0-1024),读取1000次后求方差,方差的数值就可以代表噪音的情况;我读取到的A0口的模拟量数据大概是这样的...(木有示波器什么的东西,导出数据到EXCEL里做的,凑合看看吧)(木有示波器什么的东西,导出数据到EXCEL里做的,凑合看看吧)平均值是533(不同的麦克风咪头模块貌似平均值不一样,另外一个是700左右);半夜啥都不做的时候方差2.5左右,手机APP显示分贝是25db左右;放白噪声音频(较轻)的时候方差6.5左右,手机APP显示分贝是70db左右;放白噪声音频(较响)的时候方差25左右,手机APP显示分贝是100db左右;虽然,计算结果和APP显示的分贝不是线性相关的...不过也能凑合表示以下环境的噪音情况...希望能对题主有帮助
已有帐号?
无法登录?
社交帐号登录查看: 439|回复: 2
ardunio示波器
& && &手上资金不足,也没有太多时间写下复杂的示波器程序,所以只能做最简单的,没有办法。& && && && && && && && && && && && && && && && && && &&&
& && & 别人给了个盒子,用来做了简易的示波器,程序抄袭在ardunio中文社区。
特别说明:
测试本模式是使用本目录下的:
QDtech_Demo_220x176_Serial_ILI9225文件夹QDtech2_2_Demo_220x176_Serial.ino
QDtech_Demo_220x176_Serial_ILI9225_ChineseFont文件夹QDtech2_2_Demo_220x176_Serial.ino
里面的测试源代码直接下载来做测试。
并不是用UTFT库里面的example例子来测试哦,亲们请注意搞清楚。
& && && && && &&&
(2.35 MB, 下载次数: 4)
17:35 上传
点击文件名下载附件
下载积分: 黑币 -5
& && && && && && &这个压缩包可以用,他们网页上的不知道模搞得,用不了,编译就出错。
& && && && && && &下面两个是调试程序,效果和优酷视屏的一样。
(4.62 KB, 下载次数: 1)
17:35 上传
点击文件名下载附件
下载积分: 黑币 -5
& && && && && && &下面是介绍文档
(46.61 KB, 下载次数: 2)
17:35 上传
点击文件名下载附件
下载积分: 黑币 -5
(94.95 KB, 下载次数: 0)
17:35 上传
点击文件名下载附件
下载积分: 黑币 -5
(804.65 KB, 下载次数: 0)
17:35 上传
点击文件名下载附件
下载积分: 黑币 -5
(804.65 KB, 下载次数: 0)
17:35 上传
点击文件名下载附件
下载积分: 黑币 -5
(6.94 KB, 下载次数: 0)
17:35 上传
点击文件名下载附件
下载积分: 黑币 -5
(390.9 KB, 下载次数: 0)
17:35 上传
点击文件名下载附件
下载积分: 黑币 -5
& && && && && && & 这个是实际效果图,据说只能测量7k左右波形,还是有点啃的,而且由于ad是atmeage自带,所以精度也不准确,干扰也很大,只能随便测量下,精度和低功耗还算不上。
& && && &&&
01_60580.jpg (913.31 KB, 下载次数: 22)
17:46 上传
35_83330.jpg (917.23 KB, 下载次数: 28)
17:46 上传
 这是楼主的ardunio示波器的程序,给大家省黑币:
/************************************************************************************/
#include &UTFT.h&
// Declare which fonts we will be using
extern uint8_t SmallFont[];
//UTFT myGLCD(Model,SDA,SCL,CS,RST,RS)
//QD220A is for QDtech 2.2inch SPI LCD Module,Driver IC:ILI9225
UTFT myGLCD(QD220A,A2,A1,3,2,A3);& &// Remember to change the model parameter to suit your display module!
int Key_add = 8;&&//声明按钮引脚
int Key_sub = 9;
int Key_hold = 10;
int Key_a =11;
int x,y; //声明坐标
int i,i1,i2,V_min,V_max,V_mid,t,t0,t1,sta,Key=1,hold=0,yi=88;
float Vpp,Vp_p;
int Y[96]; //声明信号值储存数组
int Buffer[220]; //缓存值储存数组
int buf[220];
//采样
void sample( )&&
{&&for(i = 0;i &220;i++)
& &{&&
& &&&Buffer[i] = analogRead(A4);
& & switch(Key)
& &&&{
& && & case 1:
& && &
& && & case 2:
& && & delayMicroseconds(4);&&
& && &
& && & case 3:
& && & delayMicroseconds(10);
& && &
& && & case 4:
& && & delayMicroseconds(23);
& && &
& && & case 5:
& && & delayMicroseconds(60);
& && &
& && & case 6:
& && & delayMicroseconds(123);
& && &
& && & case 7:
& && & delayMicroseconds(248);
& && &
& && & case 8:
& && & delayMicroseconds(623);
& && &
& && & case 9:
& && & delayMicroseconds(1247);
& && &
& && & default:
& &&&}
& &}
}
void Measure()
{
&&V_max=Buffer[0];
&&V_min=Buffer[0];& && &
&&for(i=0;i&218;i++)
&&{
& & if(Buffer[i]&V_max)
& & V_max=Buffer[i];
& & if(Buffer[i]&V_min)
& & V_min=Buffer[i];
&&}
&&V_mid=(V_max+V_min)/2;
&&Vp_p=(V_max+V_min)/2*0.0049;
&&Vpp=(V_max-V_min)*0.0049;
&&for(i=0;i&218;i++)
&&{
& & if(Buffer[i]&V_mid&&Buffer[i+1]&=V_mid)&&
& & {
& && &i1=i;
& && &
& & }
&&}
&&for(i=i1+1;i&218+i1;i++)
&&{
& & if(Buffer[i]&V_mid&&Buffer[i+1]&=V_mid)&&
& & {
& && &i2=i;
& && &
& & }
&&}
&&t=i2-i1;
&&if(t&0)
&&Freq=10000/t;
&&else
&&Freq=0;
}
void Transform( )&&
{
&&for(i = 0;i & 220;i++)&&
& &Y[i] =&&yi-(Buffer[i]&&4);& &&&
}
//显示
void draw( )&&
{
// Draw crosshairs
&&myGLCD.setColor(0, 0, 255);
&&myGLCD.setBackColor(0, 0, 0);
&&myGLCD.drawLine(109, 15, 109, 160);//画坐标轴
&&myGLCD.drawLine(1, 88, 218, 88);
&&for (int i=9; i&210; i+=10)//画坐标轴刻度
& & myGLCD.drawLine(i, 86, i, 90);
&&for (int i=18; i&160; i+=10)
& & myGLCD.drawLine(107, i, 111, i);
& &&&
& &&&
&&myGLCD.setColor(0, 0, 255);
&&myGLCD.drawRect(0, 14, 219, 161);//画边框(矩形函数)
//画网格
for(x=9;x&210;x+=10)
{
& & for(y=18;y&160;y+=10)
& &myGLCD.drawPixel(x,y);
}
//显示参数
& &int a=1;
& & for (int x=1;x&218; x++)
& &if( a&219 )
& &a++;
& & myGLCD.setColor(0,0,0);
& & myGLCD.drawLine(x,buf[a],x,buf[a+1]);
& & myGLCD.setColor(0,255,255);
& & myGLCD.drawLine(x,Y[x],x,Y[x+1]);& &&&
}
& &a=1;
& & for (int x=1;x&218; x++)
{
& &buf[x]=Y[x];
& &if( a&219 )
& &a++;
& & myGLCD.setColor(0,0,0);
& & myGLCD.drawLine(x,Y[x],x,Y[x+1]);
& & myGLCD.setColor(0,255,255);
& & myGLCD.drawLine(x,Y[a],x,Y[a+1]);
}&&
buf[218]=Y[218];
buf[219]=Y[219];
myGLCD.setColor(255, 255, 255);
myGLCD.printNumF(Vpp,1, 48, 1);
myGLCD.printNumF(Vp_p,1, 117, 163);
switch(Key)
{
& && &case&&1:
& && && & myGLCD.print(&0.02&, 50, 163);
& && && & myGLCD.printNumF(Freq*50,1, 172, 1);
& && &
& && &case&&2:
& && && &myGLCD.print(&0.05&, 50, 163);
& && && &myGLCD.printNumF(Freq*20,1, 172, 1);
& && &
& && &case&&3:
& && && & myGLCD.print(&0.10&, 50, 163);
& && && & myGLCD.printNumF(Freq*10,3, 172, 1);
& && &
& && &case&&4:
& && && & myGLCD.print(&0.20&, 50, 163);
& && && & myGLCD.printNumF(Freq*5,1, 172, 1);
& && &
& && &case&&5:
& && && & myGLCD.print(&0.50&, 50, 163);
& && && & myGLCD.printNumF(Freq*2, 1,172, 1);
& && &
& &&&case&&6:
& && && &myGLCD.print(&1.00&, 50, 163);
& && && &myGLCD.printNumF(Freq, 1,172, 1);
& && &
& &&&case&&7:
& && && &myGLCD.print(&2.00&, 50, 163);
& && && &myGLCD.printNumF(Freq/2,1, 172, 1);
& && &
& &&&case&&8:
& && && &myGLCD.print(&5.00&, 50, 163);
& && && &myGLCD.printNumF(Freq/5, 1,172, 1);
& && &
& && &case&&9:
& && && &myGLCD.print(&10.0&, 50, 163);
& && && &myGLCD.printNumF(Freq/10,1, 172, 1);
& && &
& & default:
& &}
}
//键盘扫描
void Key_scan()
{
& & if(digitalRead(Key_add)==LOW)
& && &&&{
& && && & while(digitalRead(Key_add)==LOW);
& && && & Key++;
& && && & if(Key==10)
& && && & Key=9;
& && &&&}
& && &&&if(digitalRead(Key_sub)==LOW)
& && &&&{
& && && & while(digitalRead(Key_sub)==LOW);
& && && & Key--;
& && && & if(Key==0)
& && && & Key=1;&&
& && &&&}
& && &&&if(digitalRead(Key_hold)==LOW)
& && &&&{
& && && & while(digitalRead(Key_hold)==LOW);
& && && & hold=~
& && && &
& && &&&}
& && && &if(digitalRead(Key_a)==LOW)
& && &&&{
& && && & while(digitalRead(Key_a)==LOW);
& && && & yi=yi+5;
& && && & if(yi&160||yi&74)
& && && & yi=74;
& && &&&}
}
void setup()
{
& &pinMode(Key_add,INPUT);
& &digitalWrite(Key_add,HIGH);
& &pinMode(Key_sub,INPUT);
& &digitalWrite(Key_sub,HIGH);
& &pinMode(Key_hold,INPUT);
& &digitalWrite(Key_hold,HIGH);
& &pinMode(Key_a,INPUT);
& &digitalWrite(Key_a,HIGH);&&
&&
& & // Setup the LCD
&&myGLCD.clrScr();
&&myGLCD.InitLCD();
&&myGLCD.clrScr();
&&myGLCD.setBackColor(0, 0, 0);
&&myGLCD.setFont(SmallFont);
&&myGLCD.setColor(64, 64, 64);
&&myGLCD.fillRect(0, 0, 219, 13);
&&myGLCD.setColor(64, 64, 64);
&&myGLCD.fillRect(0, 162, 219, 175);
&&myGLCD.setColor(255, 255, 0);
&&myGLCD.setBackColor(64, 64, 64);
&&myGLCD.print(&Vpp(V)&, 1, 1);
&&myGLCD.print(&F(HZ)&, 132, 1);
&&myGLCD.print(&MS/div&, 1, 163);
&&myGLCD.print(&V/div&, 141, 163);
&&myGLCD.print(&Vp-p&, 85, 163);
&&myGLCD.setBackColor(0, 0, 0);
myGLCD.setColor(255, 255, 255);
myGLCD.print(&0.82&, 181, 163);
}
void loop()
{
& &sample( );
& &Measure( );
& &Transform( );
& &Key_scan( );
& &if(hold==0)
& & draw();
}
复制代码
 你们盗我图呀。
Powered by}

我要回帖

更多关于 arduino采样频率 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信