ADC:转换过程与参数配置

ADC:连续的模拟信号转变为离散的数字信号的器件
区别:1、数字信号是离散(不连续)的,而模拟信号是连续的;2、数字信号只有“0”和“1”两种状态,而摸拟信号可以是任意数值状态;3、模拟信号是用一系列连续变化的电磁波或电压信号来表示,而数字信号是用一系列断续变化的电压脉冲或光脉冲来表示。
模拟信号:是指信息参数在给定范围内表现为连续的信号。或在一段连续的时间间隔内,其代表信息的特征量可以在任意瞬间呈现为任意数值的信号。其分布于自然界的各个角落,如每天的温度变化,连续的山峰。
数字信号:是指人们抽象出来的时间上不连续的信号,其幅度的取值是离散的,且幅值被限制在有限个数值之内。例如二进制码就是一种数字信号。

1.STM32的ADC是12位逐次逼近型的模拟数字转换器,有多个ADC控制器,有18个通道,可测量16个外部和2个内部信号源,各通道能进行单次、连续、扫描或间断模式采集转换,ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高低阈值。
2.最大转换速率是1MHz,即转换时间是1us(再ADCCLK=14MHz,采样周期是1.5个ADC时钟时),不要让ADC时钟超过14MHzADCCLK需要APB2的分频,采样时间是可以设置的:1.5个周期到239.5个周期不等。总转换时间=采样时间+12.5个周期采样时间建议长一点以获得较高的精确度
3.ADC有两种通道组:规则通道相当于正常、顺序执行的采样与转换程序,如果开始了多个规则通道,那么规则通道和它的转换顺序在ADC_SQRx寄存器中选择(规则通道的执行也是有先后顺序的),规则组转换的总数应写入ADC_SQR1寄存器的L[3:0]中(总共有几个规则通道也要上报记录);注入通道相当于中断,即注入通道的转化可以打断规则通道的转化,再注入通道被转换完成后规则通道才得以继续转换,如果有多个注入通道,注入组和它的转换顺序在ADC_JSQR寄存器中选择,注入组里转化的总数应写入ADC_JSQR寄存器的L[1:0]中。规则通道最多包含16个转换,注入通道最多包含4个通道。
4.单次转换模式是指执行一次转换后,转换结果被存在ADC_DR寄存器中,EOC(转换结束)标志位被置位,如果设置了EOCIE则会产生中断,然后ADC停止,直到下次启动。连续模式则是指一次转换结束后自动开启下一次的转换。扫描模式是指所有通道都转换完成后才产生标志位和中断,通常和DMA结合使用。

一、功能描述

在这里插入图片描述在这里插入图片描述1.供电:供电电压最高是2.4-3.6v,超过容易烧坏ADC通道;ADC通道是被检测信号进入的通道,ADC的每个通道都和对应的IO引脚相连的,配置时也需要配置相应的IO口为输入模式。
参考电压:是测量电压的尺子,参考电压的值就是尺子的最大量程。
当待测电压低于参考电压时!输出数据就是按照正常的计算值!比如如果是12位的ADC,给定一个参考电压Vref,输入电压Vi,它应该输出数据=(Vi/Vref)*4096。在没有参考电压引脚的单片机上,可以把基准电压芯片接入VDDA,但是VDDA和VDD的电压差不能超过0.3V,例如,VDD是3.3V的话,可以给VDDA接入一个3.3V的参考电压芯片或者3.0V的参考电压芯片,但是不能接入2.5V的参考电压芯片,后果就是芯片不能工作。
在这里插入图片描述
在这里插入图片描述
2.引脚:可以看到总共有18个通道,3个ADC控制器。ADC通道是和IO相连的,然后分流到规则通道和注入通道,再对应各自的DR寄存器和中断标志位、中断服务函数。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。注入通道和它们的转换顺序在ADC_JSQR寄存器中选择。

在这里插入图片描述通道转转换后的结果:转换结果存到对应的DR寄存器中,然后对应的转换结束标志位置位,触发中断

在这里插入图片描述3.扫描模式(1)打开扫描开关:ADC_CR1中的SCAN即扫描位 (2)选中的是哪些通道:ADC_SQRx中选择的的规则通道和ADC_JSQRx中选择的注入通道,接下来将对这些所有通道进行转换,每个都是单次,同组的会自动续上进行下一次的转换。(3)在那个地方结束扫描:设置了CONT位则会自动首尾相连永不停止;没设置的话则会转完最后一个通道后停止。(4)是否开启了DMA中断:每个规则通道的中断标志位置位后,DMA控制器把规则通道的转换数据存到SRAM中,注入通道的继续存在ADC_JDRx寄存器中。

