STM32之模数转换器ADC

目录

1、ADC介绍

1.什么是ADC?

[ADC的全称是Analog-to-Digital Converter,指模拟/数字转换器](#ADC的全称是Analog-to-Digital Converter,指模拟/数字转换器)

2.ADC的性能指标

3.ADC特性

12位分辨率

4.ADC通道

5.ADC转换顺序

6.ADC触发方式

7.ADC转化时间

8.ADC转化模式

9.模拟看门狗

实验:使用ADC读取烟雾传感器的值

CubeMX配置

[​编辑 代码实现](#编辑 代码实现)

效果展示

1、ADC介绍

1.什么是ADC?

ADC的全称是Analog-to-Digital Converter,指模拟/数字转换器

D数字信号,A模拟信号

  • 12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部 信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。
  • 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。
  • ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。

2.ADC的性能指标

  • 量程:能测量的电压范围
  • 分辨率:ADC能分辨的最小模拟量,通常以输出二进制位数表示,比如:8、10、12、16位等;位数越多,分辨率越高,一般来说,分辨率越高,转化时间越长(STM32F103是12位)
  • 转化时间:从转换开始到获得稳定的数字量输出所需的时间称为转换时间

3.ADC特性

12位分辨率

  • 12位分辨率下转化速度可高达1MHZ
  • 供电电压:VSSA:0V,VDDA:2.4V~3.6V
  • ADC输入范围:VREF-<=VIN<=VREF+
  • 采样时间可配置,采样时间越长,转换结果相对越准确,但是转换速度就越慢】
  • ADC的结果可以左对齐或者右对齐的方式存储在16位数据寄存器中(默认右对齐)

4.ADC通道

总共2个ADC(ADC1,ADC2),每个ADC有18个转换通道:16个外部通道、2个内部通道(温度传感器、内部参考电压)。

外部的16个通道在转换时又分为规则通道和注入通道 ,其中规则通道最多有16路,注入通道最多有4路。

规则组:就像正常排队的人

注入组:有特权的人,可以插队的人

5.ADC转换顺序

每个ADC只有一个数据寄存器,16个通道一起共用这个寄存器,所以需要指定规则转换通道的转换顺序。

规则通道中的转换顺序由三个寄存器控制:SQR1、SQR2、SQR3,它们都是32位寄存器,SQR寄存器控制着转换通道的数目和转换顺序,只要在对应的寄存器位SQx中写入相应的通道,这个通道就是第x个转换

和规则通道转换顺序的控制一样,注入通道的转换也是通过注入寄存器来控制,只不过只有一个JSQR寄存器来控制,控制关系如下:

注入序列的转换顺序是从JSQx[4:0] (x=4-JL[1:0])开始。只有当JL=4的时候,注入通道的转换顺序才会按照JSQ1、JSQ2、JSQ3、JSQ4的顺序来执行。

6.ADC触发方式

  • 通过向寄存器ADC-CR2的ADON位写1来开始转换,写0停止转换。
  • 也可以通过外部事件(如定时器)进行转换。

7.ADC转化时间

ADC是挂载在APB2总线(PCLK2)上的,经过分屏器得到ADC时钟(ADCCLK),最高14MHz

转换时间 = 采样时间 +12.5 个周期

12.5个周期是固定的,一般我们设置PCLK2=72,经过ADC预分频器能分频到最大的时钟只能是12M,采样周期设置为1.5个周期,算出最短的转换时间为1.17us。

8.ADC转化模式

扫描模式

  • 关闭扫描模式:只转换ADC_SQRx或ADC_ISQR选中的第一个通道
  • 打开扫描模式:扫描所有被DC_SQRx或ADC_ISQR选中的所有通道

单次转换/连续转换

  • 单次转换:只转换一次
  • 连续转换:转换一次之后,立马进行下一次转换

9.模拟看门狗

  • 如果被ADC转换的模拟电压低于低阀值或高于高阀值,AWD模拟看门狗状态位被设置。阀值位 于ADC_HTR和ADC_LTR寄存器的最低12个有效位中。通过设置ADC_CR1寄存器的AWDIE位 以允许产生相应中断。(简而言之就是如果开启模拟看门狗,那么被ADC转换的模拟电压低于低阀值或高于高阀值,系统就会产生复位)
  • 阀值独立于由ADC_CR2寄存器上的ALIGN位选择的数据对齐模式。比较是在对齐之前完成的
  • 通过配置ADC_CR1寄存器,模拟看门狗可以作用于1个或多个通道

模拟看门狗警戒区

模拟看门狗通道的选择

实验:使用ADC读取烟雾传感器的值

实验内容:通过ADC读取烟雾传感器的值,再通过串口发送给电脑然后在串口助手上显示

CubeMX配置

ADC的配置(其实大多用默认的就可以了)

代码实现

复制代码
#include <stdio.h>
//因为用到串口发送我们先重写printf函数
int fputc(int ch, FILE *f)
{
	unsigned char temp[1]={ch};
	HAL_UART_Transmit(&huart1,temp,1,0xffff);
	return ch;
}

//mian部分
uint32_t count = 0;//记录烟雾传感器的值


  while (1)
  {
		//每隔1秒转换一次
		HAL_Delay(1000);
		//先启动ADC转换
		HAL_ADC_Start(&hadc1);
		//等待ADC转换
		HAL_ADC_PollForConversion(&hadc1,100);
		//获取信号
		count = HAL_ADC_GetValue(&hadc1);
		//发送
        printf("count = %d\r\n",count);//这里发送的是检测到的模拟量个数
		printf("count = %f\r\n",count*(3.3/4060));//电压值
  }

注意重构了printf要记得勾选这个

效果展示

这里可以通过给PA0口接3.3V的电压或者接GND来测试我们得到的数据准不准确

相关推荐
猫猫的小茶馆1 小时前
【ARM】ARM的介绍
c语言·开发语言·arm开发·stm32·单片机·嵌入式硬件·物联网
猫猫的小茶馆1 小时前
【PCB工艺】数模电及射频电路基础
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·pcb工艺
点灯小铭1 小时前
基于单片机的智能药物盒设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
梓德原2 小时前
【基础】详细分析带隙型稳压电路的工作原理
单片机·嵌入式硬件·物联网
国科安芯3 小时前
航天医疗领域AS32S601芯片的性能分析与适配性探讨
大数据·网络·人工智能·单片机·嵌入式硬件·fpga开发·性能优化
小李做物联网3 小时前
【物联网毕业设计】60.1基于单片机物联网嵌入式项目程序开发之图像厨房监测系统
stm32·单片机·嵌入式硬件·物联网
贝塔实验室4 小时前
新手如何使用Altium Designer创建第一张原理图(三)
arm开发·单片机·嵌入式硬件·fpga开发·射频工程·基带工程·嵌入式实时数据库
@good_good_study5 小时前
STM32 ADC多通道采样实验
stm32·单片机·嵌入式硬件
Darken035 小时前
什么是“位带”?;在STM32单片机中有什么作用?
stm32·单片机·嵌入式硬件
清风6666666 小时前
基于单片机的智能豆浆机设计(加热打浆熬煮自动控制与防干溢保护)
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业