stm32f10x系列学习笔记(三)ADC
ADC_SampleTime
用途:在ADC通道配置(ADC_RegularChannelConfig)需要传输的参数。
含义:指两个采样阶段之间的延迟周期数,该参数会影响ADC在采样过程中的性能和准确性。
选取不同参数的异同:
周期越多 | 周期越少 | |
---|---|---|
采样精度和稳定性 | ↑ | ↓ |
速度和响应时间 | ↓ | ↑ |
抗噪声和抗干扰能力 | ↑ | ↓ |
在实际应用中,选择合适的ADC_SampleTime周期数通常需要根据具体的系统需求进行权衡。如果系统对精度和稳定性要求较高,可以考虑增加延迟周期数;而如果需要更快的响应速度,可以适当减少延迟周期数。
问:为什么是1.5个周期,而在代码中是ADC_SampleTime_1Cycles5
答:ADC_SampleTime_1Cycles5,cycles后面的5表示0.5周期,故改值表示1.5周期而不是一个周期
问:ADC采样周期为1.5周期是不是每1.5周期采样一次的意思?
答:不是,1.5周期的意思是对数据采样的动作持续1.5个周期的意思。以stm32f10x为例,1.5个采样周期还要再加上12.5周期作为数据转换,也就是每一次采样的开始间隔1.5(采样周期)+12.5(转换周期)= 14周期。故当ADC的时钟为14Mhz,采样周期为1.5时,每次采样就需要1us。
不同采样周期对应的总转换时间(以14Mhz晶振为例)
采样周期 | 总转换时间 |
---|---|
1.5 | 1us |
7.5 | 1.4us |
13.5 | 1.9us |
28.5 | 2.9us |
41.5 | 3.9us |
55.5 | 4.9us |
71.5 | 6us |
239.5 | 18us |
规则通道和注入通道
规则通道:用于常规的数据采集,通常用于采集主要的输入信号
注入通道:是一种特殊的输入通道,比规则通道有着更高的优先级
给我的感觉,规则通道就像是main的主程序,注入通道就像是中断程序。
异同点
- 同:都是ADC的输入通道配置,用于数据采集。
- 异:
- 规则通道用于常规的、定期的数据采集;注入通道用于临时、优先级更高的事件响应采集。
- 注入通道的优先级通常高于规则通道,可以在规则通道采集过程中,立刻插入采样操作。
- 两者在代码层面上的区别就在于使能的函数名不一样,初始化的结构体是一样的。
- 规则通道共用一个数据寄存器(ADC_DR)暂存数据,每个注入通道有独立的数据寄存器(ADC_DRJx)暂存数据
ADC转换流程
单次转换模式的规则通道
- 转换数据被储存在ADC_DR寄存器中
- EOC(转换结束)标志位被标志
- 如果设置了EOCIE,则产生中断
单次转换模式的注入通道
- 存储特定的ADC_DRJx寄存器中(每一个通道单独分配了一个寄存器)
- 转换结束的标志位为JEOC
- 中断标志位为JEOCIE
循环转换模式
循环转换模式则在这一次转换结束后立马启动下一次转换
模拟看门狗
用途:用于保证adc运行的稳定,是一个检测系统
还没看如何使用
DMA请求
用途:因为规则通道共用一个公共的规则通道数据寄存器(ADC_DR),故需要使用DMA来暂存数据,以防止多规则通道转换数据时,ADC_DR寄存器的暂存数据被覆盖掉
好处:
- 防止ADC_DR寄存器的数据被覆盖掉
- DMA操作无需CPU干预,节省了CPU资源来做其他操作
ADC转换时序
- adon给高电平脉冲,ADC上电
- 等待tSTAB时间,使ADC稳定
- adon给高电平脉冲,ADC开始转换
- 等待转换结束后,EOC位被设置,数据存储在对应的数据寄存器中
- 软件清除EOC位
- 开始下一次ADC转换
ADC的低功耗
见文(还没看):https://www.elecfans.com/d/897318.html
数据对齐
规则通道:
- 左对齐(右边4位,置0)
- 右对齐(左边4位,置0)
注入通道:
左对齐(左边第一位SEXT;右边3位,置0)
右对齐(左边四位,SEXT位)
- SEXT位是拓展的符号位(怎么用还不知道)
- 一般用右对齐吧,两种通道的数据存放都是一样的(除了0和SEXT位)
扫描模式
启用扫描模式则可以按顺序自动对所有的通道进行adc转换(不需要cpu参与)
问:多个规则通道共用一个ADC_DR寄存器,那数据不会出现被覆盖的情况吗?
答:会的,但是可以通过使用DMA请求来避免数据被覆盖的情况,每次EOC后,DMA控制器会把规则通道的转换数据传输到SRAM中,注入通道则还是留在数据通道的暂存寄存器(ADC_JDRx)
校准
流程:
- 软件设置ADC_CR2寄存器的CAL位
- tCAL时间过后,校准结束,CAL位硬件复位
- 校准码被暂存ADC_DR中,然后被用于消除误差
建议:
- 每次上电后进行一次校准
- 校准前,ADC处于关电状态(ADON=‘0’)超过两个ADC时钟周期
注入通道管理
触发注入:
- 触发方式:通过外部触发或设置ADC_CR2寄存器的ADON位
- 转换流程:在规则通道转换期间,外部触发注入产生,则规则通道转换被复位,进入注入通道序列;注入通道转换完成后,回到刚刚被中断的规则通道继续转换
- 注意点:触发事件的间隔必须长于注入序列(防止注入通道没转换完,又产生一次触发注入)
- 优点:实时性高(类中断机制)
自动注入:
感觉有种把注入通道当成规则通道来用的感觉,因为没用到注入通道的核心功能中断
- 触发方式:设置JAUTO位
- 转换流程:规则通道转换完成后,注入通道被自动转换(规则通道和注入通道之间的转换会有1~2个ADC时钟间隔,具体看ADC时钟预分频系数,详见手册)
- 注意点:
- 此模式下禁止外部触发
- 不能同时使用自动注入和间断模式
- 优点:不需要外部触发,使用简单
双ADC模式
双adc模式可以使用两个adc采集有关联的数据(没关联直接用独立模式就行咯)
注意点: 转换配置为外部触发时,一般只设置主adc为外部事件触发,而从adc设置为软件触发
这样的好处是可以的让从adc在需要的时候触发(因为两个adc是有关联的,主adc触发可以联动从adc触发)
同步注入模式 && 同步规则模式
- 来自ADC1的外部触发会同时给ADC2提供同步触发
- 双通道转换结束,产生中断
- 必须等两个ADC的转化都结束了才能进行下一次触发,否则较短序列的ADC转换可能会被重启
快速交叉模式 && 慢速交叉模式
- ADC2先启动,ADC1在 7 or 14 个周期后启动
- 快速交叉模式需要设置CONT位,慢速交叉模式无需设置CONT位,因为它将连续转换所选择的规则通道
- 注意点:
- 应用程序必须确保使用交叉模式时,不能有注入通道的外部触发产生
- 交叉模式只适用于规则通道,且通常为单通道
stm32f10x系列学习笔记(三)ADC的更多相关文章
- MVA Universal Windows Apps系列学习笔记1
昨天晚上看了微软的Build 2015大会第一天第一场演讲,时间还挺长,足足3个小时,不过也挺震撼的.里面提到了windows 10.Microsoft edge浏览器.Azure云平台.Office ...
- 《Machine Learning》系列学习笔记之第一周
<Machine Learning>系列学习笔记 第一周 第一部分 Introduction The definition of machine learning (1)older, in ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- Mastering Web Application Development with AngularJS 读书笔记(三)
第一章笔记 (三) 一.Factories factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能.例如: myMod.factory('notif ...
- Python 学习笔记三
笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...
- 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现
本系列文章由七十一雾央编写,转载请注明出处. 313239 作者:七十一雾央 新浪微博:http://weibo.com/1689160943/profile?rightmod=1&wvr=5 ...
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- 构建高性能WEB站点笔记三
构建高性能WEB站点笔记三 第10章 分布式缓存 10.1数据库的前端缓存区 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经 ...
随机推荐
- C语言:不定长结构体的实现方式
需求 有时候,我们会遇到一些情况:数据前部分相同,但是后部分长度不固定:数据格式相似,只是尾缀的长度不同,例如某些数据包,需要不定长度. 为了能够同时使用上不同长度的数据.可以用以下的方式实现. 方案 ...
- 海思SDK 学习 :001-HI_SDK 的 安装
背景 保密.不管怎么样接触到了海思SDK的开发,作为一项比较常见的技术,我们开展有关地学习. host平台 :Ubuntu 16.04 arm平台 : 3531d arm-gcc :4.9.4 概况 ...
- yb课堂之高并发项目必备利器之分布式缓存和本地缓存 《十九》
什么是缓存? 程序经常要调用的对象存储在内存中,方便其使用时可以快速调用,不必去数据库或者其他持久化设备中查询,主要就是提高性能 DNS.前端缓存.代理服务器缓存Nginx.应用程序缓存(本地缓存.分 ...
- 自动修改网卡 IP
1. 讲个故事 我的一同事需要调试 PLC,需要经常修改电脑 IP 在各个工位的 PLC 间来回连接.于是,每次需要改变 IP 的时候都是手动点开网络管理界面然后再修改.终于有一天,一天改 80 次 ...
- UE5 射线检测排除隐藏的Actor
0x00 Unreal Engine 5(UE5)以其卓越的性能和直观的开发工具在游戏开发领域占据了重要地位.本系列将深入探讨UE5中射线检测的关键概念,着重介绍处理隐藏Actor的技巧. 0x01. ...
- Excel VBA编程常用语句300句
定制模块行为 1. Option Explicit '强制对模块内所有变量进行声明 Option Private Module '标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示 Opt ...
- 利用Elasticsearch实现地理位置、城市搜索服务
最近用到一些简单的地理位置查询接口,基于当前定位获取用户所在位置信息(省市区),然后基于该信息查询当前区域的......提供服务. 然后就自己研究了下GIS,作为一个程序员.自己能不能实现这个功能呢? ...
- Jmeter函数助手32-UUID
UUID函数用于返回一个伪随机类型4通用唯一标识符(UUID).该函数没有参数,直接引用即可
- SpringBoot整合Redis,并处理序列化反序列化问题
1.添加Redis依赖 在项目的pom.xml文件中添加Redis的依赖项.例如,可以使用spring-boot-starter-data-redis依赖项来引入Redis的支持. <depen ...
- 【Hibernate】Re08 加载策略配置
一.关联查询的问题: 使用关联查询,例如简单的一对多关系查询,查出一个部门对象和对应的N个员工对象. 如果一般情况下,我们只是需要部门对象,并不关系关联的员工对象,那么Hibernate关联查询出来的 ...