在这里插入图片描述4.中断配置:有标志位,有使能,有中断服务函数;ADC1和ADC2用的是同一个中断向量即同一个中断服务函数,ADC3有自己的。

小结一下:通道和IO引脚相连;通道有很多,都有各自的执行顺序,顺序和总数要存到寄存器里;通道都有自己的使能开关、中断标志位和中断服务函数;

二、喜闻乐见的寄存器环节

在这里插入图片描述1.第一步是配置时钟,和时钟相关的寄存器:ADC时钟来自APB2,还需要再进行预分频。只能来自APB2吗?

在这里插入图片描述在这里插入图片描述2.第二步就是配置参数了,首先是控制寄存器CR1:CR1负责的是扫描模式、是否开启规则和注入通道的中断

在这里插入图片描述在这里插入图片描述在这里插入图片描述
2.第二步就是配置参数:这次是CR2:负责数据对齐、单次连续模式、ADC开关位(这个开关位和使能位有啥区别?)、设置外部事件(即监听到外部中断事件后触发ADC中断)来触发ADC中断的发生,例如,软件触发(SWSTART),所以设置这 3 个位为 111,意味着用软件调用ADC转换函数时才会进行ADC转换。定时器的CCx事件:简单地说就是定时器的通道x所产生的各种事件,可能是溢出,可能是比较成功,可能是更新等等。也就是某个定时器产生某种中断时才会进行ADC转换

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
2.第二步是配置参数:这次是SMPR:18个通道对应到0-17号,单独就是专门设置采样时间的

在这里插入图片描述在这里插入图片描述
3.各个通道的执行顺序的配置SQR和JSQR每个通道都能分到一个顺序编号,按照这个顺序执行每个通道的转换

在这里插入图片描述在这里插入图片描述
4.平平无奇的记录转换值的寄存器DR和JDR:转换得到的是12位的数据,但存储的寄存器DR是16位的,因此才有了左对齐和右对齐。
在这里插入图片描述5.最后一个大家基本都会有的状态寄存器SR:通道转换开始的标志位,通道转换结束的标志位

小结(1)时钟分频;(2)基本参数配置CR:对齐、单次、开关位、触发事件设置;(3)采样时间配置SMPR;(4)通道的执行顺序的配置SQR和JSQR;(5)转换值的存储;转换开始和结束的标志。

四、一般步骤

在这里插入图片描述多了一个校准功能,都是固定步骤。

程序

void  Adc_Init(void) //以ADC1的规则通道1为例,对应PA1引脚
{
  ADC_InitTypeDef ADC_InitStructure; 
	GPIO_InitTypeDef GPIO_InitStructure; //常规结构体
//第一步:时钟配置
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1	, ENABLE );
	//ADC挂在APB2上,使用APB2时钟;通道用1号,对应PA1引脚,因此需要使能IO的时钟,PA挂靠在APB2上
  RCC_ADCCLKConfig(RCC_PCLK2_Div6); //分频系数的选择6分频 
//第二步:IO配置
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		//必须是输入模式
	GPIO_Init(GPIOA, &GPIO_InitStructure);	
//第三步:ADC复位
  ADC_DeInit(ADC1);  //复位
//第四步:ADC基本参数配置:独立、单通道、单次、软件触发、对齐、顺序转换个数
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;	//独立模式
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;	//禁止扫描模式
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;	//禁止连续转换模式:因此就是单通道单次转换模式了
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	//ADC转换的触发是通过软件调用进行ADC转换
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	//右对齐
	ADC_InitStructure.ADC_NbrOfChannel = 1;	//顺序进行规则转换的ADC通道的个数:这里只使用了一个ADC通道作为例子讲,因此是1
	ADC_Init(ADC1, &ADC_InitStructure);	//初始化ADC的寄存器  
	ADC_Cmd(ADC1, ENABLE);	//使能ADC
//第五步:校准
  ADC_ResetCalibration(ADC1);	//使能复位位就进行了复位  
	while(ADC_GetResetCalibrationStatus(ADC1));	//等待复位校准结束,根据标志位判断是否完成了复位
	ADC_StartCalibration(ADC1);	 //开启AD校准,进行了校准
	while(ADC_GetCalibrationStatus(ADC1));	 //根据标志位判断是否完成了校准
}

