女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

完善資料讓更多小伙伴認(rèn)識你,還能領(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://www.asorrir.com/analog/" target="_blank">模擬(連續(xù))量轉(zhuǎn)換為數(shù)字(離散)值的電路。這意味著什么?這意味著盡管數(shù)字值只能假設(shè)零和一的組合所形成的離散值,但模擬量可以假設(shè)范圍內(nèi)的任何值。例如,如果我們測量理想AA電池的電壓,則可以找到0V至1.5V之間的任何值,因?yàn)檫@是模擬量。理想燈的輸出狀態(tài)必須僅假設(shè)兩個(gè)狀態(tài)(關(guān)閉或打開),這是一個(gè)離散的幅度。由于微控制器使用這種離散邏輯工作,因此我們需要一種能夠?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é)果中,從一個(gè)芯片到另一個(gè)芯片的誤差為+/- 6%。

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

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

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

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

步驟4:使用的電路

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

第5步:使用過的符號

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

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

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

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

我們在這里進(jìn)行采樣。

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

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

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

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

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

步驟10:爬坡的比較

我們比較兩個(gè)擋塊的兩個(gè)攀登坡道。

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

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

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

由于ESP32提供的樣本數(shù)量比示波器多,因此我們需要將這些值均等化,因?yàn)樗鼈儗⒂米鞅容^兩條曲線的指標(biāo)。

為此,我們將進(jìn)行直接比較。

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

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

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

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

步驟12:填補(bǔ)空白-趨勢線

選擇已知數(shù)據(jù)(藍(lán)點(diǎn)),方法是單擊,然后用右鍵單擊,我們選擇:“添加趨勢線。. 。”

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

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

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

步驟13:填補(bǔ)空白-2級多項(xiàng)式曲線

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

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

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

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

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

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

R2= 0 ,9999

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

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

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

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

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

步驟16:比較獲得的兩個(gè)斜坡

可視化

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

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

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

p》

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

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

步驟19:使用其他軟件

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

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

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

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

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

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

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

步驟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ù)點(diǎn)分隔符。

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

步驟24:計(jì)算成本

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

在這里,我們看到了使用多項(xiàng)式多項(xiàng)式的測試結(jié)果表。注意使用pow()函數(shù)的時(shí)間與不使用pow()函數(shù)的時(shí)間之間的時(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進(jìn)行比較)以及處理間隔。

//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;

}

責(zé)任編輯:wv

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

    關(guān)注

    113

    文章

    6701

    瀏覽量

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

    關(guān)注

    99

    文章

    6698

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

    MCXN947為什么無法讀取ADC

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

    ADC108s022 DIN是在SCLK上升沿向ADC寫參數(shù),而DOUT在SCLK的下降沿從ADC讀取轉(zhuǎn)換后的數(shù)據(jù)?

    是用的是SPI接口的ADC芯片,時(shí)序如下 是不是說,DIN是在SCLK上升沿向ADC寫參數(shù),而DOUT在SCLK的下降沿從ADC讀取轉(zhuǎn)換后的數(shù)據(jù)??
    發(fā)表于 01-09 07:14

    使用STM32F103的SPI3與ADS1248通訊,讀取ADC值波動很大,為什么?

    使用STM32F103的SPI3與ADS1248通訊,可以下發(fā)、讀取寄存器的值。 但是連接上四線制溫度傳感器后,采用Burnout Current source檢測溫度傳感器的是否連接,讀取ADC
    發(fā)表于 12-23 07:31

    讀取AFE4403的ADC計(jì)算后都是負(fù)值,是對的嗎?

    讀取AFE4403的ADC計(jì)算后都是負(fù)值,這對嗎?
    發(fā)表于 12-20 08:13

    使用模擬IIC讀取ADS1115芯片,讀取AD值,出現(xiàn)的ADC值低4位一直為0,為什么?

    在使用模擬IIC讀取ADS1115芯片,讀取AD值,出現(xiàn)的ADC值低4位一直為0,滿量程值為0X7FF0,其它電壓值低4位一直為0,這是為什么?
    發(fā)表于 12-03 08:09

    讀取不到ADC0123通道的值,為什么?

    請問我的代碼由什么問題嗎?我讀取不到ADC0123通道的值。 已經(jīng)通過示波器查看SPI接口 Data changed on SCK 1st edge, captured on 2nd, SCK
    發(fā)表于 11-28 07:12

    ADS1230單端輸入設(shè)計(jì),讀取的20bit adc值偏小很多是為什么?

    設(shè)計(jì)為單端輸入,選擇64增益,參考電壓4.86,AINP與AINN之間20mv時(shí),讀取adc值都只有0x2e7c(11900),遠(yuǎn)小于文檔中的滿量程2^17。 目前改變輸入電壓,得到的adc
    發(fā)表于 11-25 06:49

    ADS127L11怎么檢測ADC數(shù)據(jù)已經(jīng)轉(zhuǎn)換完成可以進(jìn)行讀取了呢?

    SPI-4線模式,DRDY引腳不使用。 菊花鏈模式時(shí),需要把DRDY/SDO引腳配置成“只輸出模式”,那么怎么檢測ADC數(shù)據(jù)已經(jīng)轉(zhuǎn)換完成可以進(jìn)行讀取了呢? 是不是只有如下兩種方式: 1、一直讀取狀態(tài)寄存器的“DRDY”標(biāo)志位作
    發(fā)表于 11-22 07:08

    用28035如何讀取ADC128S022的數(shù)據(jù)?

    請問用28035如何讀取ADC128S022的數(shù)據(jù),或者說是該怎么配置
    發(fā)表于 11-18 08:34

    AFE4403是在ADC_RDY中斷后只讀取一次數(shù)據(jù)嗎?

    是在ADC_RDY中斷后只讀取一次數(shù)據(jù)么?還是會有4組數(shù)據(jù)
    發(fā)表于 11-15 08:31

    adc讀取電壓值時(shí),顯示的電壓值是亂碼怎么解決?

    您好,我在用adc讀取電壓值時(shí),顯示的電壓值是亂碼,第一次接觸rtthread,不清楚如何這個(gè)問題如何下手,求指導(dǎo),感謝
    發(fā)表于 09-27 08:09

    adc讀取電壓值時(shí),顯示的電壓值是亂碼,如何解決?

    您好,我在用adc讀取電壓值時(shí),顯示的電壓值是亂碼,第一次接觸rtthread,不清楚如何這個(gè)問題如何下手,求指導(dǎo),感謝
    發(fā)表于 09-13 06:31

    如何在MCS中實(shí)現(xiàn)ADC數(shù)據(jù)讀取

    ,而且也路由至RES15的寄存器上,但是一直讀的為0 ,而且MHB讀出來也是0;如果需要在MCS中實(shí)現(xiàn)ADC數(shù)據(jù)讀取,還有其他注意地方嗎?
    發(fā)表于 07-24 07:59

    使用RTOS_SDK_V1.0.4版本system_adc_read讀取錯(cuò)誤的問題求解

    使用目的: 使用RTOS_SDK_V1.0.4版本,每秒鐘讀取adc值,主要是用來讀取熱敏電阻的兩端的電壓值,根據(jù)電壓來計(jì)算環(huán)境溫度。 測試方法: 1. 在能連接路由器的情況下,每秒鐘調(diào)用一次
    發(fā)表于 07-18 08:13