当前位置:网站首页>【STM32】 ADC模数转换
【STM32】 ADC模数转换
2022-08-02 04:03:00 【丘比特惩罚陆】
ADC简介
ADC:模拟数字转换器,是指将连续变量的模拟信号(高低电平)转换位离散的数字信号(0和1)的器件,AD转换就是模数转换,也可以是整流.顾名思义 ,就是把模拟信号转换为数字信号.
那么模拟量可以是什么?总结如下:模拟量可以是电压、电流等电信号,还可以是压力 温度 湿度 位移、声音等非电信号等等。
ADC采集的要求
输入到A/D转换器中的输入信号必须经过各种传感器将各类的物理量转换为电压。因此ADC要求的进度也要很高,A/D转化输出的电压可以有8位(分辨率:256)、10位(分辨率:1024)、12位(分辨率:4096)、16位(分辨率:65536)等等。
转换步骤
取样 、保持、量化、编码
前两个步骤再取样,保持电路中完成;后两个步骤在ADC中完成。
ADC常用类型:
积分型
并行比较型/串并型
电容阵列逐次比较型及压频 变换型
逐次逼近型
ADC主要特征
- 12位分辨率;
- 转换结束,注入转换结束和发生模拟看门狗事件时产生中断;
- 单次和连续转换模式;
- 通过通道0到通道N的自动扫描模式;
- 自校验;
- 带内嵌数据一致性的数据对齐(左对齐或者右对齐);
- 采样间隔可以按通道分别编程;
- 规则转换和注入转换均有外部触发选项;
- 间断模式;
- 双重模式;
- ADC转换时间:
- ADC供电要求:2.4V到3.6V;
- 规则通道转换期间有DMA请求产生;
对于ADC的时钟我们只能采取72/6=12Mhz的ADC 时钟频率 并且只能是6/8分频 不可以用2/4分频 因为已经超过了ADC的最大时钟晶振
注入通道和规则通道:
注入通道:类似单片机的中断事件 同一个ADC只能选择4个注入通道
注入通道转换完成 JEOC标志会置1
规则通道----类似main函数中while(1)里面的程序事件
同一个ADC可以选择16个规则通道
规则通道数据转换完成之后 EOC标志位会置1
单次转换的好处:按照个人需求随意启动;
单次转换的坏处:不能连续的采集数据;
什么是单次转换模式:
多次转换的好处:ADC启动一次后,就可以一直转换;
多次转换的坏处:消耗的资源过大;
什么是多次转换模式:
扫描模式
扫描模式可以干什么?
扫描所有选中的通道进行
注意:1、建议在每次上电后执行一次校验;
2、启动校验前,ADC必须处于关电状态。
数据对齐:
可编程的通道采样时间:
ADC使用若干个ADC_CLK周期对输入电压采样,采样周期数目可以通过ADC_SMPR1和ADC_SMPR2寄存器中的SMP[2:0]位更改。每个通道可以采用不同的采样时间。
外部触发转换:
转换武以由外部事件触发(例如定时器捕获,EXT线)。如果设置了EXTTRIG控制位,则外部事件就能骜他发转奖。EXTSEL[2:0]和JEXTSEL2:0]控制位允许应用程序选择8个可能的事件中的某一个,可义触发规则和注入组的采样。
代码如下(示例):
#include "adc.h"
void ADC1_Init(void)
{
//配置IO
GPIO_InitTypeDef GPIO_InitStruct;
ADC_InitTypeDef ADC_InitStruct ;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //开启GPIOA的时钟
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3; //引脚1
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz; //输出速度为10MHz
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN; //浮空输入
GPIO_Init(GPIOA,&GPIO_InitStruct); //初始化
//配置ADC
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;//单次转换
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStruct.ADC_Mode = ADC_Mode_Independent ;
ADC_InitStruct.ADC_NbrOfChannel = 1;
ADC_InitStruct.ADC_ScanConvMode = DISABLE;//配置为单通道
ADC_Init(ADC1,&ADC_InitStruct); //ADC初始化
ADC_Cmd(ADC1,ENABLE);//使能ADC上电工作
//启动前进行校准
//复位校准
ADC_ResetCalibration(ADC1);//复位ADC校准器
while(ADC_GetCalibrationStatus(ADC1));//等待校准器为零 说明完成校准
//复位完开始启动 开启ADC进行校准
ADC_StartCalibration(ADC1);//开启ADC校准
while(ADC_GetCalibrationStatus(ADC1));//获取校准状态
}
//获取光照传感器的值
//返回adc采集到光照强度的值
//取值范围 0--4095
u16 Get_Gz_Data(void)
{
//选择规则通道 ADC1的通道3 转换到通道1 通道转换时间为239
ADC_RegularChannelConfig(ADC1,ADC_Channel_3,1,ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//等待数据装换完成 获取规则通道EOC标志
return ADC_GetConversionValue(ADC1);//返回转换结果
}
u16 Get_GZ_data(void)
{
//选择规则通道,ADC1的通道3(IN3),转换通道为1个,通道采集时间为239
ADC_RegularChannelConfig(ADC1,ADC_Channel_3,1,ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1,ENABLE); //软件启动规则通道开始转换
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); //等待数据转换完成,获取规则通道EOC标志位
return ADC_GetConversionValue(ADC1); //返回转换结果
}
边栏推荐
- 开放原子开源峰会落幕,百度超级链牵头成立XuperCore开源工作组
- 三维目标检测之ROS可视化
- 今天突然下雨
- Qt处理传输协议数据时QByteArray添加多字节的使用案例
- 2022华为软件精英挑战赛(初赛)-总结
- 多主复制下处理写冲突(1)-同步与异步冲突检测及避免冲突
- The most authoritative information query steps for SCI journals!
- Jetson Nano 2GB Developer Kit 安装说明
- 吴恩达机器学习系列课程笔记——第十四章:降维(Dimensionality Reduction)
- Arduino框架下STM32F1/F4系列HID模式程序烧录教程
猜你喜欢
UI自动化测试框架搭建——标记性能较差用例
如何解决QByteArray添加quint16双字节时错误?
视觉SLAM十四讲--第13讲 实践:设计SLAM系统(最详细的代码调试运行步骤)
3D object detection dataset
Jetson Nano 2GB Developer Kit 安装说明
吴恩达机器学习系列课程笔记——第八章:神经网络:表述(Neural Networks: Representation)
MapFi paper structure organization
深蓝学院-视觉SLAM十四讲-第七章作业
ADSP21489数据手册表摘要
吴恩达机器学习系列课程笔记——第九章:神经网络的学习(Neural Networks: Learning)
随机推荐
吴恩达机器学习系列课程笔记——第十三章:聚类(Clustering)
redis基础入门
CODESYS指针型变量编程应用(配方)
Your device is corrupt. It cant‘t be trusted and may not work propely.
强化学习(西瓜书第16章)思维导图
【FreeRTOS】12 任务通知——更省资源的同步方式
2022-08-01:以下go语言代码输出什么?A:panic;B:5;C:6;D:编译错误。 package main import ( “fmt“ ) func main() {
PHP5.6安装ssh2扩展用与执行远程命令
nr部分计算
普氏分析法-MATLAB工具箱函数
高等数学(第七版)同济大学 总习题三(后10题) 个人解答
今天突然下雨
吴恩达机器学习系列课程笔记——第八章:神经网络:表述(Neural Networks: Representation)
可视水印的实现——2使用图像加法
Deep blue college - handwritten VIO operations - the first chapter
如何让固定点的监控设备在EasyCVR平台GIS电子地图上显示地理位置?
详解CAN总线:什么是CAN总线?
如何将PDF中的一部分页面另存为新的PDF文件
三维目标检测之OpenPCDet环境配置及demo测试
力扣 215. 数组中的第K个最大元素