//获取ADC的值:软件调用才会开启ADC转换
u16 Get_Adc(u8 ch)   
{
  //软件调用时,在这里才开始设置采样时间,其实在上面的ADC初始化里也能设置的;采样时间影响转换精度!
	ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );	//采样时间是239.5个ADCCLK时钟周期		    
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);	//使能软件转换--指自己主动调用ADC函数Get_Adc(u8 ch) 才能进行转化	 
	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
	return ADC_GetConversionValue(ADC1);	//打开上面的软件转换标志位后就允许进行AD转换了,这里调用转换函数得到转换值,存到16位寄存器里

//这里没有用到转换中断、外部中断触发ADC转换、注入通道、扫描与DMA中断之类的,属于是最简单的例子
}

main.c中:
while(1)
	{
		adcx=Get_Adc(ADC_Channel_1);  //获取ADC的转换值
		LCD_ShowxNum(156,130,adcx,4,16,0);//在LCD屏幕上显示
		temp=(float)adcx*(3.3/4096);
		adcx=temp;
		LCD_ShowxNum(156,150,adcx,1,16,0);//显示整数部分
		temp-=adcx;
		temp*=1000;
		LCD_ShowxNum(172,150,temp,3,16,0X80);//显示小数部分
		LED0=!LED0;
		delay_ms(250);	
	}
  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现ADC转换,需要在CubeMX中配置引脚、ADC通道、时钟和采样时间等参数,具体步骤如下: 1. 在Pinout选项卡中配置ADC转换所需的引脚。将需要采集的模拟量信号输入到对应的引脚上。 2. 在Configuration选项卡中配置ADC通道和采样时间等参数。可以选择单次或连续采样,选择采样分辨率,设置采样时间等参数。 3. 配置ADC时钟。在RCC选项卡中,选择系统时钟源和分频系数等参数,以确保ADC模块获得正确的时钟信号。 4. 生成代码并下载到开发板上,即可开始进行ADC转换操作。 注意,不同的MCU型号和ADC模块可能存在差异,需要根据具体情况进行配置。 ### 回答2: 在使用CubeMX配置ADC转换时,需要进行以下配置: 1. 时钟配置:首先需要配置ADC模块所需的时钟,包括外部晶振或内部RC振荡器。这可以通过选择适当的时钟频率和时钟源来实现。 2. 引脚配置:将需要使用的ADC通道引脚与ADC模块连接起来。可以在CubeMX的引脚功能视图中选择相应的引脚,并将其配置ADC模式。 3. ADC模块配置:在ADC配置选项中,可以设置采样分辨率、采样周期和转换模式等参数。通过这些参数的选择,可以满足应用的需求。另外,还可以配置触发源、DMA传输等功能。 4. 中断配置(可选):如果需要通过中断处理程序处理ADC转换完成事件,可以在ADC配置选项中启用中断,并设置中断优先级。 5. 代码生成:配置完成后,通过点击CubeMX界面下方的“生成代码”按钮,可以自动生成相应的初始化和配置代码。这些代码可以直接集成到用户的应用程序中,以实现ADC转换功能。 总结起来,使用CubeMX实现ADC转换需要配置时钟、引脚、ADC模块及其参数,并生成相应的初始化和配置代码。这样,就可以方便地进行ADC转换配置和使用。 ### 回答3: 在使用Cubemx实现ADC转换过程中,需要进行一些配置。 首先,需要配置ADC的引脚和时钟源。通过Cubemx工具,可以选择要使用的ADC引脚,并为其配置相应的时钟源。这些配置将确保ADC可以正常工作并获取准确的模拟信号。 接下来,需要配置ADC转换模式。可以选择单次转换模式或连续转换模式。单次转换模式是在触发一次转换后立即停止,而连续转换模式会持续进行转换直到手动停止。 然后,需要配置ADC的采样速率和分辨率。通过配置采样速率,可以控制ADC在一定时间内采样的次数,从而影响转换的准确性和响应速度。分辨率则决定了ADC可以将模拟输入转换为多少个数字值。 此外,还需要配置ADC的参考电压。参考电压是转换过程中使用的基准电压,它可以是内部参考电压或外部参考电压。正确配置参考电压可以确保ADC输出符合预期。 最后,在进行ADC转换前,还需配置DMA(Direct Memory Access)和中断功能。DMA可以实现数据的直接传输,减轻CPU负担,而中断功能可以在转换完成后及时通知CPU进行进一步的处理。 综上所述,通过Cubemx实现ADC转换时,需要配置ADC引脚、时钟源、转换模式、采样速率、分辨率、参考电压,以及DMA和中断功能。这些配置将确保ADC可以正常工作并获取准确的模拟信号,为后续的数据处理和分析提供基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值