当前位置: 首页 > news >正文

STM32开发(ADC模数转换)

目录

一、ADC相关介绍

二、CPU内的ADC1/4

1、ADC工作原理

2、ADC转换公式

3、采样时机和偏移补偿

三、ADC工作模式

1、ADC内部框图

1)ADC1内部框图

2)ADC4内部框图

2、ADC采样模式

四、标准库操作ADC

五、HAL库操作ADC

1、STM32CudeMX配置工程

1)配置引脚为ADC模式

2)配置ADC模式的各项参数

2、API接口分析

1)HAL_ADC_Start(开启ADC采集转化功能)

2)HAL_ADC_PollForConversion(监视ADC转化是否完成)

3)HAL_ADC_GetValue(获取ADC采集转化的结果)

4)HAL_ADC_Stop(关闭ADC采集转化功能)

5)HAL_ADCEx_Calibration_Start(校准采样时机)

3、示例代码

1)单通道单次转化模式

2)单通道多次转换模式

3)多通道多次转换模式


一、ADC相关介绍

ADC(Analog to Digital converter):模数转换(模拟信号转数字信号)
模拟信号:周期性连续变化的信号
数字信号:由0和1组成的离散信号

二、CPU内的ADC1/4

ADC的采样位数: 本质就是ADC采样的精度,也就是模拟信号转化为数学信号后的位数,位数越多精度越高
数据寄存器:    用于存储转换后的数字量
最大采样速率:  代表每秒采样的次数,取决于CPU的时钟速率

1、ADC工作原理

ADC的转化原理:逐次逼近法
逐次逼近法:二分查找(折半查找)以ADC4为例,ADC4是12位采样,那么就是将Vin分成了2^12份,就是4096份,从这4096份中不断折半查找

2、ADC转换公式

以电压模拟信号->电压数字信号为例,此时使用12位的ADC4待测电压的数字信号 = (2^(ADC的采样位数) / 参考电压) * 待测电压值ADC转化后的数字信号 = 4096 / 3.2v * 2.15v = 1010 1100 0000
解析:4096:代表对应采样位数的ADC转化最大范围(12位ADC为2^12, 14位ADC为2^14)3.2v:参考电压/供电电压2.15v:待测电压

3、采样时机和偏移补偿

当我们使用ADC采集,去采集一些波形信号的时候,
就和上图一样是通过采集多个点来模拟连续信号的。(图中只使用了3个采集点,一般常用5点法,或者更多)但是硬件没办法将采集时机的间隔完全保持一致,那么采集多次后就会向后发生相位偏移,
就会导致无法采集到所需要的信号,因此需要使用硬件所提供的偏移补偿机制也就是校准机制偏移补偿机制:实际上是初始化采集时机,也就是校准注意:校准ADC采样时机,只有采样开始前和采样结束后 可以校准,采样过程中不可以校准初始化

三、ADC工作模式

1、ADC内部框图

1)ADC1内部框图


2)ADC4内部框图


2、ADC采样模式

单通道单次转化模式:只是用ADC模数转换器中的一个独立通道,将输入到这个通道中的模拟信号转换为数字信号,并且只转化一次就结束单通道连续转化模式:只是用ADC模数转换器中的一个独立通道,将输入到这个通道中的模拟信号转换为数字信号,当转化一次结束后,会自动开启下一次转化单通道连续转化模式 = while(1) + 单通道单次转化模式多通道单次转化模式:使用ADC模数转换器中的多个通道,这些通道中都会被输入模拟信号,ADC模数转换器会根据通道的顺序,依次转化成数字信号并且每个通道只转化一次多通道连续转化模式:使用ADC模数转换器中的多个通道,这些通道中都会被输入模拟信号,ADC模数转换器会根据通道的顺序,依次转化成数字信号当所有使用的通道都被转化一次之后,会回到最初始的通道重新开始转化多通道连续转化模式 = while(1) + 多通道单次转化模式间隔转化模式(间隔触发模式):想要实现ADC通道中模拟信号转化为数字信号,需要给对应通道提供一个触发信号(触发源)当这个触发信号触发时,ADC通道进行模数转化如:按键按下,ADC通道进行转化ADC的转化模式:独立模式(单通道模式)、扫描模式(多通道模式)、触发模式

四、标准库操作ADC

五、HAL库操作ADC

1、STM32CudeMX配置工程

1)配置引脚为ADC模式

2)配置ADC模式的各项参数

2、API接口分析

ADC采样和转换的流程1. 初始化ADC采样的采样时机(打开ADC采样的校准模式)2. 开启ADC采样转化功能3. 等待 采样和转化结束,将数字量数据存放到数据寄存器中4. 通过模数转换公式,将数字信号转换为模拟信号注意:校准ADC采样时机,只有采样开始前和采样结束后 可以校准,采样过程中不可以校准初始化

1)HAL_ADC_Start(开启ADC采集转化功能)

HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef *hadc)
功能:HAL库提供的用于开启ADC采样转化功能的函数
参数:hadc:ADC4外设控制器的句柄
返回值:函数执行成功,返回HAL_OK函数执行失败,返回错误码

