在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

介紹如何通過(guò)意法的STM32 MCU實(shí)現(xiàn)用DMA完成多通道的AD采樣功能

貿(mào)澤電子設(shè)計(jì)圈 ? 2018-01-24 15:41 ? 次閱讀

嵌入式產(chǎn)品中有時(shí)候需要實(shí)現(xiàn)對(duì)外部的模擬量進(jìn)行采樣處理和記錄,而這就需要使用到ADC功能,將外部的模擬量轉(zhuǎn)換成數(shù)字量。而在復(fù)雜的嵌入式產(chǎn)品中,往往需要使用多路AD采樣,例如在智能家居產(chǎn)品,電池電量檢測(cè),熱敏溫度傳感器,煙霧傳感器,氣敏傳感器等都是可以使用ADC來(lái)實(shí)現(xiàn)采樣的。在本文章,將會(huì)介紹如何通過(guò)意法的STM32 MCU實(shí)現(xiàn)用DMA完成多通道的AD采樣功能。

什么叫ADC

ADC即模擬數(shù)字轉(zhuǎn)換器(英語(yǔ):Analog-to-digital converter)是用于將模擬形式的連續(xù)信號(hào)轉(zhuǎn)換為數(shù)字形式的離散信號(hào)的一類設(shè)備。一個(gè)模擬數(shù)字轉(zhuǎn)換器可以提供信號(hào)用于測(cè)量。與之相對(duì)的設(shè)備成為數(shù)字模擬轉(zhuǎn)換器。

影響AD采樣的因素有哪些

分辨率

分辨率指的是ADC的位數(shù),例如STM32F103MCU的內(nèi)部ADC的分辨率是12位,那么它所采樣的結(jié)果就在0-4096之間。

最小采樣單位值

根據(jù)基準(zhǔn)電壓和參考電壓的不同,其值也是不同的,例如在基準(zhǔn)電壓為3.3V,參考電壓最低為0V,最高為3.3V,采樣分辨率位12位的嵌入式系統(tǒng)中,則ADC的最小量程單位則為:3.3V/4096 = 0.00080566。

量程

在無(wú)負(fù)電壓的嵌入式系統(tǒng)中,量程范圍0-基準(zhǔn)電壓。

電源噪音

電源質(zhì)量直接影響了AD采樣的正確性和穩(wěn)定性,如果條件滿足,建議使用線性穩(wěn)壓源,若是使用開(kāi)關(guān)電源的話,需要在VDDA模擬電源輸入和參考電壓輸入接一個(gè)線性穩(wěn)壓管,同時(shí)要注意減小PCB板布局走線中結(jié)電容對(duì)采樣電路的影響。

STM32F103 ADC主要特性

12-位分辨率

轉(zhuǎn)換結(jié)束,注入轉(zhuǎn)換結(jié)束和發(fā)生模擬看門(mén)狗事件時(shí)產(chǎn)生中斷

單次和連續(xù)轉(zhuǎn)換模式

從通道0到通道n的自動(dòng)掃描模式

自校準(zhǔn)

帶內(nèi)嵌數(shù)據(jù)一致的數(shù)據(jù)對(duì)齊

通道之間采樣間隔可編程

規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換均有外部觸發(fā)選項(xiàng)

間斷模式

雙重模式(帶2個(gè)或以上ADC的器件)

ADC轉(zhuǎn)換時(shí)間:─ STM32F103xx 增強(qiáng)型產(chǎn)品: ADC 時(shí)鐘為 56MHz 時(shí)為 1μs(ADC 時(shí)鐘為 72MHz 為 1.17μs)─ STM32F101xx 基本型產(chǎn)品: ADC 時(shí)鐘為 28MHz 時(shí)為 1μs(ADC 時(shí)鐘為 36MHz 為 1.55μs)─ STM32F102xxUSB 型產(chǎn)品: ADC 時(shí)鐘為 48MHz 時(shí)為 1.2μs

ADC供電要求: 2.4V到3.6V

ADC輸入范圍: VREF- ≤ VIN ≤ VREF+● 規(guī)則通道轉(zhuǎn)換期間有DMA請(qǐng)求產(chǎn)生。

