国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32雙路ADC注入通道和規(guī)則通道采樣

這篇具有很好參考價值的文章主要介紹了STM32雙路ADC注入通道和規(guī)則通道采樣。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

電機控制使用四路注入通道采集,參考ST官方庫,使用定時器10us觸發(fā)一次,使用ADC1和ADC2各2路注入通道。

需要一路ADC進行規(guī)則采樣油門信號,使用中斷的話會和注入通道中斷放在同一個函數(shù)里面 ,我不喜歡,所以使用了DMA中斷。

PreKnowledge:

規(guī)則通道:最多16個規(guī)則通道,采樣數(shù)據(jù)存儲ADCx-->DR

注入通道:最多4個注入通道,采樣數(shù)據(jù)存儲ADCx-->JDR。注入通帶顧名思義是在規(guī)則通道轉(zhuǎn)換中插隊的通道。在規(guī)則通道轉(zhuǎn)換的時候有注入通道的信息進來,則先將注入通道轉(zhuǎn)換結(jié)束再回到規(guī)則通道,所以注入通道只有在規(guī)則通道存在時才會出現(xiàn)。

DMA通道:DMA轉(zhuǎn)換注入通道還是規(guī)則通道,外設(shè)地址進行不同設(shè)置就行。還有一個,就是DMA只有在規(guī)則通道轉(zhuǎn)換結(jié)束的時候才會被觸發(fā),記不清在哪篇博客里面看到的了,但是官方文檔中沒找到這句話。

使用芯片:STM32F103C8T6? ? 軟件:keil5

1.ADC設(shè)置

    ADC_InitTypeDef ADC_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 |RCC_APB2Periph_ADC2, ENABLE);
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);  		//ADC時鐘=(晶振頻率/分頻)72Mhz/6 = 12Mhz
	
	ADC_InitStructure.ADC_Mode = ADC_Mode_RegInjecSimult; 	//混合的同步規(guī)則和注入
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
	ADC_InitStructure.ADC_ScanConvMode = ENABLE;
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;   //規(guī)則組的外部觸發(fā)  關(guān)閉
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
	ADC_InitStructure.ADC_NbrOfChannel = 1;                    //規(guī)則組通道數(shù)量
	ADC_Init(ADC1, &ADC_InitStructure);

	ADC_InitStructure.ADC_NbrOfChannel = 2;
	ADC_Init(ADC2, &ADC_InitStructure);            //ADC2的規(guī)則通道,因為使用ADC2的注入通道
	
	ADC_RegularChannelConfig(ADC1,ADC_Channel_5,1,ADC_SampleTime_71Cycles5);					//ADC1規(guī)則通道設(shè)置,ADC1的規(guī)則通道使用所以配置,ADC2的規(guī)則通道實際上沒有使用
	ADC_Cmd(ADC1, ENABLE);
	ADC_Cmd(ADC2, ENABLE);
	
	ADC_ResetCalibration(ADC1);
	ADC_ResetCalibration(ADC2);
	while(ADC_GetResetCalibrationStatus(ADC1) & ADC_GetResetCalibrationStatus(ADC2)) ;
	
	ADC_StartCalibration(ADC1);
	ADC_StartCalibration(ADC2);
	while(ADC_GetCalibrationStatus(ADC1) & ADC_GetCalibrationStatus(ADC2)) ;
	
/******************************注入通道配置*************************/	
	ADC_InjectedSequencerLengthConfig(ADC1, 2);
    ADC_InjectedSequencerLengthConfig(ADC2, 2);
	
	ADC_InjectedChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_7Cycles5);			
	ADC_InjectedChannelConfig(ADC2, ADC_Channel_1, 1, ADC_SampleTime_7Cycles5);
    ADC_InjectedChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_7Cycles5);
	ADC_InjectedChannelConfig(ADC2, ADC_Channel_3, 2, ADC_SampleTime_7Cycles5);

