中科芯CKS32F107xx系列微控制器ADC应用指南
独立模式单通道采集
CKS32F107xx系列微控制器产品提供2个12位的模拟/数字转换器(ADC),每个ADC共用多达16个外部通道,各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。
A/D转换器的供电和参考电压
为了提高转换的精确度,ADC使用一个独立的电源供电,其电源引脚为VDDA和VSSA,从而过滤和屏蔽来自印刷电路板上的毛刺干扰。在进行硬件设计的时候,VDDA和VSSA必须分别连接到VDD和VSS。对于100脚封装的,为了确保输入为低压时获得更好精度,用户可以连接一个独立的外部参考电压ADC到VREF+和VREF-脚上,其中,VREF-引脚必须连接到VSSA,而VREF+的电压范围为2.4V~VDDA。对于64引脚封装的,没有VREF+和VREF-引脚,他们在芯片内部与ADC的电源(VDDA)和地(VSSA)相联。
ADC转换时间
ADC输入时钟ADC_CLK由PCLK2 经过分频产生,最大是14M,分频因子由RCC时钟配置寄存器RCC_CFGR的位15:14 ADCPRE[1:0]设置,可以是2/4/6/8分频,注意这里没有1分频。一般我们设置PCLK2=HCLK=72M。ADC使用若干个ADC_CLK周期对输入电压采样,采样周期数目可以通过ADC_SMPR1和 ADC_SMPR2寄存器中的SMP[2:0]位更改。每个通道可以分别用不同的时间采样。 总转换时间如下计算:TCONV=采样时间+12.5个周期。例如当ADCCLK=14MHz,采样时间为1.5周期,则总的转换时间TCONV=1.5+12.5=14周期=1μs。
ADC数据寄存器
ADC转换完成后的数据输出寄存器。根据转换组的不同,规则组的完成转换的数据输出到ADC_DR寄存器,注入组的完成转换的数据输出到ADC_JDRx寄存器。假如是使用双重模式,规则组的数据也是存放在ADC_DR寄存器。ADC规则组数据寄存器ADC_DR是一个32位的寄存器,独立模式时只使用到该寄存器低16位保存ADC1/2的规则转换数据。在双ADC模式下,高16位用于保存ADC2转换的数据,低16位用于保存ADC1转换的数据。因为ADC的精度是12位的,ADC_DR寄存器无论高16位还是低16位,存放数据的位宽都是16 位的,所以允许选择数据对齐方式。由ADC_CR2寄存器的ALIGN位设置数据对齐方式,可选择:右对齐或者左对齐。如果使用多通道转换,那么这些通道的数据 也会存放在ADC_DR里面,按照规则组的顺序,上一个通道转换的数据,会被下一个通道转换的数据覆盖掉,所以当通道转换完成后要及时把数据取走。比较常用的方法是使用DMA模式。当规则组的通道转换结束时,就会产生DMA请求,这样就可以及时把转换的数据搬运到用户指定的目的地址存放。注意:只有ADC1可以产生DAM请求,而由ADC2转换的数据可以通过双ADC模式,利用ADC1的 DMA功能传输。
ADC中断
ADC中断可分为三种:规则组转换结束中断、注入组转换结束中断、设置了模拟看门狗状态位中断。它们都有独立的中断使能位,分别由ADC_CR 寄存器的EOCIE、JEOCIE、AWDIE位设置,对应的标志位分别是EOC、JEOC、AWD。
ADC初始化结构体详解
ADC_InitTypeDef结构体用于设置ADC的工作参数,并由标准库函数ADC_Init()调用这些设定参数进入设置外设相应的寄存器,达到配置外设工作环境的目的。其具体的定义如下:
typedef struct
{
uint32_t ADC_Mode;
FunctionalState ADC_ScanConvMode;
FunctionalState ADC_ContinuousConvMode;
uint32_t ADC_ExternalTrigConv;
uint32_t ADC_DataAlign;
uint8_t ADC_NbrOfChannel;
}ADC_InitTypeDef;
ADC_Mode:配置ADC的模式,当使用一个ADC时是独立模式,使用两个ADC 时是双模式,在双模式下还有很多细分模式可选,具体配置ADC_CR1:DUALMOD位。
ScanConvMode:可选参数为ENABLE和DISABLE,配置是否使用扫描。如果是单通道AD转换使用DISABLE,如果是多通道AD转换使用ENABLE,具体配置 ADC_CR1:SCAN位。
ADC_ContinuousConvMode:可选参数为 ENABLE 和 DISABLE,配置是启动自动连续转换还是单次转换。使用ENABLE配置为使能自动连续转换;使用 DISABLE 配置为单次转换,转换一次后停止需要手动控制才重新启动转换,具体配置 ADC_CR2:CON位。
ADC_ExternalTrigConv:外部触发选择,ADC有很多外部触发条件,可根据项目需求配置触发来源。实际上,我们一般使用软件自动触发。
ADC_DataAlign:转换结果数据对齐模式,可选右对齐ADC_DataAlign_Right 或者左对齐ADC_DataAlign_Left。
ADC_NbrOfChannel:AD转换通道数目,根据实际设置即可。具体的通道数和通道的转换顺序是配置规则序列或注入序列寄存器。
CKS32F103XX ADC单通道采集实验
本实验使用规则组单通道的单次转换模式,并且通过软件触发,即由ADC_CR2寄存器的SWSTART位启动。下面讲解其详细设置步骤:
1) 开启PA口时钟和ADC1时钟,设置PA1为模拟输入。
CKS32F107xx的ADC通道1在PA1上,所以,我们先要使能PORTA的时钟和ADC1时钟,然后设置PA1为模拟输入。使能GPIOA和ADC时钟用RCC_APB2PeriphClockCmd函数,设置 PA1的输入方式,使用GPIO_Init函数即可。
2) 复位 ADC1,同时设置 ADC1 分频因子。
开启ADC1时钟之后,我们要复位ADC1,将ADC1的全部寄存器重设为缺省值之后我们 就可以通过RCC_CFGR设置ADC1的分频因子。分频因子要确保ADC1的时钟(ADCCLK)不要超过14Mhz。这个我们设置分频因子位6,时钟为72/6=12MHz,库函数的实现方法是:
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
ADC 时钟复位的方法是:
ADC_DeInit(ADC1);
3) 初始化ADC1参数,设置ADC1的工作模式以及规则序列的相关信息。
在设置完分频因子之后,我们就可以开始 ADC1 的模式配置了,设置单次转换模式、触发方式选择、数据对齐方式等都在这一步实现。同时,我们还要设置ADC1规则序列的相关信息,我们这里只有一个通道,并且是单次转换的,所以设置规则序列中通道数为1。这些在库函数中是通过函数ADC_Init实现的。
4) 使能ADC并校准。
在设置完了以上信息后,我们就使能AD转换器,执行复位校准和AD校准,注意这两步 是必须的!不校准将导致结果很不准确。 使能指定ADC的方法是:
ADC_Cmd(ADC1, ENABLE);
执行复位校准的方法是:
ADC_ResetCalibration(ADC1);
执行ADC校准的方法是:
ADC_StartCalibration(ADC1);
每次进行校准之后要等待校准结束。这里是通过获取校准状态来判断是否校准是否结束。等待复位校准结束函数为:
while(ADC_GetResetCalibrationStatus(ADC1));
等待AD校准结束函数为:
while(ADC_GetCalibrationStatus(ADC1));
5)读取ADC值。
在上面的校准完成之后,ADC就算准备好了。接下来我们要做的就是设置规则序列1里面的通道,采样顺序,以及通道的采样周期,然后启动ADC转换。在转换结束后,读取ADC 转 换结果值就是了。我们这里是规则序列中的第1个转换,同时采样周期为239.5,所以设置为:
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );
软件开启ADC转换的方法是:
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
开启转换之后,就可以获取转换ADC转换结果数据,方法是:
ADC_GetConversionValue(ADC1);
同时在AD转换中,我们还要根据状态寄存器的标志位来获取AD转换的各个状态信息。库函数获取AD转换的状态信息的函数是:
FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
比如我们要判断ADC1d的转换是否结束,方法是:
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
通过以上几个步骤的设置,我们就能正常的使用CKS32F107xx的ADC1来执行AD转换操作了。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由ll转载自中科芯MCU公众号,原文标题为:MCU微课堂|CKS32F107xx系列 ADC(一),本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关推荐
中科芯MCU-CKS32F107xx系列TIM定时器应用指南
本节课我们将介绍互联型产品CKS32F107xx系列的定时器使用,CKS32F107xx的定时器资源比较丰富,包含2个高级定时器,10个通用定时器,2个基本定时器,以及两个看门狗定时器和一个系统定时器,共达17个定时器之多。关于定时器部分内容的讲解我们将分4个部分展开,本节将围绕定时器的定时原理展开,并以简单定时配置操作演示。
设计经验 发布时间 : 2024-08-28
解析中科芯CKS32F107xx系列MCU的GPIO配置
本文中中科芯来给大家介绍CKS32F107xx系列MCU的GPIO配置,希望对各位工程师有所帮助。GPIO是通用输入输出端口的简称,也是CKS32可控制的引脚,CKS32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
设计经验 发布时间 : 2024-06-12
解析中科芯CKS32F107xx MCU的DAC模块
DAC即数模转换器,它可以将数字信号转换为模拟信号。在常见的数字信号系统中,传感器信号被ADC模块把电压模拟信号转换成易于计算机存储、处理的数字信号,由计算机处理完成后,再由DAC模块转化输出电压模拟信号来驱动某些执行器件。本文将为您解析CKS32F107xx MCU的DAC特点和结构。
设计经验 发布时间 : 2024-08-28
中科芯(CETC)CKS32F030C8/C6/K6/F4 32位MCU数据手册
描述- 本资料给出了中科芯CKS32F030 xx 微控制器产品的器件特性
型号- CKS32F030XX,CKS32F030C6,CKS32F030R8T6XXX,CKS32F030C8,CKS32,CKS32F030K6,CKS32F030F4
CKS32F405RG/CKS32F407xG/CKS32F415RG/CKS32F417xG 32位基于Cortex™-M4内核的微控制器,1MB FLASH,192+4+128KB RAM数据手册
型号- CKS32F417ZG,CKS32F417XG,CKS32F407ZG,CKS32F417VG,CKS32F407XG,CKS32F4系列,CKS32F407VGT6XXX,CKS32F407IG,CKS32F405XX,CKS32F417IG,CKS32F415XX,CKS32F417XG 系列,CKS32F407XX,CKS32F417XX,CKS32F415RG,CKS32F407VG,CKS32F405RG,CKS32F4,CKS32F4X7XX
【应用】可替代STM32F030F4P6的国产32位微控制器CKS32F030F4P6用于智能锁
中科芯的CKS32F030F4P6是采用高性能ARM® Cortex™-M0核的微控制器,最高工作频率为48MHz,高速嵌入式内存(FLASH为16K字节,SRAM为4K字节),并广泛集成增强型外设和I/O口,1路SPI,1路IIC,1路UART,提供TSSOP20封装,这些特点使得CKS32F030F4P6微控制器可完美替代STM32F030F4P6用于智能门锁。
应用方案 发布时间 : 2020-12-15
【经验】在 keil软件使用J-Link烧录CKS32Fxxx系列代码的方法
中科芯(CETC)32位微控制器CKS32F030系列、CKS32F031系列、CKS32F051系列以及CKS32F103系列系列均可以完全替代意法半导体的STM32F030系列、STM32F031系列、STM32F051系列和STM32F103系列,软硬件均兼容。本文将以开发软件keil软件为例,介绍如何使用J-Link进行烧写程序。
设计经验 发布时间 : 2021-02-12
CKS32F103x8 CKS32F103xB 32位基于ARM核心的带64或128K字节闪存的标准型微控制器 数据手册
型号- CKS32F103R8,CKS32F103R8T6XXX,CKS32F103R8T6XXX,CKS32F103X8,CKS32F103XX,CKS32F103CB,CKS32F103CBT6,CKS32F103C8,CKS32F103RB,CKS32F103RBT6,CKS32F103VBT6,CKS32,CKS32F103VB,CKS32F103C8T6,CKS32F103XB,CKS32F103R8T6
中科芯CKS32F107xx系列MCU-双重ADC模式应用指南
本文基于中科芯CKS32F107xx系列MCU介绍双重ADC模式。
设计经验 发布时间 : 2024-08-13
CKS32F103x8 CKS32F103xB 32位基于ARM核心的带64或128K字节闪存的标准型微控制器
型号- CKS32F103R8,CKS32F103T8,CKS32F103R8T6XXX,CKS32F103T8T6,CKS32F103X8,CKS32F103CB,CKS32F103CBT6,CKS32F103C8,CKS32F103TBT6,CKS32F103RBT6,CKS32F103RB,CKS32F103VBT6,CKS32F103TB,CKS32F103C8T6,CKS32F103VB,CKS32F103XB,CKS32F103R8T6
中科芯(CETC)CKS32F103x8/CKS32F103xB ARM 内核32 位高性能微控制器参考手册
描述- 本参考手册针对应用开发,提供关于如何使用CKS32F103xx微控制器的存储器和外设的详细信息。
型号- CKS32F103X8,CKS32F103XX,CKS32F103XB
中科芯CKS32F107xx系列MCU内部温度传感器ADC采集应用指南
中科芯推出的CKS32F107xx系列MCU有一个内部的温度传感器,可以用来测量MCU及周围的温度(TA)。该温度传感器在内部和ADCx_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值。
设计经验 发布时间 : 2024-08-13
中科芯联合创芯工坊推出MCU固件安全烧录解决方案,提供多重固件安全加密机制
基于众多客户对于固件安全烧录的需求,近期中科芯MCU事业部与其第三方生态合作伙伴创芯工坊推出PowerWriter系列调试烧录器产品及配套烧录工具,提供多重固件安全加密机制。该生态工具适配中科芯CKS32全系列MCU产品,有效地保护开发者知识产权权益。
原厂动态 发布时间 : 2023-09-21
CKS32F103xC/CKS32F103xD/CKS32F103xE 32位基于ARM核心的带512K字节闪存的微控制器数据手册
型号- CKS32F103RX,CSTM32F103XD,STM32F103XD,STM32F103XE,CKS32F10XXX,CKS32F103VX,CKS32F103XX,CKS32F103X8,CKS32F103ZX,CKS32F103X,CKS32F103RCT6XXX,CKS32F103CX,CKS32F103XX 系列,CKS32F103XD,CKS32F103XE,CKS32F103XB,CKS32F103XC
解析CKS32F107xx系列ADC采样使用的DMA模式的原理和配置方法
因为ADC规则组数据寄存器ADC_DR只有一个,如果使用多通道转换,那转换的数据就全部都挤在ADC_DR里面了,所以当通道转换完成后就应该把数据取走,或者开启DMA模式,把数据传输到内存里面,不然就会造成数据的覆盖。多通道ADC采集一般使用DMA进行数据传输,该方法更加高效方便。
设计经验 发布时间 : 2024-07-08
电子商城
现货市场
服务
可定制板装式压力传感器支持产品量程从5inch水柱到100 psi气压;数字输出压力传感器压力范围0.5~60inH2O,温度补偿范围-20~85ºС;模拟和数字低压传感器可以直接与微控制器通信,具备多种小型SIP和DIP封装可选择。
提交需求>
定制水冷板尺寸30*30mm~1000*1000 mm,厚度1mm~50mm,散热能力最高50KW,承压可达3MPA;液冷机箱散热能力达500W~100KW。项目单次采购额需满足1万元以上,或年需求5万元以上。
提交需求>
登录 | 立即注册
提交评论