0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅谈CW32系列模数转换器(ADC)

jf_pJlTbmA9 来源:武汉芯源半导体 作者:武汉芯源半导体 2023-10-25 15:43 次阅读

模数转换器ADC)的主要功能是将模拟量转换为数字量,方便MCU进行处理。下面以CW32L083为例介绍CW系列的模数转换器的特点和功能,并提供演示实例。

一、概述

CW32L083 内部集成一个 12 位精度、最高 1M SPS 转换速度的逐次逼近型模数转换器 (SAR ADC),最多可将 16 路模拟信号转换为数字信号。现实世界中的绝大多数信号都是模拟量,如光、电、声、图像信号等,都要由 ADC 转换成数字信号,才能由 MCU 进行数字化处理。

二、主要特性

• 12 位精度

• 可编程转换速度,最高达 1M SPS

• 16 路输入转换通道:13 路外部引脚输入 - 内置温度传感器 - 内置 BGR 1.2V 基准 - 1/3 VDDA 电源电压

• 4 路参考电压源(Vref):- VDDA 电源电压 - ExRef(PB00)引脚电压 - 内置 1.5V 参考电压 - 内置 2.5V 参考电压

• 采样电压输入范围:0 ~ Vref

多种转换模式,全部支持转换累加功能 - 单次转换 - 多次转换 - 连续转换 - 序列扫描转换 - 序列断续转换

• 支持单通道、序列通道两种通道选择,最大同时支持 8 个序列

• 支持输入通道电压阈值监测

• 内置信号跟随器,可转换高阻抗输入信号

• 支持片内外设自动触发 ADC 转换

• 支持 ADC 转换完成触发 DMA

三、转换时序

ADC 的转换时序如下图所示:

wKgZomUDxUWAZYCDAADC3UVV5Hc265.png

向 ADC 控制寄存器 ADC_CR0 的 EN 位域写入 1,使能 ADC 模块。

ADC_CR0.EN 由 0 变为 1 约 40μs 后 ADC_ISR.READY 标志位置 1,表示模拟电路初始化完成,可以开始进行 ADC 转换。

向 ADC 启动寄存器 ADC_START 的 START 位域写入 1,启动 ADC 转换,转换完成后硬件自动清零。

ADC 工作时钟 ADCCLK,由系统时钟 PCLK 经预分频器分频得到,通过控制寄存器 ADC_CR0 的 CLK 位域可选择 1 ~ 128 分频

四、工作模式

ADC 控制寄存器 ADC_CR0 的 MODE 位域配置 ADC 工作模式

启动 ADC 转换,可通过向 ADC 启动寄存器 ADC_START 的 START 位域写 1;也可通过其他外设来触发。

wKgaomR4F26ATOmXAAEQE8ffK-g415.jpg

五、实际案例

GTIM1定时器定时1S,定时器1S中断触发启动ADC转换,采样AIN1,并通过GTIM2以PWM方波输出ADC采样值:PWM占空比50%,周期为1Hz-5000Hz,对应ADC的0-4095采样值。

1.配置ADC测试IO口

voidADC_PortInit(void)
{
REGBITS_SET(CW_SYSCTRL->AHBEN,SYSCTRL_AHBEN_GPIOA_Msk);//打开GPIO时钟
REGBITS_SET(CW_SYSCTRL->APBEN2,SYSCTRL_APBEN2_ADC_Msk);//打开ADC时钟
PA01_ANALOG_ENABLE();//setPA01asAIN1INPUT
}

2.LED初始化

voidLED_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure={0};
REGBITS_SET(CW_SYSCTRL->AHBEN,SYSCTRL_AHBEN_GPIOC_Msk);//打开GPIO时钟
/*ConfiguretheGPIO_LEDpin*/
GPIO_InitStructure.Pins=GPIO_PIN_2|GPIO_PIN_3;
GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP;
GPIO_Init(CW_GPIOC, GPIO_InitStructure);
PC02_SETLOW();//LEDsareoff.PC03_SETLOW();
}

