10838|9

189

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

使用BBB的ADC [复制链接]

本帖最后由 wytalfred 于 2014-3-8 21:49 编辑

Beaglebone Black的处理器芯片AM3359上的8个ADC脚同时也是触摸屏控制器(TSC),我们知道一般的电阻屏分为4线、5线或8线的,除去触摸屏以外的ADC接口可以作为普通的ADC使用。(我们在查询TI公司的4000页AM33xx手册时需要到Touchscreen Controller这一章去找有关ADC的内容。)
特别注意:Beaglebone Black的ADC管脚最大只能输入1.8V!!!
基本使用方法:

因为这个路径太常用,我们先把它存成环境变量
  1. export SLOTS=/sys/devices/bone_capemgr.8/slots
复制代码
加载Beaglebone自带的device tree文件
  1. echo BB-ADC > $SLOTS  
复制代码
这时/sys/bus/iio/devices目录下会出现一个iio:device0目录(原本是没有的)。里面有如下内容
  1. -r--r--r-- 1 root root 4096 Jan  1 01:25 dev  
  2. -rw-r--r-- 1 root root 4096 Jan  1 01:25 in_voltage0_raw  
  3. -rw-r--r-- 1 root root 4096 Jan  1 01:25 in_voltage1_raw  
  4. -rw-r--r-- 1 root root 4096 Jan  1 01:25 in_voltage2_raw  
  5. -rw-r--r-- 1 root root 4096 Jan  1 01:25 in_voltage3_raw  
  6. -rw-r--r-- 1 root root 4096 Jan  1 01:25 in_voltage4_raw  
  7. -rw-r--r-- 1 root root 4096 Jan  1 01:25 in_voltage5_raw  
  8. -rw-r--r-- 1 root root 4096 Jan  1 01:25 in_voltage6_raw  
  9. -rw-r--r-- 1 root root 4096 Jan  1 01:25 in_voltage7_raw  
  10. -r--r--r-- 1 root root 4096 Jan  1 01:25 name  
  11. drwxr-xr-x 2 root root    0 Jan  1 01:25 power  
  12. lrwxrwxrwx 1 root root    0 Jan  1 01:25 subsystem -> ../../../../../bus/iio  
  13. -rw-r--r-- 1 root root 4096 Jan  1 01:19 uevent  
复制代码
里面的in_voltage*_raw文件便是8个ADC引脚的值。可以用cat命令查看其数值
  1. cat in_voltage1_raw
  2. 2965
复制代码
beaglebone的ADC是12位的,所以这个数值是0到4095之间的某个数,对应着0到1.8V电压。另外beaglebone black只有0到6这7个ADC是可被外部使用的,第7个可能是连到板子上的某处了。这7个管脚的位置如图所示

如果想在c语言程序中使用ADC值,目前的办法是用read()函数读取文件中的数值。经过不严谨的测试,发现系统刷新in_voltage*_raw文件的速度还是挺快的。我如果每毫秒采一次样,输出数值是在一个小范围内波动的,而且相邻两次的数值很少有相同的。但如果我把采样速度增大10倍,每0.1毫秒采样一次,就会出现连续重复的数值。可见它的刷新速度是毫秒级的,这应当够一般使用了。

源代码:
  1. #include <stdlib.h>  
  2. #include <stdio.h>  
  3. #include <string.h>  
  4. #include <fcntl.h> //define O_WRONLY and O_RDONLY  
  5.   
  6.   
  7. #define SYSFS_ADC_DIR "/sys/bus/iio/devices/iio:device0/in_voltage3_raw"  
  8. #define MAX_BUF 64  
  9.   
  10.   
  11. void main()  
  12. {  
  13.     int fd, len;  
  14.     char buf[MAX_BUF];  
  15.     int ch[5];  
  16.     int i;  
  17.   
  18.   
  19.     for(i=0;i<50;i++)  
  20.     {  
  21.         snprintf(buf,sizeof(buf),SYSFS_ADC_DIR);  
  22.         fd = open(buf, O_RDONLY);  
  23.         read(fd,ch,4);  
  24.         printf("%s\n",ch);  
  25.         close(fd);  
  26.         usleep(1000);//pause for 1 ms  
  27.     }  
  28. }  