DMA簡(jiǎn)介

直接存儲(chǔ)器存取用來(lái)提供在外設(shè)和存儲(chǔ)器之間或者存儲(chǔ)器和存儲(chǔ)器之間的高速數(shù)據(jù)傳輸。無(wú)須CPU任何干預(yù),通過(guò)DMA數(shù)據(jù)可以快速地移動(dòng)。這就節(jié)省了CPU的資源來(lái)做其他操作。

STM32F103 DMA主要特性

12個(gè) 獨(dú)立的可配置的通道(請(qǐng)求)DMA1有7個(gè)通道, DMA2有5個(gè)通道

每個(gè)通道都直接連接專用的硬件DMA請(qǐng)求,每個(gè)通道都同樣支持軟件觸發(fā)。這些功能通過(guò)軟件來(lái)配置。

在七個(gè)請(qǐng)求間的優(yōu)先權(quán)可以通過(guò)軟件編程設(shè)置(共有四級(jí):很高、高、中等和低),假如在相等優(yōu)先權(quán)時(shí)由硬件決定(請(qǐng)求0優(yōu)先于請(qǐng)求1,依此類推) 。

獨(dú)立的源和目標(biāo)數(shù)據(jù)區(qū)的傳輸寬度(字節(jié)、半字、全字),模擬打包和拆包的過(guò)程。源和目標(biāo)地址必須按數(shù)據(jù)傳輸寬度對(duì)齊。

支持循環(huán)的緩沖器管理

每個(gè)通道都有3個(gè)事件標(biāo)志(DMA 半傳輸, DMA傳輸完成和DMA傳輸出錯(cuò)),這3個(gè)事件標(biāo)志邏輯或成為一個(gè)單獨(dú)的中斷請(qǐng)求。

存儲(chǔ)器和存儲(chǔ)器間的傳輸

外設(shè)和存儲(chǔ)器,存儲(chǔ)器和外設(shè)的傳輸

閃存、 SRAM、外設(shè)的SRAM、 APB1 APB2和AHB外設(shè)均可作為訪問(wèn)的源和目標(biāo)。

可編程的數(shù)據(jù)傳輸數(shù)目:最大為65536

如何實(shí)現(xiàn)多通道AD采樣的DMA傳輸

ADC功能引腳配置

void ADC_GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

/* Enable DMA clock */

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

/* Enable ADC1 and GPIOC clock */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);

//配置模擬通道輸入引腳

GPIO_InitStructure.GPIO_Pin = ADC1_PIN;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//配置引腳為模擬輸入模式

GPIO_Init(ADC1_GPIOX, &GPIO_InitStructure); // 輸入時(shí)不用設(shè)置速率

//配置模擬通道輸入引腳

GPIO_InitStructure.GPIO_Pin = ADC2_PIN;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//配置引腳為模擬輸入模式

GPIO_Init(ADC2_GPIOX, &GPIO_InitStructure); // 輸入時(shí)不用設(shè)置速率

//配置模擬通道輸入引腳

GPIO_InitStructure.GPIO_Pin = ADC3_PIN;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//配置引腳為模擬輸入模式

GPIO_Init(ADC3_GPIOX, &GPIO_InitStructure); // 輸入時(shí)不用設(shè)置速率

GPIO_InitStructure.GPIO_Pin = ADC4_PIN;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

GPIO_Init(ADC4_GPIOX,&GPIO_InitStructure);

}

配置多通道ADC功能

