单片机——ADC采样

这篇具有很好参考价值的文章主要介绍了单片机——ADC采样。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、什么是ADC采样?

        ADC是指将模拟信号转换成数字信号的过程。通俗理解ADC采样就是采集电路中的电压,通过数值的方式表现出来。以STM32F103系列为例,它可以反应0~4095,换句话说,它采集的电压数值上表现为0~4095,也就是12位ADC(2^12)。

2、如何理解采集的数值?

        以STM32F103芯片为例,供电电压是3.3V,它能检测的电压也是0~3.3V。这就好理解了,0~3.3V电压对应的是0~4095数值。通俗理解为把3.3V分成了4096份,采集上来多少份占3.3V的比例。

        采集电压=(采集数值/4095)*3.3V

3、ADC采样具体知识和步骤

3.1、步骤

(1)使能用于ADC检测的引脚对应的GPIO口,使能ADC2通道时钟(ADC1也可以,这款芯片有俩个ADC外设)

(2)时钟分频

(3)初始化GPIO引脚并配置成输入模式

(4)配置ADC的工作模式

(5)使能指定的ADC

(6)开启复位校准

注:ADC的输入时钟不得超过14MHZ,它是由PCLK2经分频产生。

3.2、 ADC知识讲解

3.2.1、通道选择

         每个 ADC有 18 个通道,其中有16个外部通道(不同引脚数的STM32外部通道数可能有所差异),其余两个是内部通道。

adc采集,单片机,c++,stm32

        ADC通道和引脚对应关系如下(STM32F103C8T6为例):

adc采集,单片机,c++,stm32

  3.2.2、单次转换和连续转换

adc采集,单片机,c++,stm32

adc采集,单片机,c++,stm32

  3.2.3、独立模式和多重模式

        独立模式即所有ADC转换器(ADC1、ADC2和ADC3)均独立地工作,互不影响。

        多重模式即多个ADC(如果存在)根据通用寄存器中的设置,按照指定的方式协同工作。

3.2.4、数据对齐

adc采集,单片机,c++,stm32

        比如说AD转换后数字量保存在ADCH,ADCL两个寄存器中
        左对齐就是AD值的最高位就是ADCH的最高位了,ADCL的低位就会有的用不到,读出来为0
        右对齐就是AD值的最低位是ADCL的最低位,而ADCH的高位就会有的用不到,读出来也为0
        左对齐:11111111 11110000
        MSB LSB
        右对齐:00001111 11111111
        MSB LSB

3.2.5、注入组和规则组

adc采集,单片机,c++,stm32

注:

(1)当完成所有注入通道转换,下个触发启动第 1 个注入通道的转换。在上述例子中,第四个
触发重新转换第 1 个注入通道 1
(2)不能同时使用自动注入和间断模式。
(3)必须避免同时为规则和注入组设置间断模式。间断模式只能作用于一组转换。

3.2.6、 ADC校准

adc采集,单片机,c++,stm32

3.3、代码示例

3.3.1、初始化

void Adc_Init(void)
{ 
	u8 i;
	ADC_InitTypeDef ADC_InitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC2, ENABLE ); //使能 ADC2 通道时钟

	RCC_ADCCLKConfig(RCC_PCLK2_Div4); 									//设置 ADC 分频因子 6

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;						//模拟输入
	GPIO_Init(GPIOA, &GPIO_InitStructure);								//初始化 GPIOA
	
	ADC_DeInit(ADC2);

	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;					//ADC 独立模式
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;						//连续多通道模式
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;					//连续转换模式关
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	//转换由软件触发
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;				//ADC 数据右对齐
	ADC_InitStructure.ADC_NbrOfChannel = 1;								//顺序进行规则转换的ADC通道的数目
	ADC_Init(ADC2, &ADC_InitStructure);									//根据指定的参数初始化外设 ADCx
	
	ADC_Cmd(ADC2, ENABLE);												//使能指定的 ADC2
	for(i=0;i<100;i++);

	ADC_ResetCalibration(ADC2); 											//开启复位校准
	while(ADC_GetResetCalibrationStatus(ADC2));							//等待复位校准结束
	ADC_StartCalibration(ADC2);											//开启 AD 校准
	while(ADC_GetCalibrationStatus(ADC2));								//等待校准结束
}

3.3.2、获取ADC数值

u16 Get_Adc1(void)
{
	ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5); //通道1
	ADC_SoftwareStartConvCmd(ADC2, ENABLE);							//使能指定的 ADC2 的软件转换功能
	while(!ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC ));					//等待转换结束
	return ADC_GetConversionValue(ADC2);							//返回最近一次 ADC2 规则组的转换结果
}


u16 Get_Adc2(void)
{
	ADC_RegularChannelConfig(ADC2, ADC_Channel_2, 1, ADC_SampleTime_239Cycles5); //通道2
	ADC_SoftwareStartConvCmd(ADC2, ENABLE);							//使能指定的 ADC2 的软件转换功能
	while(!ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC ));					//等待转换结束
	return ADC_GetConversionValue(ADC2);							//返回最近一次 ADC2 规则组的转换结果
}

3.3.3、主函数