3.PWM IO初始化

voidPWM_PortInit(void)
{
GPIO_InitTypeDefGPIO_InitStructure={0};
/*PA5PWM输出*/
__RCC_GPIOA_CLK_ENABLE();
/*ConfigurethePWMoutputpin*/
GPIO_InitStructure.Pins=GPIO_PIN_5;
GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP;
GPIO_Init(CW_GPIOA, GPIO_InitStructure);
PA05_AFx_GTIM2CH1();
}

4.GTIM初始化

voidGTIM_Init(void)
{
GTIM_InitTypeDefGTIM_InitStruct={0};

//REGBITS_SET(CW_SYSCTRL->APBEN1,SYSCTRL_APBEN1_GTIM1_Msk);//打开GTIM1
__RCC_GTIM1_CLK_ENABLE();//打开GTIM1时钟GTIM_InitStruct.Mode=GTIM_MODE_TIME;
GTIM_InitStruct.OneShotMode=GTIM_COUNT_CONTINUE;
GTIM_InitStruct.Prescaler=GTIM_PRESCALER_DIV1024;
GTIM_InitStruct.ReloadValue=62499ul;//T=1s.
GTIM_InitStruct.ToggleOutState=DISABLE;
GTIM_TimeBaseInit(CW_GTIM1, GTIM_InitStruct);
GTIM_ITConfig(CW_GTIM1,GTIM_IT_OV,ENABLE);
NVIC_ClearPendingIRQ(GTIM1_IRQn);
NVIC_EnableIRQ(GTIM1_IRQn);
NVIC_SetPriority(GTIM1_IRQn,0x03);

__RCC_GTIM2_CLK_ENABLE();//打开GTIM2时钟
GTIM_InitStruct.ReloadValue=0xFFFFu;
GTIM_InitStruct.ToggleOutState=ENABLE;
GTIM_TimeBaseInit(CW_GTIM2, GTIM_InitStruct);
valuePeriod=GTIM_InitStruct.ReloadValue;
valuePosWidth=valuePeriod>>1u;
GTIM_OCInit(CW_GTIM2,GTIM_CHANNEL1,GTIM_OC_OUTPUT_PWM_HIGH);
GTIM_SetCompare1(CW_GTIM2,valuePosWidth);
GTIM_Cmd(CW_GTIM2,ENABLE);
}

5.主程序main

uint16_tvalueAdc;
uint32_tvalueAdcAcc;
volatileuint8_tgFlagIrq;
uint16_tgCntEoc=0;
uint8_tcntSample;
floatfTsDegree;
uint32_tvaluePeriod;
uint32_tvaluePosWidth;
uint32_tvalueReload=0xFFFFu;
intmain(void)
{
uint8_tres;
ADC_InitTypeDefADC_InitStructure={0};
ADC_WdtTypeDefADC_WdtStructure={0};
ADC_SingleChTypeDefADC_SingleChStructure={0};
RCC_HSI_Enable(RCC_HSIOSC_DIV6);//以下从HSI切换到PLL
RCC_PLL_Enable(RCC_PLLSOURCE_HSI,8000000UL,RCC_PLL_MUL_8);
//开启PLL,PLL源为HSI
__RCC_FLASH_CLK_ENABLE();//打开FLASH时钟
FLASH_SetLatency(FLASH_Latency_3);
res=RCC_SysClk_Switch(RCC_SYSCLKSRC_PLL);//切换系统时钟到PLL:64MHz。
ADC_PortInit();//配置ADC测试IO口
LED_Init();//LED初始化
PWM_PortInit();
GTIM_Init();
ADC_StructInit( ADC_InitStructure);//ADC默认值初始化
ADC_WdtInit( ADC_WdtStructure);//ADC模拟看门狗通道初始化
ADC_InitStructure.ADC_ClkDiv=ADC_Clk_Div128;//ADCCLK:500KHz.
ADC_InitStructure.ADC_InBufEn=ADC_BufEnable;
ADC_InitStructure.ADC_SampleTime=ADC_SampTime10Clk;
ADC_SingleChStructure.ADC_DiscardEn=ADC_DiscardNull;//配置单通道转换模式
ADC_SingleChStructure.ADC_Chmux=ADC_ExInputCH1;//选择ADC转换通道
ADC_SingleChStructure.ADC_InitStruct=ADC_InitStructure;
ADC_SingleChStructure.ADC_WdtStruct=ADC_WdtStructure;
ADC_SingleChOneModeCfg( ADC_SingleChStructure);
ADC_ITConfig(ADC_IT_EOC,ENABLE);
ADC_EnableIrq(ADC_INT_PRIORITY);
ADC_ClearITPendingAll();
ADC_Enable();//ADC使能
ADC_ExtTrigCfg(ADC_TRIG_GTIM1,ENABLE);//ADC外部中断触发源配置
GTIM_Cmd(CW_GTIM1,ENABLE);
while(1)
{
while(!(gFlagIrq ADC_ISR_EOC_Msk));
gFlagIrq=0u;PC03_TOG();
valueAdc=ADC_GetConversionValue();
valueReload=((4095u*125000ul)/(4999u*valueAdc+4095u)+1)>>1;
GTIM_SetCounterValue(CW_GTIM2,0u);//reset.
GTIM_SetReloadValue(CW_GTIM2,valueReload);
GTIM_SetCompare1(CW_GTIM2,valuePosWidth);//等待ADC外部中断触发源启动下一次ADC转换
}
}