/******************************外部觸發(fā)源設(shè)置**************************************/
	ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_T1_CC4); 						
	ADC_ExternalTrigInjectedConvConfig(ADC2, ADC_ExternalTrigInjecConv_T1_CC4);
	
	ADC_ExternalTrigInjectedConvCmd(ADC1, ENABLE);		//注入使能
    ADC_ExternalTrigInjectedConvCmd(ADC2, ENABLE);
	ADC_ClearITPendingBit(ADC1, ADC_IT_JEOC);        
	
	ADC_ITConfig(ADC1, ADC_IT_JEOC, ENABLE);        //注入中斷使能
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);        //規(guī)則通道使能
	
/*********************ADC注入通道中斷,規(guī)則通道不使用ADC中斷**********************/
	NVIC_InitTypeDef NVIC_InitStruct ;
	NVIC_InitStruct.NVIC_IRQChannel =  ADC1_2_IRQn ;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0 ;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1 ;
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE ;
	NVIC_Init(&NVIC_InitStruct);

2. DMA配置

    DMA_InitTypeDef DMA_InitStructure;
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
	
	DMA_DeInit(DMA1_Channel1);
	
	DMA_InitStructure.DMA_BufferSize =1;																										//DMA緩沖區(qū)大小
	DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;																			//DMA數(shù)據(jù)來源外設(shè)
	DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;																						//內(nèi)存到內(nèi)存失能
	DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)(&Value_Regular);											//內(nèi)存基地址
	DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;											//內(nèi)存數(shù)據(jù)大小
	DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;																	//存儲器地址遞增
	DMA_InitStructure.DMA_Mode =DMA_Mode_Circular;
	DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&( ADC1->DR ));
	DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
	DMA_InitStructure.DMA_PeripheralInc = DISABLE;
	DMA_InitStructure.DMA_Priority = DMA_Priority_High;
	DMA_Init(DMA1_Channel1,&DMA_InitStructure);
	
	DMA_ITConfig(DMA1_Channel1,DMA1_IT_TC1,ENABLE);
	DMA_Cmd(DMA1_Channel1,ENABLE);
	ADC_DMACmd(ADC1,ENABLE);
	
	/***********************************規(guī)則通道的DMA中斷******************************************/
	NVIC_InitTypeDef NVIC_InitStruct ;
	NVIC_InitStruct.NVIC_IRQChannel =  DMA1_Channel1_IRQn ;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0 ;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2 ;
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE ;
	NVIC_Init(&NVIC_InitStruct);

3.DMA中斷

? 在DMA中斷中收集數(shù)據(jù),10個數(shù)據(jù)進行求取平均值濾波。此處不貼代碼了,簡單的求和取平均值。

調(diào)試過程中遇到的問題:

1. 有數(shù)據(jù),數(shù)據(jù)變化很快,但是沒有辦法執(zhí)行原來的主程序;

? ? ? ? 原因:在使用DMA傳輸數(shù)據(jù)時會下意識的使用ADC連續(xù)轉(zhuǎn)換模式,這樣會導(dǎo)致注入通道也連續(xù)轉(zhuǎn)換,自然就在ADC的中斷里出不來了。

解決:將連續(xù)轉(zhuǎn)換更改為單次轉(zhuǎn)換,DMA中使用全局變量進行濾波。

2.數(shù)據(jù)中有0,也有正常數(shù)據(jù)

? ? ? ? 原因:之前是電機控制那邊寫的底層,ADC1中定義了2個規(guī)則通道,所以導(dǎo)致規(guī)則通道會采集兩個數(shù)據(jù),另外一個通道沒有數(shù)據(jù),自然是0;

解決:在ADC_Structure中的數(shù)量中,將ADC1的值改為1。

3.采集的數(shù)據(jù)沒有問題,但是濾波后的數(shù)據(jù)恒溢出

