91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

ADC的讀取調(diào)整

454398 ? 來源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-11-13 09:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

步驟1:什么是AD轉(zhuǎn)換器

AD轉(zhuǎn)換器是一種能夠?qū)?a href="http://m.makelele.cn/analog/" target="_blank">模擬(連續(xù))量轉(zhuǎn)換為數(shù)字(離散)值的電路。這意味著什么?這意味著盡管數(shù)字值只能假設(shè)零和一的組合所形成的離散值,但模擬量可以假設(shè)范圍內(nèi)的任何值。例如,如果我們測量理想AA電池的電壓,則可以找到0V至1.5V之間的任何值,因為這是模擬量。理想燈的輸出狀態(tài)必須僅假設(shè)兩個狀態(tài)(關(guān)閉或打開),這是一個離散的幅度。由于微控制器使用這種離散邏輯工作,因此我們需要一種能夠?qū)⒛M量轉(zhuǎn)換為數(shù)字量(或離散量)的電路。

步驟2:使用的資源

?一根Lolin32 Lite卡v1.0.0

?一臺用于捕獲的Tektronix TDS1001C示波器

?一根用于ESP32USB電纜

?將Hantek DSO4102C示波器用作信號發(fā)生器

步驟3:ESP32 ADC

根據(jù)Espressif數(shù)據(jù),ESP32芯片可能在測量結(jié)果中,從一個芯片到另一個芯片的誤差為+/- 6%。

此外,該轉(zhuǎn)換對于每個可用的讀取范圍都沒有線性答案。樂鑫提供了一種校準方法,建議用戶在認為有必要達到所需精度時采用其他方法。

我們將進行數(shù)據(jù)采集,并從中顯示ADC響應(yīng)和應(yīng)用數(shù)學過程讀取調(diào)整的示例。

有幾種(更簡單或更復(fù)雜的)方法可以完成這些修正。由您決定最適合您的項目。

此處顯示的內(nèi)容具有說明性目的,并嘗試解決在調(diào)整過程中可以觀察到的有趣點。

步驟4:使用的電路

我使用了示波器,其信號發(fā)生器的頻率高達25 MHz,即Hantek DSO4102C。我們產(chǎn)生了由ESP A/D和示波器讀取的波形。收集的數(shù)據(jù)記錄在csv和電子表格中,我將在文章末尾進行下載。

第5步:使用過的符號

我們選擇了一個低頻梯形信號,該信號可以訪問整個轉(zhuǎn)換范圍內(nèi)的斜坡。

步驟6:示波器獲得的數(shù)據(jù)

捕獲由示波器執(zhí)行。數(shù)據(jù)存儲在csv文件中。請注意信號的上升和下降斜率上的輕微彎曲。

步驟7:示波器獲得的數(shù)據(jù)(Excel中的csv文件)

我們在這里進行采樣。

步驟8:ADC獲得的數(shù)據(jù)

通過更改傳輸串行速率,我們可以查看ADC捕獲的數(shù)據(jù)。觀察梯形信號的變形。

Arduino IDE串行繪圖儀上觀察到的數(shù)據(jù)

步驟9:ADC獲得的數(shù)據(jù)-Excel

使用更高的速率和串行終端,我們可以捕獲值并將其應(yīng)用到Excel中進行比較。

步驟10:爬坡的比較

我們比較兩個擋塊的兩個攀登坡道。

請注意兩個坡道上出現(xiàn)的曲率。

請注意同樣,對于相同的斜坡,ESP32的采樣數(shù)要比示波器多。

步驟11:計算采樣數(shù)

由于ESP32提供的樣本數(shù)量比示波器多,因此我們需要將這些值均等化,因為它們將用作比較兩條曲線的指標。

為此,我們將進行直接比較。

我們有305個示波器斜坡樣本和2365個ADC斜坡樣本。

因為這些斜坡屬于在相同的范圍內(nèi),可以說每個示波器大約有7.75個ADC采樣。

將每個示波器采樣的索引乘以相同的曲線,但是索引等于ADC和重新分配的數(shù)據(jù)。

要填充新職位的缺失數(shù)據(jù),我們將應(yīng)用一條曲線,以統(tǒng)計方式擬合已知數(shù)據(jù)。

步驟12:填補空白-趨勢線