6.实验展示

通用定时器GTIM1定时1s自动触发ADC模块进行转换,ADC通道为AIN1:PA01。

通用定时器GTIM2将AIN1的ADC采样值转换成频率可变的PWM方波,占空比50%,使用PA05作为PWM输出。ADC采样值为0时,PWM方波频率为1Hz;ADC采样值为4095时,PWM方波频率为5KHz。

wKgZomR4F26AI9RnAABLqfkip4g331.jpg

来源:武汉芯源半导体

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • adc
    adc
    +关注

    关注

    98

    文章

    6429

    浏览量

    544033
  • 模数转换器
    +关注

    关注

    26

    文章

    3123

    浏览量

    126732
收藏 人收藏

    评论

    相关推荐

    ADC10DV200单芯片模数转换器数据表

    电子发烧友网站提供《ADC10DV200单芯片模数转换器数据表.pdf》资料免费下载
    发表于 07-31 10:39 0次下载
    <b class='flag-5'>ADC</b>10DV200单芯片<b class='flag-5'>模数转换器</b>数据表

    THS1009低功耗模数转换器(ADC)数据表

    电子发烧友网站提供《THS1009低功耗模数转换器(ADC)数据表.pdf》资料免费下载
    发表于 07-30 14:18 1次下载
    THS1009低功耗<b class='flag-5'>模数转换器</b>(<b class='flag-5'>ADC</b>)数据表

    ADC141S628-Q伪差分模数转换器(ADC)数据表

    电子发烧友网站提供《ADC141S628-Q伪差分模数转换器(ADC)数据表.pdf》资料免费下载
    发表于 07-25 11:29 0次下载
    <b class='flag-5'>ADC</b>141S628-Q伪差分<b class='flag-5'>模数转换器</b>(<b class='flag-5'>ADC</b>)数据表

    ADC122S625模数转换器(ADC)数据表

    电子发烧友网站提供《ADC122S625模数转换器(ADC)数据表.pdf》资料免费下载
    发表于 07-25 10:09 0次下载
    <b class='flag-5'>ADC</b>122S625<b class='flag-5'>模数转换器</b>(<b class='flag-5'>ADC</b>)数据表

    ADC12130、ADC12132和ADC12138模数转换器数据表

    电子发烧友网站提供《ADC12130、ADC12132和ADC12138模数转换器数据表.pdf》资料免费下载
    发表于 07-25 10:08 0次下载
    <b class='flag-5'>ADC</b>12130、<b class='flag-5'>ADC</b>12132和<b class='flag-5'>ADC</b>12138<b class='flag-5'>模数转换器</b>数据表

    ADC10731/ADC10732/ADC10734/ADC10738模数转换器数据表

    电子发烧友网站提供《ADC10731/ADC10732/ADC10734/ADC10738模数转换器数据表.pdf》资料免费下载
    发表于 07-25 09:40 0次下载
    <b class='flag-5'>ADC</b>10731/<b class='flag-5'>ADC</b>10732/<b class='flag-5'>ADC</b>10734/<b class='flag-5'>ADC</b>10738<b class='flag-5'>模数转换器</b>数据表

    ADC0808/ADC0809模数转换器数据表

    电子发烧友网站提供《ADC0808/ADC0809模数转换器数据表.pdf》资料免费下载
    发表于 07-19 10:42 2次下载
    <b class='flag-5'>ADC</b>0808/<b class='flag-5'>ADC</b>0809<b class='flag-5'>模数转换器</b>数据表

    TLC4541和TLC4545微型CMOS模数转换器(ADC)系列数据表

    电子发烧友网站提供《TLC4541和TLC4545微型CMOS模数转换器(ADC)系列数据表.pdf》资料免费下载
    发表于 07-18 09:24 0次下载
    TLC4541和TLC4545微型CMOS<b class='flag-5'>模数转换器</b>(<b class='flag-5'>ADC</b>)<b class='flag-5'>系列</b>数据表

    ADC09xJ800-Q1模数转换器(ADC)数据表

    电子发烧友网站提供《ADC09xJ800-Q1模数转换器(ADC)数据表.pdf》资料免费下载
    发表于 07-15 10:59 0次下载
    <b class='flag-5'>ADC</b>09xJ800-Q1<b class='flag-5'>模数转换器</b>(<b class='flag-5'>ADC</b>)数据表

    CW32数字电压电流表软件教程-实验五:ADC采样及显示

    的数字信号。由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。 6.1.2.
    的头像 发表于 05-31 15:28 502次阅读
    <b class='flag-5'>CW32</b>数字电压电流表软件教程-实验五:<b class='flag-5'>ADC</b>采样及显示

    模数转换器的技术参数详解

    模数转换器ADC,Analog-to-Digital Converter)作为电子系统中的重要组成部分,负责将连续的模拟信号转换为离散的数字信号,以供数字系统进行处理和分析。模数转换器
    的头像 发表于 05-21 16:06 1239次阅读

    低噪声模数转换器 (ADC)SC1642,可用于温度测量系统

    为了供应市场所需,市面上已有多种类型的温度传感来测量温度,而温度测量系统的精度取决于传感以及传感所接口的模数转换器(ADC)的性能。许
    的头像 发表于 04-15 09:43 583次阅读
    低噪声<b class='flag-5'>模数转换器</b> (<b class='flag-5'>ADC</b>)SC1642,可用于温度测量系统

    【有那么点详细的CW32学习笔记】模数转换器

    本章为大家带来模数转换器ADC)的使用教学,按照惯例,我们先来说一下模数转换器本身。 首先是功能,模数转换器接收电压信号并输出一个数字信号,该数字信号是一个数字,这个数字指示了电压信
    的头像 发表于 02-29 09:41 735次阅读
    【有那么点详细的<b class='flag-5'>CW32</b>学习笔记】<b class='flag-5'>模数转换器</b>

    AD4112模数转换器(ADC)手册

    电子发烧友网站提供《AD4112模数转换器(ADC)手册.pdf》资料免费下载
    发表于 11-22 15:05 1次下载
    AD4112<b class='flag-5'>模数转换器</b>(<b class='flag-5'>ADC</b>)手册

    AD4111模数转换器(ADC)手册

    电子发烧友网站提供《AD4111模数转换器(ADC)手册.pdf》资料免费下载
    发表于 11-22 15:03 1次下载
    AD4111<b class='flag-5'>模数转换器</b>(<b class='flag-5'>ADC</b>)手册