日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

【GD32 MCU 入門教程】GD32 MCU 常見外設介紹 (6) ADC 模塊介紹

發(fā)布者:快樂的成長最新更新時間:2024-11-04 來源: elecfans關鍵字:GD32  MCU  ADC  模塊 手機看文章 掃描二維碼
隨時隨地手機看文章

6.1.ADC 基礎知識

12 位逐次逼近式模數(shù)轉換器模塊(ADC),可以采樣來自于外部輸入通道、內(nèi)部輸入通道的模擬信號,采樣轉換后,轉換結果可以按照最低有效位對齊或最高有效位對齊的方式保存在相應的數(shù)據(jù)寄存器中。

6.2.GD32 ADC 外設原理

GD32 ADC 主要特性


? 高性能:

– ADC采樣分辨率: 12位、 10位、 8位、或者6位分辨率;

– 前置校準功能;

– 可編程采樣時間;

– 數(shù)據(jù)存儲模式:最高有效位對齊和最低有效位對齊;

– 支持規(guī)則數(shù)據(jù)轉換的DMA請求。

? 模擬輸入通道:

– 16個外部模擬輸入通道;

– 1個內(nèi)部溫度傳感器輸入通道(VSENSE);

– 1個內(nèi)部參考電壓輸入通道(VREFINT)。

? 轉換開始的發(fā)起:

– 軟件觸發(fā);

– 硬件觸發(fā)。

? 轉換模式:

– 轉換單個通道,或者掃描一序列的通道;

– 單次運行模式,每次觸發(fā)轉換一次選擇的輸入通道;

– 連續(xù)運行模式,連續(xù)轉換所選擇的輸入通道;

– 間斷運行模式;

– 同步模式(適用于具有兩個或多個ADC的設備)。

? 轉換結果閾值監(jiān)測器功能: 模擬看門狗。

? 中斷的產(chǎn)生:

– 常規(guī)序列轉換結束;

– 模擬看門狗事件。

? 過采樣:

– 16位的數(shù)據(jù)寄存器;

– 可調整的過采樣率,從2x到256x;

– 高達8位的可編程數(shù)據(jù)移位。

? ADC供電要求:

– 2.4V到3.6V,一般供電電壓為3.3V。

? ADC輸入范圍: VREF- ≤VIN ≤VREF+。

– VREF- : ADC 負參考電壓, VREF- = VSSA

– VREF+ : ADC 正參考電壓, 2.6 V ≤ VREF+ ≤ VDDA

ADC 結構框圖介紹

輸入圖片說明

6.3.硬件連接說明

輸入圖片說明

ADC的檢測需要將輸入阻抗和采樣周期保持一定的關系,下表列出了以GD32E103為例子

輸入圖片說明

6.4.軟件配置說明

查詢法

查詢法采用的是轉換單個通道,或者掃描一序列的通道,通過不斷切換通道的方式去讀取對應通道的ADC數(shù)值。我們介紹使用庫函數(shù)來設置 ADC0 的通道來進行 AD 轉換的步驟,下面講解其詳細設置步驟:

開啟 GPIO口時鐘和 ADC0 時鐘,設置GPIO口為模擬輸入。

rcu_periph_clock_enable(RCU_GPIOA); /* enable GPIOB clock */ rcu_periph_clock_enable(RCU_GPIOB); /* enable ADC0 clock */ rcu_periph_clock_enable(RCU_ADC0); /* config ADC clock */ rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV4); /* enable alternate function clock */ rcu_periph_clock_enable(RCU_AF); //使能 GPIO 口復用

這里需要說明一下, ADC 的通道與引腳的對應關系在數(shù)據(jù)手冊可以查到

輸入圖片說明

(1)配置 ADC 輸入時鐘分頻,模式為獨立模式,轉換長度以及觸發(fā)方式等

/* reset ADC */ adc_deinit(ADC0); /* ADC mode config */ adc_mode_config(ADC_MODE_FREE); //獨立模式 /* ADC continous function enable */ adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE) /* ADC data alignment config */ adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT); //ADC 數(shù)據(jù)右對齊 adc_special_function_config(ADC0,ADC_CONTINUOUS_MODE,DISABLE); /* ADC channel length config */ adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 1);//設置 ADC 轉換的通道數(shù)量 /* ADC trigger config */ adc_external_trigger_source_config(ADC0,ADC_REGULAR_CHANNEL,ADC0_1_EXTTRIG_REGULAR_NONE); //通過軟件觸發(fā) ADC 轉換 adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);

(2)開啟 AD 轉換器

在設置完了以上信息后,我們就開啟 AD 轉換器了

/* enable ADC interface */ adc_enable(ADC0); delay_1ms(1);//延遲 等待穩(wěn)定 /* ADC calibration and reset calibration */ adc_calibration_enable(ADC0);//使能 ADC 校準