選擇已知數(shù)據(jù)(藍點),方法是單擊,然后用右鍵單擊,我們選擇:“添加趨勢線。. ?!?/p>

在出現(xiàn)的窗口中,我們選擇多項式類型(階數(shù)2就足夠了。)

我們還選中了“在圖表中查看方程式”和“顯示”圖表中的R平方值”。

我們單擊“關(guān)閉”。

步驟13:填補空白-2級多項式曲線

Excel為我們提供了兩條新信息:

請記住,距離1越近,方程越合適。

我們不需深入研究所涉及的數(shù)學,而僅將其用作工具即可。

步驟14:填補空白-評估函數(shù)

讓我們填補用等式生成的數(shù)據(jù)在采樣間隙中。然后,逐點比較它們。

y = -9E-08x2 + 0,0014x + 0,1505

R2= 0 ,9999

示波器電壓= -9E-08 * index2 + 0,0014 * index + 0,1505

步驟15:將示波器電壓轉(zhuǎn)換為等效值以與ADC進行比較

讓我們利用這一點還將示波器電壓的值轉(zhuǎn)換為等效ADC

由于在ESP32的ADP中獲得的最高值為4095,相當于相同索引的2.958V讀數(shù),我們可以這樣說:

每個示波器的測量電壓大約等于AD的1384.4單位。因此,我們可以將示波器的所有測量值乘以該值。

步驟16:比較獲得的兩個斜坡

可視化

步驟17:ADC讀數(shù)差異的行為(錯誤)

下面的曲線顯示了ADC讀數(shù)的差異如何隨測量變化的行為。通過收集這些數(shù)據(jù),我們可以找到校正函數(shù)。

要找到此曲線,我們只需繪制每個度量中的差異作為每個可能AD位置(0至4095)的函數(shù)即可。

p》

步驟18:ADC讀取差異行為-查找校正函數(shù)

我們可以在Excel中通過添加趨勢線來確定校正函數(shù),現(xiàn)在已達到較高的程度,直到它完全適合我們的數(shù)據(jù)為止。

步驟19:使用其他軟件

用于確定曲線的其他有趣軟件是PolySolve,可直接在以下鏈接上使用:https://arachnoid.com/polysolve/或作為Java應(yīng)用程序下載

它允許應(yīng)用高級多項式回歸和格式化函數(shù)以及其他功能的交付。

要使用它,只需在第一行文本中輸入數(shù)據(jù)即可???。數(shù)據(jù)必須遵循X,Y的順序,并以逗號或制表符分隔。請謹慎使用正確的點作為小數(shù)點。

如果正確設(shè)置了輸入數(shù)據(jù)的格式,則會在下一個框中顯示一個圖表。

這是我們ADC誤差曲線的變化方式。

此窗口將顯示回歸的結(jié)果,包括函數(shù)充足性數(shù)據(jù),該數(shù)據(jù)可以用幾種方式格式化其輸出:作為C/C ++函數(shù),系數(shù)列表,函數(shù)

注意:注意小數(shù)點分隔符

步驟20:常量和設(shè)置()

I在此處指出用于模擬捕獲的GPIO。我初始化了串行端口以及用于模擬捕獲的引腳。

const int pin_leitura = 36; //GPIO usado para captura analógica

void setup() {

Serial.begin(1000000); //Iniciciando a porta serial somente para debug

pinMode(pin_leitura, INPUT); //Pino utilizado para captura analógica

}

步驟21:循環(huán)()和校正函數(shù)

我們會捕獲調(diào)整后的電壓,然后打印帶有或不帶有正確校正的值。

void loop() {

int valor_analogico = analogRead(pin_leitura); //realiza a captura da tens?o ajustada

//Serial.print(valor_analogico + f(valor_analogico)); //imprime os valores para debug (COM CORRE??O)

Serial.print(valor_analogico); //imprimime os valores para debug (SEM CORRE??O)

Serial.print(“,”);

Serial.print(4095);//cria uma linha para marcar o valor máximo de 4095

Serial.print(“,”);

Serial.println(0); //cria uma linha para marcar o valor mínimo de 0

}

第12行中的通知中,我們可以選擇使用

步驟22:使用PolySolve校正函數(shù)

在這里,我們在Arduino IDE內(nèi)部使用PolySolve函數(shù)