????????原因:求和數(shù)據(jù)定義在函數(shù)中,導(dǎo)致每次DMA中斷進行數(shù)據(jù)求和時,sum變量都重新變成了0,又進行除法運算,所以會溢出。

解決:將sun定義成全局變量。

ADC配置說明

ADC1中使用了1路規(guī)則通道,2路注入通道,由于注入通道的數(shù)據(jù)設(shè)置外部TIM觸發(fā),所以必須設(shè)置為單次觸發(fā)模式。

原本我以為.ADC_NbrOfChannel是指ADC中所有的通道,將這個值設(shè)置成了3,1路規(guī)則通道,2路注入通道,導(dǎo)致在采集的時候會有2個數(shù)據(jù)為0。后來在瀏覽博客的時候偶然發(fā)現(xiàn)這個設(shè)置是單指規(guī)則通道的,所以改成1了。

而ADC2中配置成2,但是沒有使用ADC_RegularChannelConfig函數(shù)進行配置,沒有打開ADC2的規(guī)則通道,其實并不受影響。文章來源地址http://www.zghlxwxcb.cn/news/detail-851071.html

到了這里,關(guān)于STM32雙路ADC注入通道和規(guī)則通道采樣的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • STM32模擬SPI時序配置讀取雙路24位模數(shù)轉(zhuǎn)換(24bit ADC)芯片ADS1220采樣數(shù)據(jù)

    STM32模擬SPI時序配置讀取雙路24位模數(shù)轉(zhuǎn)換(24bit ADC)芯片ADS1220采樣數(shù)據(jù)

    TI公司的雙路24位模數(shù)轉(zhuǎn)換芯片ADS1220具有比較豐富的模式配置,雙路差分輸入采樣也可以配置為4路單端輸入信號采樣。有多種參考電壓源可選,內(nèi)部增益(從1倍到128倍)和輸出率(可達到2K/s)可配置,模擬電壓和數(shù)字電路電壓可單獨設(shè)置等等。這里介紹STM32訪問和讀取ADS12

    2023年04月09日
    瀏覽(119)
  • STM32基于hal庫的adc以DMA的多通道采樣以及所遇問題解決

    STM32基于hal庫的adc以DMA的多通道采樣以及所遇問題解決

    目錄 準備 配置 步驟 ?總結(jié) ? 正點原子的STM32F103ZET6開發(fā)板(精英版) CUBEMX配置軟件 KEIL5 ?右對齊就是正常的數(shù)據(jù)格式。左對齊除以16后得正常數(shù)據(jù)。(當(dāng)輸出非常大時考慮是否改了對齊方式,默認都是右對齊) ?掃描模式,連續(xù)轉(zhuǎn)換模式使能。(多通道下掃描模式自動使能

    2024年02月04日
    瀏覽(31)
  • STM32G071開發(fā)筆記:使用定時器(TRGO功能)觸發(fā)ADC規(guī)則采樣以避免低側(cè)電流采樣所帶來的PWM開關(guān)噪聲

    STM32G071開發(fā)筆記:使用定時器(TRGO功能)觸發(fā)ADC規(guī)則采樣以避免低側(cè)電流采樣所帶來的PWM開關(guān)噪聲

    目錄 背景闡述: 導(dǎo)致問題的原因: 解決方案: 實驗方案: 實驗驗證: 可改進的地方 結(jié)尾 RT:筆者在做一個項目的時候遇到了一個因為PWM開關(guān)噪聲干擾導(dǎo)致ADC采樣波動大的問題,經(jīng)過2天的研究終于想到了一個比較好的辦法,這個方法不一定適合所有項目,但和我當(dāng)前項目

    2024年01月25日
    瀏覽(98)
  • 【N32L40X】學(xué)習(xí)筆記11-ADC規(guī)則通道采集+dma數(shù)據(jù)傳輸

    【N32L40X】學(xué)習(xí)筆記11-ADC規(guī)則通道采集+dma數(shù)據(jù)傳輸

    支持 1 個 ADC,支持單端輸入和差分輸入,最多可測量 16 個外部和 3 個內(nèi)部源。 支持 12 位、10 位、8 位、6 位分辨率。 ADC 時鐘源分為 工作時鐘源、采樣時鐘源和計時時鐘源 僅可配置 AHB_CLK 作為 工作時鐘源 。 可配置 PLL 作為 采樣時鐘源 ,最高可到 64MHz,支持分頻 1,2,4,6,8,

    2024年02月15日
    瀏覽(30)
  • stm32f030 學(xué)習(xí)筆記 (1)adc單/雙通道采集

    stm32f030 學(xué)習(xí)筆記 (1)adc單/雙通道采集

    ?1.實現(xiàn)單通道 ??????? 如 pa0 pa1 pa2 溫度傳感器 ??????? 1.實現(xiàn)單通道步驟 ??????????????? 1):配置RCC?? GPIOA,UART1,ADC1使能 ????????????????????????RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE); ?? ??????????????? ???? RCC_APB2PeriphClockCmd(RCC_APB2Periph_A

    2024年02月15日
    瀏覽(28)
  • STM32 ADC采樣

    STM32 ADC采樣

    目錄 1.基礎(chǔ)概念 2.原理:ADC采樣過程分為四步:采樣、保持、量化、編碼。 3.采樣定理 4.采樣保持放大器(SHA) 5.ADC電壓值轉(zhuǎn)換 6.ADC輪詢采樣 1.基礎(chǔ)概念 ADC 全稱:Analog-to-Digital Converter,指模擬/數(shù)字轉(zhuǎn)換器,就是將模擬信號轉(zhuǎn)換成數(shù)字信號 ①模擬信號:是連續(xù)變化的,具有電

    2024年02月04日
    瀏覽(20)
  • STM-32:ADC模數(shù)轉(zhuǎn)換器—ADC單通道轉(zhuǎn)換/ADC多通道轉(zhuǎn)換

    STM-32:ADC模數(shù)轉(zhuǎn)換器—ADC單通道轉(zhuǎn)換/ADC多通道轉(zhuǎn)換

    ADC(Analog-Digital Converter),意即模擬-數(shù)字轉(zhuǎn)換器,簡稱模數(shù)轉(zhuǎn)換器。ADC可以將引腳上連續(xù)變化的模擬電壓轉(zhuǎn)換為內(nèi)存中存儲的數(shù)字變量,建立模擬電路到數(shù)字電路的橋梁。與ADC相對應(yīng),從數(shù)字電路到模擬電路的橋梁即DAC(Digital-Analog Convertor),數(shù)模轉(zhuǎn)換器。 DAC不是唯一可以

    2024年02月09日
    瀏覽(23)
  • STM32實現(xiàn)ADC采樣

    STM32實現(xiàn)ADC采樣

    功能:在單片機上對聲音和光強進行采樣,通過串口輸出其采樣值。 工具:實驗用到CubeIDE和Cubeprogrammer兩個軟件,串口調(diào)試助手APP,以及STM32L431RCT6單片機。 1、配置使能串口: 2、ctrl+s生成代碼。 3、在usart.h中添加頭文件。 4、在usart.c中實現(xiàn)printf。 ?編譯代碼??梢栽趍ain.c文

    2024年02月09日
    瀏覽(26)
  • STM32ADC同步采樣

    STM32ADC同步采樣

    本文主要講解如何實現(xiàn)STM32ADC同步采樣。 所需工具: 開發(fā)板:STM32F103RCT6 STM32CubeMX IDE: Keil-MDK 同步采樣可以讓多個ADC同時采集它們各自的輸入信號,并且保留它們之間的相位關(guān)系,這有助于更有效地捕捉信號的動態(tài)變化,特別是對于相位頻率分析來說,它具有重要的應(yīng)用價值。

    2023年04月14日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包