(3)讀取 ADC 值 在上面的步驟完成后, ADC 就算準備好了。所謂的查詢法就是不斷地進行通道切換

unsigned short adc0_transfer(unsigned char adc_channel) { uint16_t ADC_temp; /* ADC regular channel config */ adc_regular_channel_config(ADC0, 0, adc_channel, ADC_SAMPLETIME_55POINT5); adc_software_trigger_enable(ADC0,ADC_REGULAR_CHANNEL); while(!adc_flag_get(ADC0, ADC_FLAG_EOC));//等待轉換完成 /* clear the end of conversion flag */ adc_flag_clear(ADC0, ADC_FLAG_EOC); ADC_temp=adc_regular_data_read(ADC0); return ADC_temp; }

這里還需要說明一下ADC的參考電壓,是以Vref作為參考電壓。

常規(guī)通道轉換 DMA 搬運

通過ADC轉換,在ADC 轉換完成后 觸發(fā)DMA 進行數(shù)據(jù)搬運。

DMA 請求,可以通過設置 ADC_CTL1 寄存器的 DMA 位來使能,它用于規(guī)則組多個通道的轉換結果。 ADC 在規(guī)則組一個通道轉換結束后產(chǎn)生一個 DMA 請求, DMA 接受到請求后可以將轉換的數(shù)據(jù)從 ADC_RDATA 寄存器傳輸?shù)接脩糁付ǖ哪康牡刂贰?p>在和查詢法一節(jié)的差別,主要在于ADC 的配置方面和DMA的配置

(1)ADC 的配置

/* ADC channel length config */ adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 4);//常規(guī)通道長度配置 /* ADC regular channel config */ adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_4, ADC_SAMPLETIME_55POINT5); adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_5, ADC_SAMPLETIME_55POINT5); adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_6, ADC_SAMPLETIME_55POINT5); adc_regular_channel_config(ADC0, 3, ADC_CHANNEL_7, ADC_SAMPLETIME_55POINT5); /* ADC trigger config */ adc_external_trigger_source_config(ADC0,ADC_REGULAR_CHANNEL, ADC0_1_EXTTRIG_REGULAR_NONE); adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE); /* ADC DMA function enable */ adc_dma_mode_enable(ADC0);//使能 DMA 模式 /* enable ADC interface */ adc_enable(ADC0); delay_1ms(1); /* ADC calibration and reset calibration */ adc_calibration_enable(ADC0);

(2)DMA的配置

/* ADC_DMA_channel configuration */ dma_parameter_struct dma_data_parameter; /* ADC DMA_channel configuration */ dma_deinit(DMA0, DMA_CH0); /* initialize DMA single data mode */ dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC0)); //外設地址 dma_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE; dma_data_parameter.memory_addr = (uint32_t)(&adc_value); //搬運目標地址 dma_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE; dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_16BIT; dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT; dma_data_parameter.direction = DMA_PERIPHERAL_TO_MEMORY; dma_data_parameter.number = 4; dma_data_parameter.priority = DMA_PRIORITY_HIGH; dma_init(DMA0, DMA_CH0, &dma_data_parameter); /* enable DMA circulation mode */ dma_circulation_enable(DMA0, DMA_CH0); /* enable DMA channel */ dma_channel_enable(DMA0, DMA_CH0);

(3)觸發(fā)ADC 轉換

adc_software_trigger_enable(ADC0,ADC_REGULAR_CHANNEL);

注入通道-中斷

在和查詢法一節(jié)的差別,主要在于ADC 的配置方面和注入通道會產(chǎn)生中斷

(1)ADC 的配置

/* reset ADC */ adc_deinit(ADC0); /* ADC mode config */ adc_mode_config(ADC_MODE_FREE); /* ADC continous function enable */ adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE); /* ADC data alignment config */ adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT); /* ADC channel length config *//注入通道配置 adc_channel_length_config(ADC0, ADC_INSERTED_CHANNEL, 4);//注入通道長度配置 /* ADC inserted channel config */ adc_inserted_channel_config(ADC0, 0, ADC_CHANNEL_0, ADC_SAMPLETIME_55POINT5); adc_inserted_channel_config(ADC0, 1, ADC_CHANNEL_1, ADC_SAMPLETIME_55POINT5); adc_inserted_channel_config(ADC0, 2, ADC_CHANNEL_2, ADC_SAMPLETIME_55POINT5); adc_inserted_channel_config(ADC0, 3, ADC_CHANNEL_3, ADC_SAMPLETIME_55POINT5); /* ADC trigger config */ //通過 EXTI 15 進行觸發(fā) adc_external_trigger_source_config(ADC0,ADC_INSERTED_CHANNEL,ADC0_1_EXTTRIG_INSERTED_EXTI_15); /* ADC external trigger enable */ adc_external_trigger_config(ADC0, ADC_INSERTED_CHANNEL, ENABLE); /* clear the ADC flag */ adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOC); adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC); /* enable ADC interrupt */ adc_interrupt_enable(ADC0, ADC_INT_EOIC);//使能注入通道的中斷 /* enable ADC */ adc_enable(ADC0); delay_1ms(1); /* ADC calibration and reset calibration */ adc_calibration_enable(ADC0);

