模數(shù)轉(zhuǎn)換器(ADC)的主要功能是將模擬量轉(zhuǎn)換為數(shù)字量,方便MCU進(jìn)行處理。下面以CW32L083為例介紹CW系列的模數(shù)轉(zhuǎn)換器的特點(diǎn)和功能,并提供演示實(shí)例。
一、概述
CW32L083 內(nèi)部集成一個(gè) 12 位精度、最高 1M SPS 轉(zhuǎn)換速度的逐次逼近型模數(shù)轉(zhuǎn)換器 (SAR ADC),最多可將 16 路模擬信號轉(zhuǎn)換為數(shù)字信號。現(xiàn)實(shí)世界中的絕大多數(shù)信號都是模擬量,如光、電、聲、圖像信號等,都要由 ADC 轉(zhuǎn)換成數(shù)字信號,才能由 MCU 進(jìn)行數(shù)字化處理。
二、主要特性
? 12 位精度
? 可編程轉(zhuǎn)換速度,最高達(dá) 1M SPS
? 16 路輸入轉(zhuǎn)換通道:13 路外部引腳輸入 - 內(nèi)置溫度傳感器 - 內(nèi)置 BGR 1.2V 基準(zhǔn) - 1/3 VDDA 電源電壓
? 4 路參考電壓源(Vref):- VDDA 電源電壓 - ExRef(PB00)引腳電壓 - 內(nèi)置 1.5V 參考電壓 - 內(nèi)置 2.5V 參考電壓
? 采樣電壓輸入范圍:0 ~ Vref
多種轉(zhuǎn)換模式,全部支持轉(zhuǎn)換累加功能 - 單次轉(zhuǎn)換 - 多次轉(zhuǎn)換 - 連續(xù)轉(zhuǎn)換 - 序列掃描轉(zhuǎn)換 - 序列斷續(xù)轉(zhuǎn)換
? 支持單通道、序列通道兩種通道選擇,最大同時(shí)支持 8 個(gè)序列
? 支持輸入通道電壓閾值監(jiān)測
? 內(nèi)置信號跟隨器,可轉(zhuǎn)換高阻抗輸入信號
? 支持片內(nèi)外設(shè)自動(dòng)觸發(fā) ADC 轉(zhuǎn)換
? 支持 ADC 轉(zhuǎn)換完成觸發(fā) DMA
三、轉(zhuǎn)換時(shí)序
ADC 的轉(zhuǎn)換時(shí)序如下圖所示:

向 ADC 控制寄存器 ADC_CR0 的 EN 位域?qū)懭?1,使能 ADC 模塊。
ADC_CR0.EN 由 0 變?yōu)?1 約 40μs 后 ADC_ISR.READY 標(biāo)志位置 1,表示模擬電路初始化完成,可以開始進(jìn)行 ADC 轉(zhuǎn)換。
向 ADC 啟動(dòng)寄存器 ADC_START 的 START 位域?qū)懭?1,啟動(dòng) ADC 轉(zhuǎn)換,轉(zhuǎn)換完成后硬件自動(dòng)清零。
ADC 工作時(shí)鐘 ADCCLK,由系統(tǒng)時(shí)鐘 PCLK 經(jīng)預(yù)分頻器分頻得到,通過控制寄存器 ADC_CR0 的 CLK 位域可選擇 1 ~ 128 分頻
四、工作模式
ADC 控制寄存器 ADC_CR0 的 MODE 位域配置 ADC 工作模式
啟動(dòng) ADC 轉(zhuǎn)換,可通過向 ADC 啟動(dòng)寄存器 ADC_START 的 START 位域?qū)?1;也可通過其他外設(shè)來觸發(fā)。