/*

Mode: normal

Polynomial degree 6, 2365 x,y data pairs

Correlation coefficient (r^2) = 9,907187626418e-01

Standard error = 1,353761109831e+01

Output form: C/C++ function:

Copyright ? 2012, P. Lutus -- http://www.arachnoid.com. All Rights Reserved.

*/

double f(double x) {

return 2.202196968876e+02

+ 3.561383996027e-01 * x

+ 1.276218788985e-04 * pow(x, 2)

+ -3.470360275448e-07 * pow(x, 3)

+ 2.082790802069e-10 * pow(x, 4)

+ -5.306931174991e-14 * pow(x, 5)

+ 4.787659214703e-18 * pow(x, 6);

}

注意逗號分隔作為小數(shù)點分隔符。

步驟23:帶有校正的捕獲-繪圖儀序列

步驟24:計算成本

要執(zhí)行多項式計算,處理器必須處理此任務(wù)。這可能會導(dǎo)致執(zhí)行延遲,具體取決于源代碼和可用的計算能力。

在這里,我們看到了使用多項式多項式的測試結(jié)果表。注意使用pow()函數(shù)的時間與不使用pow()函數(shù)的時間之間的時差。

步驟25:測試代碼-設(shè)置()和循環(huán)啟動()

在這里,我們有測試中使用的代碼。

void setup() {

Serial.begin(1000000); //Iniciando a porta serial somente para debug

}

void loop() {

float valor_analogico = 500.0; //um valor arbtrario

float quantidade = 10000.0; //quantidade de chamadas

float contador = 0.0; //contador de chamadas

步驟26:測試代碼-循環(huán)()和處理

我使用了micros()函數(shù)來獲取以微秒為單位的值。

//============= inicia o processo

float agora = micros(); //marca o instante inicial

while (contador 《 quantidade) {

//v(valor_analogico); //fun??o vazia

//r(valor_analogico); //fun??o com retorno

//f0(valor_analogico); //grau 0

//f1(valor_analogico); //grau 1

//f2(valor_analogico); //grau 2

//f3(valor_analogico); //grau 3

//f4(valor_analogico); //grau 4

//f5(valor_analogico); //grau 5

//f6(valor_analogico); //grau 6

//f13_semPow(valor_analogico); //grau 13o SEM a fun??o POW

//f13_comPow(valor_analogico); //grau 13o COM a fun??o POW

contador++;

}

agora = (micros() - agora) / quantidade; //determina o intervalo que se passou para cada itera??o

//============= finaliza o processo

步驟27:測試代碼-循環(huán)()-結(jié)果

我們打印從13級函數(shù)返回的值(帶有和不帶有POW進行比較)以及處理間隔。

//imprime o valor retornado da fun??o de grau 13 com e sem POW para compara??o

Serial.print(f13_semPow(valor_analogico)); //grau 13o SEM a fun??o POW

Serial.print(“ - ”);

Serial.print(f13_comPow(valor_analogico)); //grau 13o COM a fun??o POW

Serial.print(“ - ”);

//imprime o intervalo do processamento

Serial.println(agora, 6);

}

步驟28:測試代碼-使用的函數(shù)

空度為0和1的函數(shù)(僅帶返回)。

//FUN??O VAZIA

double v(double x) {

}

//FUN??O SOMENTE COM RETORNO

double r(double x) {

return x;

}

//FUN??O DE GRAU 0

double f0(double x) {

return 2.202196968876e+02;

}

//FUN??O DE GRAU 1

double f1(double x) {

return 2.202196968876e+02

+ 3.561383996027e-01 * x;

}

2、3和4級函數(shù)。

//FUN??O DE GRAU 2

double f2(double x) {

return 2.202196968876e+02

+ 3.561383996027e-01 * x

+ 1.276218788985e-04 * pow(x, 2);

}

//FUN??O DE GRAU 3

double f3(double x) {

return 2.202196968876e+02

+ 3.561383996027e-01 * x

+ 1.276218788985e-04 * pow(x, 2)

+ -3.470360275448e-07 * pow(x, 3);

}

//FUN??O DE GRAU 4

double f4(double x) {

return 2.202196968876e+02

+ 3.561383996027e-01 * x

+ 1.276218788985e-04 * pow(x, 2)

+ -3.470360275448e-07 * pow(x, 3)

+ 2.082790802069e-10 * pow(x, 4);

}