2)HAL_ADC_PollForConversion(监视ADC转化是否完成)

HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout)
功能:HAL库提供的用于阻塞等待ADC采样+转化完毕,数据被存放到数据寄存器中的函数
参数:hadc:ADC4外设控制器的句柄Timeout:超时检测时间,当前函数的最大阻塞时间
返回值:当ADC采样+转化数据完毕后,表示这个函数执行成功,函数执行成功,返回HAL_OK当ADC采样+转化数据没结束时,此时这个函数处于阻塞状态函数执行失败,返回错误码#define HAL_MAX_DELAY      0xFFFFFFFFU    (最大延时时间)

3)HAL_ADC_GetValue(获取ADC采集转化的结果)

uint32_t HAL_ADC_GetValue(const ADC_HandleTypeDef *hadc)
功能:HAL库提供的用于获取转化完毕的数字信号的函数
参数:hadc:ADC4外设控制器的句柄
返回值:返回成功获取的数字信号

4)HAL_ADC_Stop(关闭ADC采集转化功能)

HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef *hadc)
功能:HAL库提供的用于关闭ADC采样转化功能的函数
参数:hadc:ADC4外设控制器的句柄
返回值: 函数执行成功,返回HAL_OK函数执行失败,返回错误码

5)HAL_ADCEx_Calibration_Start(校准采样时机)

/*** @brief  Perform an ADC automatic self-calibration*         Calibration prerequisite: ADC must be disabled (execute this*         function before HAL_ADC_Start() or after HAL_ADC_Stop() ).* @param  hadc       ADC handle* @param  CalibrationMode       Selection of calibration offset or*         linear calibration offset.*           @arg ADC_CALIB_OFFSET       Channel in mode calibration offset*           @arg ADC_CALIB_OFFSET_LINEARITY Channel in mode linear calibration offset* @param  SingleDiff Selection of single-ended or differential input*         This parameter can be one of the following values:*           @arg @ref ADC_SINGLE_ENDED       Channel in mode input single ended*           @arg @ref ADC_DIFFERENTIAL_ENDED Channel in mode input differential ended* @retval HAL status*/
HAL_StatusTypeDef 
HAL_ADCEx_Calibration_Start
(ADC_HandleTypeDef *hadc, uint32_t CalibrationMode, uint32_t SingleDiff)功能:HAL库提供的用于校准ADC采样的函数(此函数只需要开启一次即可)
参数:hadc:ADC4外设控制器的句柄CalibrationMode:校准模式的设置ADC_CALIB_OFFSET 偏移量校准方式(最基础的)ADC_CALIB_OFFSET_LINEARITY 硬件线性化校准(高级的)线性化校准比偏移量校准更准确,一般使用一些高精度仪器上SingleDiff:输入的模拟信号的选择ADC_SINGLE_ENDED:输入单端信号(一个信号就代表一个电信号)ADC_DIFFERENTIAL_ENDED:输入差分信号(两个信号代表一个电信号)
返回值:函数执行成功,返回HAL_OK函数执行失败,返回错误码

3、示例代码

1)单通道单次转化模式



2)单通道多次转换模式


3)多通道多次转换模式


http://www.dtcms.com/a/400497.html

相关文章:

  • 网站建设的风险预测找网站的方法
  • wordpress子域名站点杭州滨江网站开发
  • 什么网站百度的收录高世界企业排名500强
  • 4-3〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸本地文件包含漏洞-A
  • 以数字域名为网址的网站光谷做网站推广费用
  • 【每日算法】最后一个单词的长度 LeetCode
  • 网站怎么做充值系统美图在线图片编辑器
  • 织梦网站怎样做锚文本学校官网网页设计模板
  • 模电基础:静态工作点稳定的典型电路
  • 潮州网站制作ui做自适应网站
  • 可以做兼职翻译的网站天津住房与城乡建设厅网站首页
  • AIGC实战——BicycleGAN详解与实现:从理论框架到图像翻译核心逻辑
  • todesk设备性能较低,远程过程中出现cpu较高的情况,可以怎么调整?
  • 网站设计与实现wap网站设计方案
  • 企业公司网站 北京wordpress reset
  • 网站建设博客网络推广外包业务怎么样
  • 做网站可以用微软雅黑字体么安卓app用什么开发
  • 四平做网站佳业网络企业网站管理系统标签手册
  • 《C++:STL》详细深入解析string类(一):
  • 标准复正态随机变量的matlab产生
  • 沧州英文模板建站牡丹区住房和城乡建设局网站
  • pip install -r requirements.txt报错ReadTimeoutError: HTTPSConnectionPool
  • 台州网站建设制作WordPress主题和插件不兼容
  • 网站域名到期怎么续费wordpress手机主题下载
  • 中国十大大型门户网站单位做好职工养老保险中断补缴的新闻
  • 在建设厅网站上下载资质标准海诚互联
  • 打工人日报#20250923
  • 潍坊网站开发asp培训信息化设计公司排名
  • 专业做网站机构seo内部优化具体做什么
  • 做网站较好的公司网站开发岗位内容和要求