arduino——提升ADC采样速度
提升arduino采样速度
普通的 Arduino UNO 的采样速度
基准电压可通过函数 analogReference()
或 ADMUX 寄存器中的 REFS[1:0] 位进行设置。
void setup() {Serial.begin(9600);analogReference(INTERNAL); //调用板载1.1V基准源
}void loop() {int i;float voltage;int sensorValue;unsigned long elsp=millis();for (i=0;i<10000;i++){// read the input on analog pin 0:sensorValue = analogRead(A0);} Serial.println(millis()-elsp);delay(10000);
}
运行结果是 1057 左右,就是说采样10000次用时1.057s,采样频率大约是 9,460.73Hz (次/秒)。
提高采样速度
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endifvoid setup() {Serial.begin(9600);analogReference(INTERNAL); //调用板载1.1V基准源// set prescale to 16
sbi(ADCSRA,ADPS2) ;
cbi(ADCSRA,ADPS1) ;
cbi(ADCSRA,ADPS0) ;
}void loop() {int i;float voltage;int sensorValue;unsigned long elsp=millis();for (i=0;i<10000;i++){// read the input on analog pin 0:sensorValue = analogRead(A0);} Serial.println(millis()-elsp);delay(10000);
}
运行输出结果在 148 左右,就是说采样10000次用时0.148s,采样频率大约是 67,567.56Hz (次/秒)。
区别
对ADC预分频寄存器进行操作了
// 用于设置和清除寄存器位的定义sfr:寄存器,bit:寄存器的某个位
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
原理上来说Arduino 的 ADC 是用一种逐次逼近比较的方法来进行ADC转换的。通俗的说就是内部有一个比较器,每次内部升高一个电压和外部指定的Pin进行比较,根据大于小于来判定外部指定脚上的电压。
哪个参考?
要测量模拟信号,必须有一个电压电平与之进行比较。该电压称为基准电压源。在Arduino的ATMEGA328中,该参考电压也是可以测量的最大电压。电压始终相对于地进行测量。Arduino有三个基准电压选项:连接到数字5 V电源线的AVcc,内部1.1 V和使用外部基准电压的选项。由于输入电压的测量是相对于基准电压进行的,因此基准电压的波动将影响结果。
基准电压可通过函数 analogReference()
或 ADMUX 寄存器中的 REFS[1:0] 位进行设置。
图4:测量半桥电阻时使用5 V基准电压源。
图5:测量外部电压时,使用内部1.1 V或外部基准电压源。
AVcc 基准电压源
AVcc是默认基准电压,仅在测量直接依赖于电源电压的电压时才有用。在这种情况下,必须如图4所示测量半电阻电桥的电压。如果由于某种原因电源电压下降,则两个电阻结上的电压将成比例下降。因为现在基准电压和输入电压成比例变化,ADC结果将保持不变。
内部1.1 V基准电压源
使用内部1.1 V基准电压源精确测量外部电压。1.1 V基准电压源更稳定,几乎不依赖于电源电压或温度。因此,可以进行绝对测量。图5中的示例使用1.1 V基准电压源和10:1电阻分压器来测量0至11 V之间的外部电压。
结束
遍阅人情,始识疏狂之足贵;
备尝世味,方知淡泊之为真。 – 洪应明 《菜根谭》
arduino——提升ADC采样速度相关推荐
- adc采样的值跳动_嵌入式er必知:模数采样知多少(最全总结)
[导读] 生活环境周围信号万万千,对于一个嵌入式er.我们利用技术去了解世界.改变世界.而一个产品要与外界物理环境打交道,一个至关重要的触角就是采样真实模拟世界的信号,翻译成芯片可理解的数字信号,进 ...
- Arduino RP2040 读取ADC采样数据
Arduino RP2040 读取ADC采样数据
- 【 FPGA 】使用状态机设计一个ADC采样控制电路
以ADC0809为例,设计一个ADC采样控制电路,采用有限状态机的方式. 传统的ADC采样控制的方法是用单片机控制,单片机控制ADC采样具有编程简单,控制灵活的优点,但是采样速度慢,CPU控制的低速极 ...
- cubemx 配置多通道ADC进行ADC采样
cubemx 配置多通道ADC进行ADC采样 AD的基础知识 AD很复杂,其实也不复杂,因为我们用的不多. AD:模拟量转换数字量(模拟信号转换数字信号). ADC:模拟量转数字量的转换器. 为什么需 ...
- STM32 ADC采样
目录 1.基础概念 2.原理:ADC采样过程分为四步:采样.保持.量化.编码. 3.采样定理 4.采样保持放大器(SHA) 5.ADC电压值转换 6.ADC轮询采样 1.基础概念 ADC 全称:Ana ...
- NeurIPS 2022 | Stable Diffusion采样速度翻倍!清华提出扩散模型高效求解器
©作者 | 机器之心编辑部 来源 | 机器之心 清华大学计算机系朱军教授带领的 TSAIL 团队提出 DPM-Solver(NeurIPS 2022 Oral,约前 1.7%)和 DPM-Solver ...
- STM32多通道ADC采样获取MCP9701模拟温度传感器温度输出数据
STM32多通道ADC采样获取MCP9701模拟温度传感器温度输出数据 市面上常见的模拟温度传感器有TI的LM35系列,然后使用中并不简便.MCP9701是Microchip公司推出的相似的模拟温度传 ...
- 解读ADC采样芯片(EV10AQ190A)的工作模式(单通道模式)
有了上两篇博文的铺垫,双通道模式以及四通道模式,单通道模式也就很容易理解了,并且我已经想好了下一篇博文要写什么了. 直接看框架图吧: 直接说重点,任意一个输入端口输入的模拟信号同时进入ADC芯片的四个 ...
- 解读ADC采样芯片(EV10AQ190A)的工作模式(四通道模式)
上篇博文讲了EV10AQ190A这种ADC芯片的工作模式:双通道模式 我十分重视这些内容,因为这是我认识硬件工作模式的起点,当然这也只是理论上的内容,实际采样过程中也许会遇到这样那样的问题,那就需要自 ...
最新文章
- html5 Web Workers
- 群友:事务中的异常不也抛出了,为什么没catch到而回滚?
- MySQL 性能优化及常用命令
- Java的3大框架都学习什么呢?
- Zookeeper 安装和配置---学习一
- 三相pmsm矢量控制仿真模型_学术简报|永磁同步电机无速度传感器控制离散化方法研究...
- HDU - 6267 (概论/找规律/递推)
- WebSocket API 学习笔记
- libcrypto yum 安装_CentOS升级OpenSSL至OpenSSL 1.1.0f版本其中有遇到libcrypto.so的问题...
- 西门子real是什么数据类型_西门子PLC数据类型
- 南开大学2019年高等代数考研试题不全
- LeetCode/LintCode 题解丨一周爆刷字符串:独特的摩尔斯编码
- ubuntu插件配置
- jtag和swd区别,该用哪个?
- vue : 无法加载文件 C:\Users\Lenovo\AppData\Roaming\npm\vue.ps1。...无法在当前系统上运行该脚本。
- 定义一个复数类Complex
- [论文笔记]Three-Dimensional Resource Allocation in D2D-Based V2V Communication
- 模电——PN结及其特性2
- 电商企业如何选择ERP管理软件
- 正大国际期货主账户:美债实际利率三季度或重回升势
热门文章
- 马斯克晒出Twitter系统架构图
- 第一行代码Java课后习题学习
- Bootstrap之导航
- IDEA社区版怎么配置Spring boot项目?
- 运放输入偏置电流方向_运放参数的详细解释和分析-part1输入偏置电流和输入-世纪电源网.PDF...
- 人物建模之影视建模与游戏建模的差异,你都知道吗?
- Business Study
- html5js图片滚动,基于滚动的超酷js图片动画特效
- 【干货】安防监控工程选择POE交换机的五大优势总结!
- c语言机票座位预定系统_C++实现机票预订系统