(2)ADC 注入通道轉換完成服務函數(shù)

void ADC0_1_IRQHandler(void) { /* clear the ADC flag */ adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);//清除注入通道轉換完成標志位 /* read ADC inserted group data register */ inserted_data[0] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_0); inserted_data[1] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_1); inserted_data[2] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_2); inserted_data[3] = adc_inserted_data_read(ADC0, ADC_INSERTED_CHANNEL_3); }

6.5.ADC 使用注意事項

1、ADC通道的采集引腳未配置為模擬輸入,GD32要求通道IO口必須配置為模擬輸入;

2、ADC時鐘過高,ADC采樣時鐘高于ADC最高采樣時鐘獲取到的數(shù)據(jù)不具有參考意義,需要手動分頻到合適的ADC 要求的頻率;

3、ADC采樣值偏小或不穩(wěn)定,應該適當?shù)慕档虯DC時鐘,加大采樣周期的值;

4、ADC的查詢法在獲取ADC數(shù)值的時候,不允許重入,即不允許在同一時間調用ADC的數(shù)據(jù)讀取函數(shù);

5、ADC在使能之后需要進行短暫的延時,時間周期約為2毫秒左右,以保證ADC能正常啟動。


關鍵字:GD32  MCU  ADC  模塊 引用地址:【GD32 MCU 入門教程】GD32 MCU 常見外設介紹 (6) ADC 模塊介紹

上一篇:GD32開發(fā)實戰(zhàn)指南(基礎篇) 第20章 GD32的存儲結構
下一篇:基于GD32的段碼顯示器設計

推薦閱讀最新更新時間:2025-07-10 13:31