u8 Val;
u8 ADC;
int main(void)
{

   	Adc_Init();                        //ADC初始化
	while (1)
	{	
        ADC = Get_Adc1();                //将1通道检测的数值传给ADC变量
        Val = (ADC*3.3)/4095             //计算得到1通道检测的电压
	}
	
}

注:上述配置下, 多通道采集时,俩个通道采集之间要有一定的间隔。文章来源地址https://www.toymoban.com/news/detail-756003.html

到了这里,关于单片机——ADC采样的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于51单片机的电压采集(ADC0804)

    1.ADC0804简介 工作电压:+5V,即VCC=+5V。 模拟转换电压范围:0~+5V,即0≤Vin≤+5V。 分辨率:8位,即分辨率为1/(2^8)=1/256,转换值介于0~255之间。 转换时间:100us(fCK=640KHz时)。 转换误差:±1LSB。 参考电压:2.5V,即Vref/2=2.5V。 Vin(+)、Vin(-):两个模拟信号输入端,可以接

    2023年04月08日
    浏览(41)
  • 单片机ADC3.3V采集10V电压

    自记: 如下图所示,使用两个电阻分压,阻值可取为2:1,分压后得到信号源1/3的电压,这样可以将0-10V之间变化的信号变成0-3.33V之间变化的信号。如下图所示,为最基本的电阻分压采样原理图。我使用了2K和1K电阻分压。     仿真波形如下图所示。 对上图进行完善,使用

    2024年02月04日
    浏览(43)
  • STC8H8K64U单片机-ADC采集数

    配置单片机的ADC时一定要将IO口配置成高阻输入模式, 以下是单片机引脚对应的ADC通道  

    2024年02月07日
    浏览(42)
  • 山东大学单片机原理与应用实验 3.8 ADC0808/9信号采集实验

    目录 一、实验题目 二、实验要求 三、实验过程及结果分析 四、实验流程图 五、实验源代码 3.8 ADC0808信号采集实验 1、画出实验的流程图 2、编写源程序并进行注释 3、记录实验过程 4、记录程序运行结果截图 利用LCD1602和AD0808实现简单的交流信号过零检测与频率分析。要求信

    2024年02月07日
    浏览(48)
  • K_A37_005 基于STM32等单片机驱动ADS1115 ADC模块 串口与OLED0.96双显示

    其他资料目录 直戳跳转 单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M ADS1115 ADC模块 STC89C52RC驱动ADS1115 ADC模块 串口与OLED0.96双显示 STM32F103C8T6 晶振8M/系统时钟72M ADS1115 ADC模块 STM32F103C8T6驱动ADS1115 ADC模块 串口与OLED0.96双显示 ADS1115 ADC模块 引脚说明 VIN 正极 5V供电

    2024年02月16日
    浏览(58)
  • STC32G单片机内置ADC及应用编程

          STC32G单片机内部集成了一个12位高速ADC转换器,ADC的最高时钟频率为系统频率的1/2。其输入通道多达15个(第15通道为专门测量内部1.19V参考信号源的通道),可分时切换使用。       STC15系列单片机内置ADC模块以电源电源作为ADC参考电压,STC32G的ADC模块则与之不同,它

    2024年02月09日
    浏览(77)
  • 基于STM32的ADC采样及各式滤波实现(HAL库,含VOFA+教程)_数据采集滤波算法stm32(3)

    2.2 VOFA+使用方法 VOFA+ 的数据协议引擎有 3种 : FireWater , JustFloat , RawData 。每种数据协议引擎都有自己特殊的使用效果,读者朋友可以根据自己的实际需要去选择使用。作者这里主要给大家演示一下 FireWater协议 下的VOFA+使用效果和方法。 FireWater协议 是 CSV风格 的字符串流,

    2024年04月23日
    浏览(48)
  • 学习笔记|ADC|NTC原理|测温程序|STC32G单片机视频开发教程(冲哥)|第十九集:ADC应用之NTC

    NTC(Negative Temperature Coefficient)是指随温度上升电阻呈指数关系减小、具有负温度系数的热敏电阻现象和材料。该材料是利用锰、铜、硅、钴、铁、镍、锌等两种或两种以上的金属氧化物进行充分混合、成型、烧结等工艺而成的半导体陶瓷,可制成具有负温度系数(NTC)的热

    2024年02月07日
    浏览(59)
  • 学习笔记|ADC反推电源电压|扫描按键(长按循环触发)|课设级实战练习|STC32G单片机视频开发教程(冲哥)|第十八集:ADC实战

    19.5.4 利用ADC第15通道(内部1.19V参考信号源)测量外部电压或电池电压 注意:这里的1.19V不是ADC 的基准电压ADC-Vref+,而是ADC15通道的固定输入信号源,1.19V STC32G系列ADC的第15通道用于测量内部参考信号源,由于内部参考信号源很稳定,约为1.19V,且不会随芯片的工作电压的改变而变化

    2024年02月07日
    浏览(49)
  • 单片机的ADC

            如何理解ADC。ADC就是将模拟量转换成数字量的过程,就是转换为计算机所能存储的0和1序列,比如将模拟量转换为一个字节,所以这个字节的大小要能反应模拟量的大小,比如一个0-5V的电压测量量(外部输入电压最小0V,最大为5V),将0V对应成0000 0000,将5V对应为1111

    2024年02月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包