复制代码
这里只是读取了in_voltage*_raw文件中的字符串并输出,没有转变成整型数字,实际使用时肯定还得做转化。

(转自我自己的博客http://blog.csdn.net/wyt2013




查看本帖全部内容,请登录或者注册

最新回复

我现在使用到ADC要实现一个音频采集,但是我有三个文件保存一个是左右声道一个是数据一个时钟。请问大师们,怎么将来将音频(音频数字信号)保存为一个文件可以音频播放的   详情 回复 发表于 2016-8-3 19:38

赞赏

1

查看全部赞赏

点赞 关注
个人签名更多BBB经验分享,请访问我的博客http://blog.csdn.net/wyt2013
 

回复
举报

1945

帖子

32

TA的资源

纯净的硅(高级)

沙发
 
谢谢分享,很不错的教程!!
 
 

回复

6066

帖子

92

TA的资源

裸片初长成(初级)

板凳
 
赞一个!
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

4
 
我在用ADC检测波形频率,我不断的减少扫描的时间,似乎最小的扫描时间不之毫秒级,楼主知不知道更加可靠的方法来确定BBB ADC的最小扫描时间?

点评

我觉得应该是系统调度的问题。linux本来实时性就不够,多任务时肯定ADC会受影响,实际表现出来的最小采样时间可能也不是一个定值。不过按AM335X芯片手册写的,ADC采样的最小时间是15个ADC采样周期,也就是最高能按1.  详情 回复 发表于 2014-5-3 21:10
 
 
 

回复

189

帖子

0

TA的资源

纯净的硅(初级)

5
 
Dark_Guan 发表于 2014-5-2 00:11
我在用ADC检测波形频率,我不断的减少扫描的时间,似乎最小的扫描时间不之毫秒级,楼主知不知道更加可靠的 ...

我觉得应该是系统调度的问题。linux本来实时性就不够,多任务时肯定ADC会受影响,实际表现出来的最小采样时间可能也不是一个定值。不过按AM335X芯片手册写的,ADC采样的最小时间是15个ADC采样周期,也就是最高能按1.6MHz的频率采样。

点评

找到了,最大是100KHZ  详情 回复 发表于 2014-5-6 18:34
个人签名更多BBB经验分享,请访问我的博客http://blog.csdn.net/wyt2013
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

6
 
wytalfred 发表于 2014-5-3 21:10
我觉得应该是系统调度的问题。linux本来实时性就不够,多任务时肯定ADC会受影响,实际表现出来的最小采样 ...



找到了,最大是100KHZ

QQ截图20140506183401.png (28.72 KB, 下载次数: 0)

QQ截图20140506183401.png
 
 
 

回复

1243

帖子

19

TA的资源

五彩晶圆(初级)

7
 
我添加的PS摇杆就是两路ADC采样,老大的帖子很有用!学习了!!

点评

我还没搞定普通ADC和触摸屏同时使用,不知道你会不会用到这个?用到的话研究出来了记得告诉我一声哈~  详情 回复 发表于 2014-5-10 00:00
个人签名
 
 
 

回复

189

帖子

0

TA的资源

纯净的硅(初级)

8
 
anananjjj 发表于 2014-5-9 15:23
我添加的PS摇杆就是两路ADC采样,老大的帖子很有用!学习了!!

我还没搞定普通ADC和触摸屏同时使用,不知道你会不会用到这个?用到的话研究出来了记得告诉我一声哈~
个人签名更多BBB经验分享,请访问我的博客http://blog.csdn.net/wyt2013
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

9
 
我按照上述步骤操作后,生成的iio:device0目录中没有ADC接口 in_voltagex_raw显示。为什么呢?
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

10
 
我现在使用到ADC要实现一个音频采集,但是我有三个文件保存一个是左右声道一个是数据一个时钟。请问大师们,怎么将来将音频(音频数字信号)保存为一个文件可以音频播放的
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
中星联华&ADI明日直播
直播主题:大咖面对面,轻松玩转高速ADC性能测试
直播时间:3月25日(周二)14:00
活动奖励:京东卡、双肩包

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 15

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表