五、實(shí)際案例
GTIM1定時(shí)器定時(shí)1S,定時(shí)器1S中斷觸發(fā)啟動(dòng)ADC轉(zhuǎn)換,采樣AIN1,并通過GTIM2以PWM方波輸出ADC采樣值:PWM占空比50%,周期為1Hz-5000Hz,對應(yīng)ADC的0-4095采樣值。
1.配置ADC測試IO口
voidADC_PortInit(void)
{
REGBITS_SET(CW_SYSCTRL->AHBEN,SYSCTRL_AHBEN_GPIOA_Msk);//打開GPIO時(shí)鐘
REGBITS_SET(CW_SYSCTRL->APBEN2,SYSCTRL_APBEN2_ADC_Msk);//打開ADC時(shí)鐘
PA01_ANALOG_ENABLE();//setPA01asAIN1INPUT
}
2.LED初始化
voidLED_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure={0};
REGBITS_SET(CW_SYSCTRL->AHBEN,SYSCTRL_AHBEN_GPIOC_Msk);//打開GPIO時(shí)鐘
/*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時(shí)鐘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時(shí)鐘
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時(shí)鐘 FLASH_SetLatency(FLASH_Latency_3); res=RCC_SysClk_Switch(RCC_SYSCLKSRC_PLL);//切換系統(tǒng)時(shí)鐘到PLL:64MHz。 ADC_PortInit();//配置ADC測試IO口 LED_Init();//LED初始化 PWM_PortInit(); GTIM_Init(); ADC_StructInit( ADC_InitStructure);//ADC默認(rèn)值初始化 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;//配置單通道轉(zhuǎn)換模式 ADC_SingleChStructure.ADC_Chmux=ADC_ExInputCH1;//選擇ADC轉(zhuǎn)換通道 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外部中斷觸發(fā)源配置 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外部中斷觸發(fā)源啟動(dòng)下一次ADC轉(zhuǎn)換 } }
6.實(shí)驗(yàn)展示
通用定時(shí)器GTIM1定時(shí)1s自動(dòng)觸發(fā)ADC模塊進(jìn)行轉(zhuǎn)換,ADC通道為AIN1:PA01。
通用定時(shí)器GTIM2將AIN1的ADC采樣值轉(zhuǎn)換成頻率可變的PWM方波,占空比50%,使用PA05作為PWM輸出。ADC采樣值為0時(shí),PWM方波頻率為1Hz;ADC采樣值為4095時(shí),PWM方波頻率為5KHz。

來源:武漢芯源半導(dǎo)體
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進(jìn)行處理
審核編輯 黃宇
-
adc
+關(guān)注
關(guān)注
100文章
7481瀏覽量
554396 -
模數(shù)轉(zhuǎn)換器
+關(guān)注
關(guān)注
26文章
4005瀏覽量
129927
發(fā)布評論請先 登錄
模數(shù)轉(zhuǎn)換器ADC充電樁解決方案
模數(shù)轉(zhuǎn)換器最高使用頻段
CW32系列模數(shù)轉(zhuǎn)換器CW32L083的特點(diǎn)和功能
深入剖析ADC080x系列8位模數(shù)轉(zhuǎn)換器
ADC121S101 模數(shù)轉(zhuǎn)換器技術(shù)規(guī)格與應(yīng)用總結(jié)
分享Sigma Delta型模數(shù)轉(zhuǎn)換器(高精度ADC工作原理)
ADC3569 單通道高速模數(shù)轉(zhuǎn)換器(ADC)產(chǎn)品文檔總結(jié)
?高精度模數(shù)轉(zhuǎn)換器 CBM79AD60G ?18位、5 MSPS、SAR型差分 #ADC #國產(chǎn)芯片
Texas Instruments ADS868xW 16 位 SAR 模數(shù)轉(zhuǎn)換器數(shù)據(jù)手冊
Analog Devices Inc. AD9217射頻模數(shù)轉(zhuǎn)換器數(shù)據(jù)手冊
Analog Devices Inc. AD4116模數(shù)轉(zhuǎn)換器 (ADC)數(shù)據(jù)手冊
淺談CW32系列模數(shù)轉(zhuǎn)換器(ADC)
評論