MSP430教程14:MSP430單片機ADC12模塊
MSP430模數(shù)轉換模塊--ADC12 MSP430單片機的ADC12模塊是一個12位精度的A/D轉換模塊,他具有高速度,通用性等特點。大部分都內(nèi)置了ADC模塊.而有些不帶ADC模塊的片子,也可通過利用內(nèi)置的模擬比較器來實現(xiàn)AD的轉換。在系列產(chǎn)品中,我們可以通過以下列表來簡單地認識他們的ADC功能實現(xiàn)。 系列型號 ADC功能實現(xiàn) 轉換精度 MSP430X1XX2 比較器實現(xiàn) 10位 MSP430F13X ADC模塊 12位 MSP430F14X ADC模塊 12位 MSP430F43X ADC模塊 12位 MSP430F44X ADC模塊 12位
[單片機]
GD32 MCU 移植教程】9、從 STM32F10x 系列移植到 GD32F30x 系列
1.本文簡介 GD32F30x 系列 MCU 是基于 Arm? Cortex?-M4 處理器的 32 位通用微控制器,與 STM32F10x 系列 MCU 保持高度兼容。本文主要從以下三個方面進行介紹:硬件資源對比、外設及性能對比以及從 STM32F10x 移植到 GD32F30x 的移植步驟,旨在讓開發(fā)者能夠快速從 STM32F10x 移植到 GD32F30x,縮短研發(fā)周期,加快產(chǎn)品開發(fā)進度。 2.GD32F30x vs STM32F10x 硬件資源對比 GD32F30x 和 STM32F10x 硬件引腳對比如表 2-1. GD32F30x 和 STM32F10xpin 對比所示,由該表可知,GD32F30x 與 STM32
[單片機]
【<font color='red'>GD32</font> <font color='red'>MCU</font> 移植教程】9、從 STM32F10x 系列移植到 GD32F30x 系列
Linear推出微型模塊模數(shù)轉換器LTM9012
加利福尼亞州米爾皮塔斯 (MILPITAS, CA) – 2012 年 4 月 25 日 – 凌力爾特公司 (Linear Technology Corporation) 推出 4 通道 14 位、125Msps 微型模塊 (μModule?) 模數(shù)轉換器 (ADC) LTM9012,該器件集成了固定增益驅動器、無源濾波和旁路電容。在醫(yī)療成像系統(tǒng)、MIMO (多輸入多輸出) 4G 基站等高通道數(shù)目應用中,集成的 μModule 轉換器可極大地減小占用的電路板面積。這種高集成度允許使用密度更大、尺寸更小的電路板,同時消除了在優(yōu)化驅動器至 ADC 接口時常常需要昂貴的重復布局。這樣一來,可以極大地減少設計和調試時間,并使產(chǎn)品更快上市。
[模擬電子]
GD32替換STM32遇到的坑之《HAL庫CAN無法初始化》
問題 使用GD32F103替換STM32F103發(fā)現(xiàn)同樣的代碼,STM32可以正常初始化CAN并且通信,而GD32無法初始化CAN,HAL_CAN_Init函數(shù)返回HAL_ERROR 但我之前使用標準庫,GD32和STM32是可以直接復用的 原因 經(jīng)過反復對比標準庫和HAL庫的區(qū)別,發(fā)現(xiàn)寫入退出睡眠的寄存器順序剛好相反 這是標準庫,先退出sleep,再初始化 這是HAL庫,先初始化,再推出sleep 嘗試替換了下順序,對STM32是沒有什么影響的,但GD32必須是先退出sleep再初始化 解決方法 在HAL_CAN_Init前先退出sleep模式,這樣可以不用修改HAL庫就可以兼容GD32了
[單片機]
GD32開發(fā)實戰(zhàn)指南(基礎篇) 第1章 開發(fā)環(huán)境搭建
開發(fā)環(huán)境: MDK:Keil 5.30 開發(fā)板:GD32F207I-EVAL MCU:GD32F207IK 1 GD32F207I-EVAL開發(fā)板簡介 筆者使用的開發(fā)板是兆易創(chuàng)新設計的GD32F207I-EVAL開發(fā)板。 GD32F207I-EVAL開發(fā)板使用 GD32F207IK作為主控制器,主頻120MHz、集成3MB Flash、256KB SRAM、通用定時器10、Adv. TM2、Basic TM2、系統(tǒng)時鐘1、看門狗2、RTC1、USART4、UART4、I2C3、SPI3、I2S1、SDIO1、CAN2.0B2、USB2.0 OTG FS1、以太網(wǎng)MAC1、TFT-LCD16、數(shù)字攝像頭接口1、Crypro/
[單片機]
STM32單片機學習筆記(5):ADC模數(shù)轉換器
項目簡介 利用CubMX生成基于32單片機的HAl庫工程,然后編寫程序在proteus上仿真驗證。本項目最適合沒有開發(fā)板的同學學習,零成本利用仿真軟件率先入門STM32單片機。這是第五部分針對STM32單片機內(nèi)置ADC模塊的學習和理解。 硬件模塊 STM32F103R4 LDR 串口模塊 軟件工具 CubMX Proteus KEIL 電路連接圖 工作流程 首先創(chuàng)建一個CubMX工程,選擇ADC模塊 其余保持默認即可。 然后就是編寫程序,程序代碼在后面會列出來,這里簡單說說自己遇到的一些問題。剛開始出來的結果全是0,但是網(wǎng)上有人說在實物開發(fā)板上是可以正常運行的。本來想放棄選用ADC0832模塊的,不過不幸的事
[單片機]
STM32<font color='red'>單片機</font>學習筆記(5):<font color='red'>ADC</font><font color='red'>模數(shù)轉換器</font>
51單片機——ADC模數(shù)轉換、DAC數(shù)模轉換PWM C語言入門編程
ADC: ADC(analog to digital converter)也稱為模數(shù)轉換器,是指一個將模擬信號轉變?yōu)閿?shù)字信號。單片機在采集模擬信號時,通常都需要在前端加上A/D芯片。AD轉換器(ADC)將模擬量轉換為數(shù)字量通常要經(jīng)過4個步驟:采樣、保持、量化和編碼。 ADC的分辨率是指對于允許范圍內(nèi)的模擬信號,它能輸出離散數(shù)字信號值的個數(shù)。這些信號值通常用二進制數(shù)來存儲,因此分辨率經(jīng)常用比特作為單位,且 這些離散值的個數(shù)是 2 的冪指數(shù)。 例如:12位ADC的分辨率就是12位,或者說分辨率為滿刻度的1/(2^12)。 一個10V滿刻度的12位ADC能分辨輸入電壓變化最小值是10V×1/(2^12 )=2.4mV
[單片機]
51<font color='red'>單片機</font>——<font color='red'>ADC</font>模數(shù)轉換、DAC數(shù)模轉換PWM C語言入門編程
ADC0809做的51單片機8路電壓采集
#include reg52.h float shuju; unsigned char sj; unsigned int gata; unsigned char gw,sw,bw; unsigned char kk,tdao; //4聯(lián)共陽數(shù)碼管,最高位顯示通道號,其他三位為電壓值 unsigned char code shuzi ={ 0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90}; unsigned char code duanxuan ={0x0f,
[單片機]
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved