娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年11月05日(星期二)

正在發生

2021年11月05日 | STM32F103ZET6 — ADC

發布者:EuphoricVoyage 來源: eefocus關鍵字:STM32F103ZET6  ADC  模擬數字轉換器 手機看文章 掃描二維碼
隨時隨地手機看文章

介紹

STM32F103ZET6 擁有12位ADC,是一種逐次逼近型模擬數字轉換器


12bits ADC 代表了 ADC 的轉換精度。存在輸入參考電壓的情況下,ADC 將模擬信號經信號線輸入,進行模擬信號的采樣,再將采樣后的數字信號存放于數據寄存器中,以供軟件進行讀取(CPU或者DMA方式),存儲的數據是經過參考電壓比較后,按照12bits 進行換算得到。


ADC輸入范圍:Vref- ≤ Vin ≤ Vref+


ADC 時鐘

ADC 的輸入時鐘 ADCCLK 不能超過 14MHz(Datasheet規定)它是由PCLK2經分頻產生。


轉換模式

支持單次轉換和連續轉換,顧名思義,單次轉換就僅僅只進行一次轉換,然后就將值寫入數據寄存器,連續轉換時不間斷的進行ADC操作,并將值寫入到數據寄存器。

通道描述

ADC有兩組通道:規則通道組和注入通道組。


規則通道組:相當于你正常運行的程序。


注入通道組:就相當于中斷。在你程序正常執行的時候,中斷是可以打斷你的執行的。同這個類似,注入通道的轉換可以打斷規則通道的轉換, 在注入通道被轉換完成之后,規則通道才得以繼續轉換。 


也就是說,注入通道可以來打斷當前正在進行的規則的 ADC 數據轉換,暫時理解成為優先級的概念即可。


● 規則通道組:由多達16個轉換組成。規則通道和它們的轉換順序在ADC_SQRx寄存器中選擇。規則組中轉換的總數應寫入ADC_SQR1寄存器的L[3:0]位中。 


● 注入通道組:由多達4個轉換組成。注入通道和它們的轉換順序在ADC_JSQR寄存器中選擇。注入組里的轉換總數目應寫入ADC_JSQR寄存器的L[1:0]位中。 


也就是說,在規則通道組,支持 16 路模擬信號同時輸入,并進行這些通道的模擬信號轉數字信號的采樣,注入通道也是一樣。


中斷描述

● 如果一個規則通道被轉換:

─  轉換數據被儲存在16位ADC_DR寄存器中

─  EOC(轉換結束)標志被設置


─  如果設置了EOCIE,則產生中斷。


● 如果一個注入通道被轉換:

─  轉換數據被儲存在16位的ADC_DRJ1寄存器中

─  JEOC(注入轉換結束)標志被設置

─  如果設置了JEOCIE位,則產生中斷。

image.png

通道掃描

此模式用來掃描一組模擬通道。


掃描模式可通過設置 ADC_CR1 寄存器的 SCAN 位來選擇。一旦這個位被設置,ADC 掃描所有被 ADC_SQRX 寄存器(對規則通道)或 ADC_JSQR (對注入通道)選中的所有通道。在每個組的每個通道上執行單次轉換。在每個轉換結束時,同一組的下一個通道被自動轉換。如果設置了CONT位,轉換不會在選擇組的最后一個通道上停止,而是再次從選擇組的第一個通道繼續轉換。


如果設置了DMA位,在每次EOC后,DMA控制器把規則組通道的轉換數據傳輸到SRAM中。而注入通道轉換的數據總是存儲在ADC_JDRx寄存器中


校準

ADC有一個內置自校準模式。校準可大幅減小因內部電容器組的變化而造成的準精度誤差。在校準期間,在每個電容器上都會計算出一個誤差修正碼(數字值),這個碼用于消除在隨后的轉換中每個電容器上產生的誤差。


建議在每次上電后執行一次校準。


啟動校準前, ADC 必須處于關電狀態 (ADON=’0’) 超過至少兩個 ADC 時鐘周期。


采樣時間

ADC 的轉換時間不僅僅和 ADC 的時鐘有關,還和采樣時間有關,ADC使用若干個ADC_CLK周期對輸入電壓采樣,采樣周期數目可以通過 ADC_SMPR1 和 ADC_SMPR2 寄存器中的SMP[2:0]位更改。每個通道可以分別用不同的時間采樣。


ADC  的轉換時間的計算公式是:Tconv = 采樣時間+ 12.5個周期


例如:當ADCCLK=14MHz,采樣時間為1.5周期,Tconv = 1.5 + 12.5 = 14周期 = 1μs


環境描述

參考電壓中,單板上Vref-直接接到了 GND,Vref+接到了Vcc 3.3V。


單板上,使用分壓電阻進行模擬輸入,電阻可調,并使用 PC1 端口進行輸入

配置過程

配置過程分為三段:


● GPIO 口的配置


● DMA 的配置


● ADC 的配置


GPIO 口的配置

static void SK_ADC1GPIOInit(void)

{

    GPIO_InitTypeDef stGpioInit;

 

    /* Enable ADC1 and GPIOC clock */

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);

 

    /* Configure PC.01  as analog input */

    stGpioInit.GPIO_Pin = GPIO_Pin_1;

    stGpioInit.GPIO_Mode = GPIO_Mode_AIN;

    GPIO_Init(GPIOC, &stGpioInit);

}


DMA 的配置

DMA配置,使用了 DMA1 通道,故配置 DMA1 的相關寄存器:

1. 開啟 DMA1 時鐘


2. 復位 DMA1


3. 配置外設地址和數據傳送的內存地址


4. 數據傳送方向為外設-->內存


5. 數據傳送大小為 1 個(half word,16bit)


6. 關閉內存和外設地址增長


7. 配置內存數據和外設數據寬度為 16bit


8. 配置循環模式


9. 配置優先級,同時禁用mem2mem


static void SK_ADC1DMAInit(void)

{

    DMA_InitTypeDef stDMA_Init;

 

    /* Enable DMA clock */

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

 

    /* DMA channel1 configuration */

    DMA_DeInit(DMA1_Channel1);

 

    stDMA_Init.DMA_PeripheralBaseAddr = ADC1_DR_Address;

    stDMA_Init.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;

    stDMA_Init.DMA_DIR = DMA_DIR_PeripheralSRC;

    stDMA_Init.DMA_BufferSize = 1;

    stDMA_Init.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

    stDMA_Init.DMA_MemoryInc = DMA_MemoryInc_Disable;

    stDMA_Init.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

    stDMA_Init.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

    stDMA_Init.DMA_Mode = DMA_Mode_Circular;

    stDMA_Init.DMA_Priority = DMA_Priority_High;

    stDMA_Init.DMA_M2M = DMA_M2M_Disable;

 

    DMA_Init(DMA1_Channel1, &stDMA_Init);

    /* Enable DMA channel1 */

    DMA_Cmd(DMA1_Channel1, ENABLE);

}


ADC 的配置

由于測試的應用場景較為簡單,很多用法都用不到,故在配置的時候,就沒有使能:


比如模擬看門狗,注入轉換,雙 ADC 等等,這里只使用了最簡單的單通道的 ADC


配置流程如下:


1. 首先配置 ADC 時鐘,由于 ADC 的時鐘最大支持 14MHz,系統主頻為 72MHz,分給  PCLK2 也為 72MHz,而 ADC 的分頻器支持的分頻系數僅為:2/4/6/8,暫時設置成為 8 分頻,即 72/8 = 9MHz

2. 配置 ADC 為獨立模式(雙模式選擇中配置)


3. 關閉 SCAN 模式(多路 ADC 使用到,單路就暫時不用)


4. 開啟連續轉換模式


5. 關閉外部觸發,由軟件獨立觸發


6. 數據右對齊


7. 轉換通道數目為 1個規則通道


由于這里沒有使用到注入通道和外部觸發,所以少配置很多寄存器。


8. 配置 ADC 1的 Ch11 的采樣時間和規則采樣的通道數目


9. 開啟 ADC1 的 DMA


10. 開啟并喚醒 ADC1


11. 初始化校準寄存器并進行 ADC1 的校準


void SK_ADC1Init(void)

{

    ADC_InitTypeDef stADC_Init;

 

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

 

    /// Step 1 : Configure I/O Pin First

    SK_ADC1GPIOInit();

 

    /// Step 2 : Configure DMA

    SK_ADC1DMAInit();

 

    /// Step 3 : PCLK2 div in 8, ADC CLK => 9Mhz

    RCC_ADCCLKConfig(RCC_PCLK2_Div8);

 

    /// Step 4 : Configure Basic function of ADC1

    stADC_Init.ADC_Mode = ADC_Mode_Independent;

    stADC_Init.ADC_ScanConvMode = DISABLE;

    stADC_Init.ADC_ContinuousConvMode = ENABLE;

    stADC_Init.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

    stADC_Init.ADC_DataAlign = ADC_DataAlign_Right;

    stADC_Init.ADC_NbrOfChannel = 1;

    ADC_Init(ADC1, &stADC_Init);

 

    /// Step 5 : Configure Ch11 sample rate

    ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_55Cycles5);

 

    /// Step 6 : Enable ADC1 DMA

    ADC_DMACmd(ADC1, ENABLE);

 

    /// Step 7 : Enable ADC1

    ADC_Cmd(ADC1, ENABLE);

 

    /// Step 8 : Reset Calibration Register

    ADC_ResetCalibration(ADC1);

    while(ADC_GetResetCalibrationStatus(ADC1));

 

    /// Step 9 : Start Calibration

    ADC_StartCalibration(ADC1);

    while(ADC_GetCalibrationStatus(ADC1));

 

    /// Step 10 : Software trigger ADC1

    ADC_SoftwareStartConvCmd(ADC1, ENABLE);

}


