NO.22 基于Arduino的数字示波器(完成)-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: ntwhq

NO.22 基于Arduino的数字示波器(完成)

  [复制链接]
发表于 2014-10-29 12:43 | 显示全部楼层
想山一个 我想问的是最高输入电压是多少
发表于 2014-10-31 20:55 | 显示全部楼层
楼主好。我公司的电机上有AB相的编码器,想根据楼主的分享做一个示波器用于检测其好坏。
看到     Buffer[i] = ADCH;      ADMUX=0xe0;       ADCSRA=0xe2; 这样的设定是把模拟量的寄存器左对齐,只读取高字节的8位,以此来提高转换速度吗?要是测AB相的信号,楼主给能点建议吗
发表于 2014-11-2 22:09 | 显示全部楼层
楼主,Freq=8000/t;这个8000怎么来的啊。请指教一下。
 楼主| 发表于 2014-11-3 07:15 | 显示全部楼层
xie336699 发表于 2014-11-2 22:09
楼主,Freq=8000/t;这个8000怎么来的啊。请指教一下。

根据取样时间等确定的。
 楼主| 发表于 2014-11-3 07:18 | 显示全部楼层
xie336699 发表于 2014-10-31 20:55
楼主好。我公司的电机上有AB相的编码器,想根据楼主的分享做一个示波器用于检测其好坏。
看到     Buffer = ...

你好,这里的垂直分辨率为64,只需要6位就行了,所以用8位就够了,AB相的编码器要用双路输入,我没有做过试验。
 楼主| 发表于 2014-11-3 07:20 | 显示全部楼层
1591208937 发表于 2014-10-29 12:43
想山一个 我想问的是最高输入电压是多少

最高输入电压为5V,想加大电压可加入输入衰减电路。
发表于 2014-11-4 19:31 | 显示全部楼层
本帖最后由 xie336699 于 2014-11-4 19:55 编辑

延时单位        周期等级          192次        实测        实测-192次
0                       0.02                    0           112        112
4                      0.05                    768        808        40
10                      0.1                   1920        1964        44
23                     0.2                   4416        4480        64
60                      0.5                  11520        11628        108
123                     1                    23616        23796        180
248                     2                     47616        47936        320
623                     5                    119616        120372        756
1247                   10                   239424        240904        1480
楼主,这是我用下面程序测的时间。
unsigned long a=0,b=0,c=0;
  a=micros();
  for(int i=0;i<192;i++)
  {
    buffer=ADCH;
    delayMicroseconds(4);
  }
  b=micros();
  Serial.println(b-a);
  while(1);

为什么延时单位越大,运行的时间不成比例的增加?
还有一个问题,那个8000/t的8000怎么算,的?
延时单位不同时,t=i2-i1,这个t代表的周期不同,如何套用8000?
请多多指教。我脑容量有限,实在想不出。
发表于 2014-11-5 22:53 | 显示全部楼层
本帖最后由 xie336699 于 2014-11-5 22:54 编辑

楼主,我试验了双路测量。但是有问题如下
void sample( )    //方法一
{  for(i = 0;i < 192;i++)
   {ADMUX=0xe1;      //测通道1
    Buffer = ADCH;    ADMUX=0xe3;      //测通道3
    Buffer2 = ADCH;
    switch(Key)

、、、、
紧跟着切换通道,但读取到的数值是同一个。
void sample( )    //方法一
{  for(i = 0;i < 192;i++)
   {ADMUX=0xe1;      //测通道1
    Buffer = ADCH;    、、、

for(i = 0;i < 192;i++)
   {ADMUX=0xe3;      //测通道3
    Buffer2 = ADCH;   、、、、
方法二虽然没有明显问题了。但是我相测量AB的相位角,就测不出了。因为测量的通道有先后吧。

希望楼主指点一下。


发表于 2014-11-6 13:00 | 显示全部楼层
高手啊!膜拜!
发表于 2014-11-6 20:11 | 显示全部楼层
本帖最后由 xie336699 于 2014-11-6 20:20 编辑

楼主请看图。
我把A相的信号接法 复制 给B相了。
两相之间有干扰。

楼主,我还有救吗

A采集192次,再采集B192次,速度容易不均匀

A采集192次,再采集B192次,速度容易不均匀

只测A相,B几乎是一条直线,但还是有干扰,切上下浮动

只测A相,B几乎是一条直线,但还是有干扰,切上下浮动

测A后测B 192次的方法,其实我把A相拔掉了,只有B相。不懂

测A后测B 192次的方法,其实我把A相拔掉了,只有B相。不懂

测A再测B 的方法,把B相拔掉了,只有A相。就这样了。

测A再测B 的方法,把B相拔掉了,只有A相。就这样了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-30 00:11 , Processed in 0.080032 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表