5和6級函數(shù)。

//FUN??O DE GRAU 5

double f5(double x) {

return 2.202196968876e+02

+ 3.561383996027e-01 * x

+ 1.276218788985e-04 * pow(x, 2)

+ -3.470360275448e-07 * pow(x, 3)

+ 2.082790802069e-10 * pow(x, 4)

+ -5.306931174991e-14 * pow(x, 5);

}

//FUN??O DE GRAU 6

double f6(double x) {

return 2.202196968876e+02

+ 3.561383996027e-01 * x

+ 1.276218788985e-04 * pow(x, 2)

+ -3.470360275448e-07 * pow(x, 3)

+ 2.082790802069e-10 * pow(x, 4)

+ -5.306931174991e-14 * pow(x, 5)

+ 4.787659214703e-18 * pow(x, 6);

}

使用POW的13級函數(shù)。

//FUN??O DE GRAU 13 USANDO O POW

double f13_comPow(double x) {

return 2, 161282383460e+02

+ 3, 944594843419e-01 * x

+ 5, 395439724295e-04 * pow(x, 2)

+ -3, 968558178426e-06 * pow(x, 3)

+ 1, 047910519933e-08 * pow(x, 4)

+ -1, 479271312313e-11 * pow(x, 5)

+ 1, 220894795714e-14 * pow(x, 6)

+ -6, 136200785076e-18 * pow(x, 7)

+ 1, 910015248179e-21 * pow(x, 8)

+ -3, 566607830903e-25 * pow(x, 9)

+ 5, 000280815521e-30 * pow(x, 10)

+ 3, 434515045670e-32 * pow(x, 11)

+ -1, 407635444704e-35 * pow(x, 12)

+ 9,871816383223e-40 * pow(x,13);

}

不使用13級函數(shù)POW。

//FUN??O DE GRAU SEM USAR O POW

double f13_semPow(double x) {

return 2, 161282383460e+02

+ 3, 944594843419e-01 * x

+ 5, 395439724295e-04 * x * x

+ -3, 968558178426e-06 * x * x * x

+ 1, 047910519933e-08 * x * x * x * x

+ -1, 479271312313e-11 * x * x * x * x * x

+ 1, 220894795714e-14 * x * x * x * x * x * x

+ -6, 136200785076e-18 * x * x * x * x * x * x * x

+ 1, 910015248179e-21 * x * x * x * x * x * x * x * x

+ -3, 566607830903e-25 * x * x * x * x * x * x * x * x * x

+ 5, 000280815521e-30 * x * x * x * x * x * x * x * x * x * x

+ 3, 434515045670e-32 * x * x * x * x * x * x * x * x * x * x * x

+ -1, 407635444704e-35 * x * x * x * x * x * x * x * x * x * x * x * x

+ 9, 871816383223e-40 * x * x * x * x * x * x * x * x * x * x * x * x * x;

}