void ADC_Multichannel_Config(void){ADC_InitTypeDef ADC_InitStructure; ADC_DeInit(ADC1); //將外設(shè) ADC1 的全部寄存器重設(shè)為缺省值 /* ADC1 configuration ------------------------------------------------------*/ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作模式:ADC1和ADC2工作在獨(dú)立模式

ADC_InitStructure.ADC_ScanConvMode =ENABLE; //模數(shù)轉(zhuǎn)換工作在掃描模式

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //模數(shù)轉(zhuǎn)換工作在連續(xù)轉(zhuǎn)換模式

ADC_InitStructure.ADC_ExternalTrigConv =ADC_ExternalTrigConv_None; //外部觸發(fā)轉(zhuǎn)換關(guān)閉

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC數(shù)據(jù)右對(duì)齊

ADC_InitStructure.ADC_NbrOfChannel = M; //順序進(jìn)行規(guī)則轉(zhuǎn)換的ADC通道的數(shù)目

ADC_Init(ADC1, &ADC_InitStructure); //根據(jù)ADC_InitStruct中指定的參數(shù)初始化外設(shè)ADCx的寄存器 /* ADC1 regular channel11 configuration */ //設(shè)置指定ADC的規(guī)則組通道,設(shè)置它們的轉(zhuǎn)化順序和采樣時(shí)間 //ADC1,ADC通道x,規(guī)則采樣順序值為y,采樣時(shí)間為239.5周期ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1,ADC_SampleTime_239Cycles5 );

ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2,ADC_SampleTime_239Cycles5 );

ADC_RegularChannelConfig(ADC1, ADC_Channel_4,3,ADC_SampleTime_239Cycles5 );

ADC_RegularChannelConfig(ADC1, ADC_Channel_8,4,ADC_SampleTime_239Cycles5);

// 開(kāi)啟ADC的DMA支持(要實(shí)現(xiàn)DMA功能,還需獨(dú)立配置DMA通道等參數(shù))

ADC_DMACmd(ADC1, ENABLE);

/* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1

/* Enable ADC1 reset calibaration register */ ADC_ResetCalibration(ADC1); //復(fù)位指定的ADC1的校準(zhǔn)寄存器 /* Enable ADC1 reset calibaration register */ ADC_ResetCalibration(ADC1); //復(fù)位指定的ADC1的校準(zhǔn)寄存器

/* Start ADC1 calibaration */ADC_StartCalibration(ADC1); //開(kāi)始指定ADC1的校準(zhǔn)狀態(tài)

/* Check the end of ADC1 calibration */while(ADC_GetCalibrationStatus(ADC1)); //獲取指定ADC1的校準(zhǔn)程序,設(shè)置狀態(tài)則等待}

配置DMA通道,使能ADC轉(zhuǎn)換結(jié)果從外設(shè)到內(nèi)存

