四、ADC模数转换概述
1、ADC简介
1.1 ADC的作用
采集传感器的数据,测量输入电压,检查电池电量剩余,检测温湿度等。
1.2 ADC的性能指标
量程:能测量的电压范围
分辨率:ADC的分辨率通常以输出二进制的位数表示,位数越多,分辨率越高,一般来说分辨率越高,转化时间越长。常见 8位,10位,12位,16位,24位
转化时间:模拟输入电压在允许的最大变化范围内,从转换开始到活的稳定的数字量输出所需要的时间称为转换时间。
1.3 ADC 特性
①转换速度
②可配置的转换精度:6位,8位,10位,12位
③ 转换电压范围:0 ~ 3.6V VSSA ~ VDD
④ 供电范围:2.4V ~ 3.6V
⑤ 19个转换通道:16个外部通道,3个内部通道
⑥ 采样时间可配置
⑦ADC的结果可以左对齐或右对齐方式存储在数据寄存器中
2、STM32F-ADC时钟
3、STM32F-ADC转化模式
3.1 通道的选择
①19路复用通道
②16个从GPIO引脚引入的模拟输入(ADC_IN0...ADC_IN15)
③3个内部模拟输入(温度传感,内部参考电压,VBAT通道)
ADC可以转换一个单一通道或自动扫描一个序列通道,被转换的通道序列必须再通道选择寄存器
ADC_CHSELR中编程选择:每个模拟输入通道有专门的一位选择位(CHSEL0......CHSEL18)
④ 什么是规则组转换,注入组转换
STM32的ADC控制器有很多通道,所以模块通过内部的模拟多路开关,可以切换到不同的输入通道并进行转换。STM32特别地加入了多种成组转换的模式,可以由程序设置好之后,
对多个模拟通道自动地进行逐个地采样转换。它们可以组织成两组:规则通道组和注入通道组。
例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。
规则通道组:最多可以安排16个通道。规则通道和它的转换顺序在ADC_SQRx寄存器中选择,规则组转换的总数应写入ADC_SQR1寄存器的L[3:0]中;
注入通道组:最多可以安排4个通道。注入组和它的转换顺序在ADC_JSQR寄存器中选择。注入组里转化的总数应写入ADC_JSQR寄存器的L[1:0]中。
在执行规则通道组扫描转换时,如有例外处理则可启用注入通道组的转换。也就是说,注入通道的转换可以打断规则通道的转换,在注入通道被转换完成之后,规则通道才可以继续转换。
当然,需要注意的是:如果ADC_SQRx或ADC_JSQR寄存器在转换期间被更改,当前的转换被清除,一个新的启动脉冲将发送到ADC以转换新选择的组。
可能单从字面上还是不是很了解?我们可以通过图形来更直观地认知:
3.2 常见五种转换模式
注:ADC通知应用每次转换结束(EOC)事件
ADC通知应用每次序列转换结束(EOS)事件
这些标志都是在ADC中断和状态寄存器(ADC_ISR)中
ADC_CFGR1可配置COUNT位
3.3 单次转换模式代码示例
3.3.1 STM32CubeMx如何配置
配置为单次转换模式
开启中断
3.3.2 主程序
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
while (1)
{
/* USER CODE END WHILE */
HAL_ADC_Start_IT(&hadc1);
/* USER CODE BEGIN 3 */
HAL_Delay(1000);
}
/* USER CODE END 3 */
}
3.3.3 中断代码
/* USER CODE BEGIN 0 */
static uint32_t value = 0;
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(hadc);
/* NOTE : This function Should not be modified, when the callback is needed,
the HAL_ADC_ConvCpltCallback could be implemented in the user file
*/
value = HAL_ADC_GetValue(hadc);
printf("value = %d\n",value);
}
/* USER CODE END 0 */
3.4 连续转换模式代码示例
3.4.1 STM32CubeMx如何配置
3.4.2 寄存器
3.4.3 主程序代码 80c51这种简单的CPU基本都是采用这种模式采集AD信号的,就是定时轮询,
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
MX_GPIO_Init();
MX_ADC1_Init();
uint32_t temp = 0;
uint32_t temp2 = 0;
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
HAL_ADC_Start(&hadc1);
while(!(hadc1.Instance->SR & (1 < 2))); /*如果退出表示EOC置位,表示当前通道1转换完成*/
temp = HAL_ADC_GetValue(&hadc1);
printf("channel 1 temp=%d\n",temp);
while(!(hadc1.Instance->SR & (1 < 2))); /*如果退出表示EOC置位,表示当前通道4转换完成*/
temp = HAL_ADC_GetValue(&hadc1);
printf("channel 4 temp2=%d\n",temp2);
/* USER CODE BEGIN 3 */
HAL_Delay(1000);
}
/* USER CODE END 3 */
}
4、STM32F-ADC转化时间
4.1 可编程采样时间(SMP)
T Sampling 可配置: SMP[2:0]@ADC_SMPR
需要和外部电路的输入阻抗匹配,采样时间适用于所有通道
4.2 转化时间
T conversion 取决于转换精度:RES[1:0]
4.3 每个通道总得转换时间等于:
T Sampling + T conversion 精度越低,转化时间越短
5、STM32F-ADC触发方式
5.1 软件触发
软件设置ADC_CR的ADSTART=1时,触发选择有效。
5.2 外部事件触发
外部事件(例如:定时器TRGO,输入引脚)触发,可以设置触发源以及触发极性
6、STM32F-ADC模拟看门狗
可以使用这个功能,做电池的过流过压保护。
四、ADC模数转换概述相关推荐
- STM32学习笔记(七) ADC模数转换测电平(普通和DMA模式)
嵌入式系统在微控制领域(温度,湿度,压力检测,四轴飞行器)中占据着重要地位,这些功能的实现是由微处理器cpu(如stm32)和传感器以及控制器共同完成的,而连接他们,使它们能够互相正常交流的正是本小节 ...
- 51单片机ADC模数转换
51单片机ADC模数转换 ADC介绍 1.ADC简介 ADC(analog to digital converter)也称为模数转换器,是指一个将模拟信号转变为数字信号.单片机在采集 ...
- 51单片机 | ADC模数转换实验
文章目录 一.ADC介绍 1.ADC简介 2.ADC 转换原理 二.XPT2046 芯片介绍 三.硬件设计 四.软件设计 1.ADC 读写函数 2.主函数 五.实验现象 前面我们介绍的都是对数字信 ...
- STM32之ADC模数转换
对于STM32的GPIO来说,只能读取引脚的高低电平,要么低电平,要么高电平,只有两个值,而使用了ADC之后,我们就可以对这个高电平和低电平之间的任意电压进行量化,最终用一个变量来表示,读取这个变量, ...
- 51单片机——ADC模数转换实验
目录 一.功能描述 二.ADC介绍 2.1 逐次逼近型ADC转换原理 2.2 ADC的主要技术指标 三.XPT2046芯片介绍 3.1 XPT2046外部引脚 3.2 XPT2046的命令字 3.3 ...
- 使用Spring Security3的四种方法概述
使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过, ...
- STM32 ADC模数转换
STM32 ADC模数转换 独立模式/双重DMA/三重DMA //使能ADC时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //APB2 ...
- BLE MESH组网(四)安全概述
BLE MESH(四)安全概述 一.安全的重要性 二.蓝牙MESH网络的安全性是强制性的 三.蓝牙MESH网络安全基础 四.关注点和安全密钥分离 五.区域隔离 六.节点移除.密钥刷新和垃圾桶攻击 七. ...
- 30、T5L 迪文屏 C51开发之 ADC模数转换
T5L 迪文屏 C51开发之 ADC模数转换 1.介绍 2.例程功能介绍 3.GUI界面设计 4.C51程序设计 1.介绍 T5L 芯片内部的 ADC 模数转换外设,有一点需要注意的是此 ADC ...
最新文章
- java常量信用_JAVA常量
- Android USB Host与HID通讯
- AcWing 1068. 环形石子合并
- 2022将至,前端程序员们应该一起放个烟花庆祝一下,走起
- 198. 打家劫舍 golang 动态规划 数组越界
- 如何给ppt编辑页码_拒绝千篇一律:Word插入“侧边”页码,让文档别具一格!...
- android 服务器返回302,Android WebView 内处理302重定向不跳转的解决
- Jmeter连接Mysql
- HttpHandler HttpModule入门篇
- 给项目添加spring的测试单元
- HTML示例08---CSS3概述
- jasmine+seajs+angular+karma 单元测试开发
- 解决Macbook网络连接成功但是图标一直显示正在查找网络问题
- 几何基础,多种矩阵的学习,世界坐标到屏幕坐标的两种转换方法,三种绘制方框的原理,hookd3d,hookopengl,骨骼透视,主播的秘密,FPS各种BT功能的原理 和检测对抗原理,UE4引擎,U3D
- 【python】实战:“唱啥”app后台开发
- nginx重启后出现[error] open() “/usr/local/var/run/nginx/nginx.pid” failed
- 【SSH进阶之路】Spring简介,搭建Spring环境——轻量级容器框架(一)
- 寂寞的最初,爱情不过如此
- Python学习 - 列表
- 深拷⻉浅拷⻉的区别?如何实现一个深拷贝?