最后別忘了,12 bit 精度對應的是 4096 的顆粒度,即,將得到的數字劃分成為 4096 份,轉換成為電壓的話,就是:


(float)ADC_ConvertedValue/4096*3.3

關鍵字:STM32F103ZET6  ADC  模擬數字轉換器 引用地址:STM32F103ZET6 — ADC

上一篇:STM32F103ZET6 — USART
下一篇:STM32F103ZET6 — EXTI

推薦閱讀

現在,在全球范圍內擁有10萬臺機器人,并且該計劃增加更多機器人員工。 但亞馬遜的全球勞動力規模是微軟的三倍,比Facebook的員工規模大18倍。而上周,亞馬遜表示將在北美開設第二個總部,提供多達50000個新的工作崗位。 然而令人不解的是,亞馬遜在提供這么多崗位的同時,其在自動化方面也走在前沿。亞馬遜引進不同類型的機器人來工作,并由人類管理...
TI DLP?技術在增強現實(AR)抬頭顯示(HUD)等汽車應用中越來越受歡迎,主要原因之一是其具有明亮鮮艷的色彩。為了更好地理解顏色在AR HUD中的作用(如下圖所示),我先介紹一下色彩飽和度和色域的概念。AR HUD示例色彩飽和度是指圖像中色彩的強度。看看下圖,您可以輕松分辨出哪種顏色的飽和度更高。色彩的飽和度越低,看起來也就越暗。用技術術語來...
燃油泵是汽車內非常重要的一個部件,目前絕大部分的電動燃油泵都是采用直流有刷電機來控制的,但基于無刷直流電機的電動燃油泵越來越受歡迎,特別是在高端品牌汽車。本方案可以滿足這個開發需求。一、S12ZVM-EFP 方案介紹 本方案以 S12ZVML128 為主控,S12ZVM 系列產品是 NXP 推出的汽車級電機控制單芯片集成方案,其將微處理器、電源、驅動及各種...
全球5G手機市場需求暴增推動高通業績增長。當地時間周三盤后,高通公布了截至9月26日的2021財年第四季度財報,收入同比增長43%至93.2億美元,高于市場預期的88.6億美元;每股經調整盈利為2.55美元,優于市場預期的1.95美元。財報發布后,高通股價在盤后交易中漲7.52%。過去一年,高通股價累計上漲7.37%。各主要業務上,高通技術授權業務QTL(Qualcomm Tech...

史海拾趣

問答坊 | AI 解惑

日本菊水COS6100G示波器說明書

急需日本菊水日本菊水COS6100G示波器說明書,中英文均可,謝謝!!…

查看全部問答∨

第二屆(1995年)全國大學生電子設計競賽題目

本帖最后由 paulhyde 于 2014-9-15 09:00 編輯 …

查看全部問答∨

電源資料

需要的話就下把   還不錯…

查看全部問答∨

45個人研發團隊,研發老總4個人。無門無派員工生存狀況惡劣!

我們公司研發團隊45個,4個研發老總管理這45個人。4個老總4個山頭。沒有山頭靠的員工,活多,錢少!生存困難!…

查看全部問答∨

【verilog語法分析】強制激勵

  在一個過程塊中,可以用兩種不同的方式對信號變量或表達式進行連續賦值。 §   過程連續賦值往往是不可以綜合的,通常用在測試模塊中。 §    兩種方式都有各自配套的命令來停止賦值過程。 §   ...…

查看全部問答∨

三種抖動分解方法

三種抖動分解方法…

查看全部問答∨

送的Jz4725方案的MP4

呵呵,上次10月份最佳解惑獎送的MP4,打開看,原來是Jz4725的方案,果真小巧啊。按照君正方案以往的風格,應該是能夠hack的,所以跑RT-Thread沒問題就是不知道液晶屏是否能夠正常驅動起來。Jz4725,是MIPS32兼容的芯片,運行在360MHz,解碼rmvb都沒 ...…

查看全部問答∨

自己動手創建一個基于萬利STM32板的IAR工程

    圈圈前面幾個STM32的程序是直接拿例子來改的,但我們總不能每次都拿別人的例子來改吧?我們要學會如何自己來創建一個屬于自己的IAR工程。    首先啟動IAR開發環境。如果你的設置是在啟動時出現Em ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 梁河县| 兴安县| 辉南县| 宝鸡市| 清徐县| 钟山县| 青田县| 肇州县| 长兴县| 锦州市| 岫岩| 泽库县| 马鞍山市| 仪征市| 红安县| 麻城市| 奎屯市| 肥东县| 高邮市| 华容县| 小金县| 库车县| 竹北市| 玛沁县| 两当县| 万山特区| 伊金霍洛旗| 宜州市| 建湖县| 辉南县| 昂仁县| 浦县| 白城市| 红桥区| 绥阳县| 进贤县| 兰州市| 郴州市| 且末县| 上杭县| 台山市|