責任編輯:wv

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

    關(guān)注

    113

    文章

    7094

    瀏覽量

    196276
  • adc
    adc
    +關(guān)注

    關(guān)注

    100

    文章

    7527

    瀏覽量

    556272
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    高速ADC:CBM14AD125Q

    ADC
    芯佰微電子
    發(fā)布于 :2026年01月09日 15:01:44

    CBM24AD99Q 高精度ADC

    ADC
    芯佰微電子
    發(fā)布于 :2025年12月18日 10:57:54

    探索ADC0831-N/ADC0832-N/ADC0834-N/ADC0838-N 8位串行I/O A/D轉(zhuǎn)換器

    轉(zhuǎn)換器。 文件下載: adc0834-n.pdf 關(guān)鍵特性與規(guī)格 基本性能 這些轉(zhuǎn)換器具有8位分辨率,能夠提供較為精確的模擬到數(shù)字的轉(zhuǎn)換??偽?b class='flag-5'>調(diào)整誤差方面,不同型號
    的頭像 發(fā)表于 12-10 10:55 ?659次閱讀

    ADC 實戰(zhàn):如何精準讀取傳感器信號

    關(guān)鍵因素。今天,我們就從原理到實戰(zhàn),帶你搞懂ADC,幫你精準讀取傳感器信號。一、ADC基礎(chǔ)回顧ADC(Analog-to-DigitalConverter)是將連
    的頭像 發(fā)表于 11-24 19:04 ?519次閱讀
    <b class='flag-5'>ADC</b> 實戰(zhàn):如何精準<b class='flag-5'>讀取</b>傳感器信號

    【EK-RA6E2開發(fā)指南】ADC獲取電壓值

    RA6E2有2個ADC單元,每個ADC單元有12位、10位、8位讀取數(shù)據(jù)的格式可以選擇,在單元0上有13個ADC通道,而在單元1上有16個ADC
    的頭像 發(fā)表于 09-23 18:15 ?2040次閱讀
    【EK-RA6E2開發(fā)指南】<b class='flag-5'>ADC</b>獲取電壓值

    怎么用LL命令讀取SPI?

    ;hspi1, mrx_data, 3, HAL_MAX_DELAY);命令讀取ADC結(jié)果3字節(jié),即時優(yōu)化后也需要1.95us,遠遠不能匹配ADC的速度。我想也只有LL命令才會快了,測試了很長時間都不成功。 請教怎么用LL命令
    發(fā)表于 09-09 08:17

    STM32L152進入STOP模式,WAKEUP by RTC喚醒后ADC讀取數(shù)值不變了是什么原因?qū)е碌模?/a>

    如題所示,使用STOP低功耗模式,功耗下來了,STOP模式每次最大只能32秒左右(RTC寄存器滿了),所以就循環(huán)多次(5分鐘就是10次左右)。 啟動時讀取一次ADC數(shù)據(jù)(電池電壓比如是4.10V
    發(fā)表于 07-23 06:09

    使用stm32u575rg通過spi讀取外置adc的數(shù)據(jù),如何設(shè)置才能讓spi不需要中斷重啟持續(xù)讀取數(shù)據(jù)?

    我打算使用stm32u575rg通過spi讀取外置adc的數(shù)據(jù),通過lptim2的ch2提供外置ad的觸發(fā)信號,ch1提供觸發(fā)信號給spi1,SPI->TSIZE=1
    發(fā)表于 07-10 08:22

    ADC采集精度不良

    ; ADC_EN); // 等待ADC穩(wěn)定 delay_ms(1); } // 讀取ADC值 uint16_t ADC_Read(uin
    發(fā)表于 07-09 22:07

    如何使用HAL ADCREAD讀取VDDIO?

    ;channel_config); /* 讀取相應(yīng) ADC 通道的 ADC 轉(zhuǎn)換結(jié)果。 */ adc_out = cyhal_adc_rea
    發(fā)表于 06-27 06:30

    基于小凌派RK2206開發(fā)板:OpenHarmony如何使用IoT接口控制ADC外設(shè)

    1、案例簡介本案例主要講解如何在小凌派-RK2206開發(fā)板上使用IoT庫的ADC接口,進行ADC編程開發(fā)。例程內(nèi)容為創(chuàng)建一個任務(wù),讀取按鍵的ADC值,并打印到串口。例程源代碼:http
    的頭像 發(fā)表于 04-10 16:00 ?972次閱讀
    基于小凌派RK2206開發(fā)板:OpenHarmony如何使用IoT接口控制<b class='flag-5'>ADC</b>外設(shè)

    為什么在“PWM Adc Dma 344 S32CT”示例中使用ISR塊來讀取dma adc通道?

    我正在 MBDT 中使用 S32K358 進行一個項目,我正在尋找啟用 DMA 傳輸類型的 ADC 模塊。 在 ADC 示例“PWM Adc Dma 344 S32CT”中,我發(fā)現(xiàn)要讀取
    發(fā)表于 04-08 06:39

    如何讀取LPC55S28溫度傳感器?

    我正在嘗試讀取芯片溫度傳感器。 我嘗試使用 LPADC 組件來讀取傳感器。我意識到我必須禁用掉電、啟用 kclock_adc0 并為其附加一個時鐘,以便計算 ADC 的模擬值。 由于某
    發(fā)表于 04-04 06:46

    MCXN947為什么無法讀取ADC?

    我無法使用外設(shè)工具讀取 ADC 數(shù)據(jù)。您能否幫助我找到錯誤并提供有關(guān)該功能的更多詳細信息?
    發(fā)表于 04-02 07:39