void DMA_Configuration(void) {/* ADC1 DMA1 Channel Config */

DMA_InitTypeDef DMA_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能DMA傳輸

DMA_DeInit(DMA1_Channel1); //將DMA的通道1寄存器重設(shè)為缺省值

DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR; //DMA外設(shè)ADC基地址

DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_Value; //DMA內(nèi)存基地址

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //內(nèi)存作為數(shù)據(jù)傳輸?shù)哪康牡?/p>

DMA_InitStructure.DMA_BufferSize = N*M; //DMA通道的DMA緩存的大小

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外設(shè)地址寄存器不變

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //內(nèi)存地址寄存器遞增

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //數(shù)據(jù)位寬度16位

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //數(shù)據(jù)寬度16位

DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //工作在循環(huán)緩存模式

DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMA通道 x擁有高優(yōu)先級(jí)

DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMA通道x沒(méi)有設(shè)置為內(nèi)存到內(nèi)存

DMA_Init(DMA1_Channel1, &DMA_InitStructure); //根據(jù)DMA_InitStruct中指定的參數(shù)DMA通道

開(kāi)始啟動(dòng)ADC轉(zhuǎn)換功能

void ADC_Start(void){ ADC_GPIO_Config(); ADC_Multichannel_Config(); DMA_Configuration(); ADC_SoftwareStartConvCmd(ADC1, ENABLE); //開(kāi)始ADC轉(zhuǎn)換 DMA_Cmd(DMA1_Channel1, ENABLE); //啟動(dòng)DMA通道}

使用冒泡排序法,對(duì)各通道的連續(xù)五次采樣結(jié)果取平均值

u16 ADC1_AveragValue(u16 ADC_Value[N][M]){ u16 ADC1_Value[N]; u8 i = 0; u8 j = 0; u16 temp = 0; u16 ADC1_Av = 0; for (i = 0;i < N;i++) { ADC1_Value[i] = ADC_Value[i][0]; } /*冒泡排序*/ for(i=0; iADC1_Value[j+1]) { temp=ADC1_Value[j]; ADC1_Value[j]=ADC1_Value[j+1]; ADC1_Value[j+1]=temp; } } } /*去掉最大值和最小值*/ for (i = 0; i

轉(zhuǎn)換采樣結(jié)果

(float)ADC1_AveragValue(ADC_Value)/4096*3.3)

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17148

    瀏覽量

    351195
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10900

    瀏覽量

    356005
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    561

    瀏覽量

    100586
  • AD采樣
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    15989

原文標(biāo)題:STM32如何實(shí)現(xiàn)用DMA完成多通道的AD采樣功能?看完這篇徹底懂了~

文章出處:【微信號(hào):Mouser-Community,微信公眾號(hào):貿(mào)澤電子設(shè)計(jì)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【資料分享】基于STM32AD通道采樣問(wèn)題

    基于STM32AD通道采樣問(wèn)題使用DMA實(shí)現(xiàn)AD兩個(gè)通道
    發(fā)表于 03-12 11:07

    DMA實(shí)現(xiàn)STM32ADC通道采集讀數(shù)問(wèn)題

    最近幾天一直在做用DMA實(shí)現(xiàn)STM32ADC通道采集,所有配置都是按著要求來(lái)的,ADC和DMA
    發(fā)表于 03-26 18:38

    關(guān)于STM32 ADC通道連續(xù)掃描采樣

    關(guān)于STM32ADC通道連續(xù)掃描采樣DMA循環(huán)傳輸。通過(guò)ADC
    發(fā)表于 08-19 19:48

    STM32通道DMA—ADC采樣 精選資料推薦

    title: STM32通道DMA—ADC采樣tags: STM32date: 2019-02
    發(fā)表于 08-04 07:19

    通過(guò)CubeMx實(shí)現(xiàn)ADC通道掃描采集DMA方式

    項(xiàng)目簡(jiǎn)介任務(wù):通過(guò)CubeMx實(shí)現(xiàn)ADC通道掃描采集DMA方式(無(wú)中斷)采集內(nèi)部溫度傳感器的溫度通道
    發(fā)表于 08-11 08:14

    STM32通道DMA—ADC如何進(jìn)行采樣

    STM32通道DMA—ADC如何進(jìn)行采樣
    發(fā)表于 10-13 06:58

    怎么實(shí)現(xiàn)通道ADC通過(guò)DMA數(shù)據(jù)采集?

    怎么實(shí)現(xiàn)通道ADC通過(guò)DMA數(shù)據(jù)采集?
    發(fā)表于 11-18 06:46

    stm32 定時(shí)器觸發(fā)ADC通道采樣+DMA提取數(shù)據(jù)相關(guān)資料下載

    stm32g0 定時(shí)器觸發(fā)ADC通道采樣+DMA提取數(shù)據(jù)stm32g0 定時(shí)器觸發(fā)ADC
    發(fā)表于 02-15 06:46

    應(yīng)用筆記(三)| 運(yùn)用DMA 功能實(shí)現(xiàn)高級(jí)定時(shí)器和ADC 的同步觸發(fā)采樣

    前言在做 BLDC 電機(jī)控制時(shí),需要 ADC 的采樣時(shí)刻和定時(shí)器產(chǎn)生的 PWM 波形相配合,才能獲取準(zhǔn)確的采樣值, 本文介紹了 CW32F030 系列芯片通過(guò)運(yùn)用
    發(fā)表于 07-08 17:02

    ADC—通道DMA

    程序簡(jiǎn)介 -工程名稱:ADC通道DMA) -實(shí)驗(yàn)平臺(tái): 秉火STM32 F429 開(kāi)發(fā)板 -MDK版本:5.16 -ST固件庫(kù)版本:1.5.1 【 !】
    發(fā)表于 12-13 15:31 ?33次下載
    ADC—<b class='flag-5'>多</b><b class='flag-5'>通道</b>(<b class='flag-5'>DMA</b>)

    STM32實(shí)現(xiàn)用DMA完成通道AD采樣資料下載

    電子發(fā)燒友網(wǎng)為你提供STM32實(shí)現(xiàn)用DMA完成通道AD采樣
    發(fā)表于 03-29 16:47 ?9次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>實(shí)現(xiàn)用</b><b class='flag-5'>DMA</b><b class='flag-5'>完成</b><b class='flag-5'>多</b><b class='flag-5'>通道</b>AD<b class='flag-5'>采樣</b>資料下載

    stm32 定時(shí)器觸發(fā)ADC通道采樣+DMA提取數(shù)據(jù)

    stm32g0 定時(shí)器觸發(fā)ADC通道采樣+DMA提取數(shù)據(jù)stm32g0 定時(shí)器觸發(fā)ADC
    發(fā)表于 12-16 16:56 ?68次下載
    <b class='flag-5'>stm32</b> 定時(shí)器觸發(fā)ADC<b class='flag-5'>多</b><b class='flag-5'>通道</b><b class='flag-5'>采樣</b>+<b class='flag-5'>DMA</b>提取數(shù)據(jù)

    STM32的ADC通道采樣

    基于STM32Cube的ADC通道采樣STMCube+MDK用hal庫(kù)寫(xiě)的好處就是可以不用進(jìn)行配置IO口發(fā)步驟.也有良好的兼容性,更換芯片的時(shí)候改代碼也簡(jiǎn)單.首先打開(kāi)
    發(fā)表于 12-24 19:29 ?15次下載
    <b class='flag-5'>STM32</b>的ADC<b class='flag-5'>多</b><b class='flag-5'>通道</b><b class='flag-5'>采樣</b>

    STM32單片機(jī)實(shí)現(xiàn)DMA+ADC+UART功能

    。于是想到了ADC采樣的數(shù)據(jù)用DMA功能存儲(chǔ),并通過(guò)串口打印。但是串口打印依然要占用單片機(jī)時(shí)間,那能不能串口數(shù)據(jù)的輸出也采用 DMA
    發(fā)表于 12-28 19:25 ?34次下載
    <b class='flag-5'>STM32</b>單片機(jī)<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>DMA</b>+ADC+UART<b class='flag-5'>功能</b>

    運(yùn)用 DMA 功能實(shí)現(xiàn)高級(jí)定時(shí)器和 ADC 的同步觸發(fā)采樣

    運(yùn)用DMA功能實(shí)現(xiàn)高級(jí)定時(shí)器和ADC的同步觸發(fā)采樣在做BLDC電機(jī)控制時(shí),需要ADC的采樣時(shí)刻和定時(shí)器產(chǎn)生的PWM波形相配合,才能獲取準(zhǔn)確的
    發(fā)表于 06-06 13:35 ?31次下載
    主站蜘蛛池模板: 免费午夜在线视频| 亚洲五月六月丁香激情| 黄视频网站在线| 亚洲高清免费在线观看| 久久2017| 人人干人人干| 婷婷 夜夜| 好黄好猛好爽好痛的视频| 羞涩妩媚玉腿呻吟嗯啊销魂迎合| 经典三级一区二区三区视频| 欧洲国产精品精华液| 国产精品污视频| 特一级黄色毛片| 色综合精品| www.色播| 欧美黄区| 日本a级影院| 高清性色生活片欧美在线| 国内精品手机在线观看视频| 在线免费黄| 国产精品伦视频观看免费| 午夜视频啪啪| 日本三级吹潮| 99婷婷| 中文一区在线观看| 欧美1区| 国外免费精品视频在线观看| 亚洲高清色| 五月天婷婷丁香| 国产黄色a三级三级三级| 狠狠色影院| 奇米影视第四色7777| av手机在线播放| 国产精品igao在线观看樱花日本| 午夜色a大片在线观看免费| 日韩欧美一区二区三区视频| 视频在线观看高清免费看| 中国一级特黄aa毛片大片| 丁香六月婷婷在线| 亚洲视频一区网站| 国产日本在线观看|