日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]從51開始,單片機玩了很長時間了,有51,PIC,AVR等等,早就想跟潮流玩玩ARM,但一直沒有開始,原因-----不知道玩了ARM可以做什么(對我自己而言)。如果為學習而學習,肯定學不好。然后cortex-m3出來了,據(jù)說,這東

 

從51開始,單片機玩了很長時間了,有51,PIC,AVR等等,早就想跟潮流玩玩ARM,但一直沒有開始,原因-----不知道玩了ARM可以做什么(對我自己而言)。如果為學習而學習,肯定學不好。然后cortex-m3出來了,據(jù)說,這東西可以替代單片機,于是馬上開始關注。也在第一時間開始學習,可惜一開始就有點站錯了隊,選錯了型(仍是對我自己而言)。我希望這種芯片應該是滿大街都是,隨便哪里都可以買得到,但我選的第一種顯然做不到。為此,大概浪費了一年多時間吧,現(xiàn)在,回到對我來說是正確的道路上來啦,邊學邊寫點東西?! ?/p>


  這里寫的是我的學習的過程,顯然,很多時候會是不全面的,不系統(tǒng)的,感悟式的,甚至有時會是錯誤的,有些做法會是不專業(yè)的。那么,為什么我還要寫呢?這是一個有趣的問題,它甚至涉及到博客為什么要存在的問題。顯然,博客里面的寫的東西,其正確性、權威性大多沒法和書比,可為什么博客會存在呢?理由很多,我非專家,只說作為一個學習32位單片機的工程師角度來分享整個學習過程,整理成一個學習手記,也便于以后文檔備份。
本章節(jié)將學習

  一、認識ADC兼進一步看懂STM的庫

  ADC是多少位的?

  12位

  ADC有多少個?

  1個、2個或多至3個,視不同的器件而不同;每個又有多個通道。

  關于通道的名堂:

  10.3.3 通道選擇

  有16個多路通道??梢园艳D(zhuǎn)換分成兩組:規(guī)則的和注入的。在任意多個通道上以任意順序進行的一系列轉(zhuǎn)換構成成組轉(zhuǎn)換。例如,可以如下順序完成轉(zhuǎn)換:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。

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

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

  它們有什么區(qū)別:

  l 不同的組轉(zhuǎn)換后保存數(shù)據(jù)的地方不一樣,產(chǎn)生的中斷標志不一樣。

  l 在掃描模式下,規(guī)則組會有能力把各通道數(shù)據(jù)通過DMA傳給SRAM,而注入組的數(shù)據(jù)總是存在在ADC_JDRx中。

  還有其他的一些區(qū)別,這里暫不一一羅列。

  ST為什么這么樣來設計AD轉(zhuǎn)換,肯定是有理由的,但是我不知道,因此,我也就難以深入地理解AD轉(zhuǎn)換的各種模式。這也就是說,對于知識的理解,要把它放在其應用背景中去學習才能學得好。因此,其他知識積累得越多,學起來也就越快,這也就是所謂的“功底”問題。某人功底深厚,意味著他見多識廣,遇到的事情多,能夠很快找到處理某件事情的“原型”。當然,也有一些人抽象學習能力極強,就算找不到“原型”,他也能學得很好。基本上,這類人的科學素養(yǎng)更高一些,在工程師、工科類學生中并不多見。

  閑話少說,下面來看怎么樣來使用AD轉(zhuǎn)換器?

  以一段源程序為例分別來解讀,同時進一步理解STM32中有關符號的含義,相信以后再讀庫源程序,定能更上一層樓。

  為看得清楚一些,以下代碼用一種顏色表示。

  /* ADC1 開始準備配置*/

  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

  /*設置ADC-》CR1的19:16,確定ADC工作模式,一共有10種工作模式

  #define ADC_Mode_Independent ((uint32_t)0x00000000) 0000:獨立模式

  #define ADC_Mode_RegInjecSimult ((uint32_t)0x00010000) 0001:混合的同步規(guī)則+注入同步模式

  #define ADC_Mode_RegSimult_AlterTrig ((uint32_t)0x00020000) 0010:混合的同步規(guī)則+交替觸發(fā)模式

  #define ADC_Mode_InjecSimult_FastInterl ((uint32_t)0x00030000) 0011:混合同步注入+快速交替模式

  #define ADC_Mode_InjecSimult_SlowInterl ((uint32_t)0x00040000) 0100:混合同步注入+慢速交替模式

  #define ADC_Mode_InjecSimult ((uint32_t)0x00050000) 0101:注入同步模式

  #define ADC_Mode_RegSimult ((uint32_t)0x00060000) 0110:規(guī)則同步模式

  #define ADC_Mode_FastInterl ((uint32_t)0x00070000) 0111:快速交替模式

  #define ADC_Mode_SlowInterl ((uint32_t)0x00080000) 1000:慢速交替模式

  #define ADC_Mode_AlterTrig ((uint32_t)0x00090000) 1001:交替觸發(fā)模式

  */

  ADC_InitStructure.ADC_ScanConvMode = ENABLE;

  /* ADC_ScanConvMode在stm32f10x_adc.h中定義如下:

  FunctionalState ADC_ScanConvMode;

  這個參數(shù)用來指定轉(zhuǎn)換是掃描(多通道模式)還是單個轉(zhuǎn)換(單通道模式),該參數(shù)可以被設置為DISABLE或者ENABLE。

  在數(shù)據(jù)手冊中,SCAN位是這樣描述的:掃描模式

  該位由軟件設置和清除,用于開啟或關閉掃描模式。在掃描模式中,由ADC_SQRx或ADC_JSQRx寄存器選中的通道被轉(zhuǎn)換。

  0:關閉掃描模式

  1:使用掃描模式

  注:如果分別設置了EOCIE或JEOCIE位,只在最后一個通道轉(zhuǎn)換完畢才會產(chǎn)生EOC或JEOC中斷。

  這樣,如果一次需要對多個通道進行轉(zhuǎn)換,這位就必須設置為ENABLE。

  */

  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

  /* FunctionalState ADC_ContinuousConvMode;

  這個參數(shù)用來指定轉(zhuǎn)換是連續(xù)進行還是單次進行,它可以設置為ENABLE或者DISABLE。

  這兩個參數(shù)中出現(xiàn)了FunctionalState數(shù)據(jù)類型,那么它是什么呢,順滕摸瓜,可以看到它的的定義如下:

  typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;

  因此,它相當于是一個位變量,我的理解,DISPABLE=0這個沒有問題,ENABLE=!DISABLE是否應該確切的是1??否則下面的設置就會有問題。

  用這兩個符號來對寄存器中的位進行設置的話,還需要提供位置信息,如下面的代碼所示:

  tmpreg1 |= (uint32_t)(ADC_InitStruct-》ADC_DataAlign | ADC_InitStruct-》ADC_ExternalTrigConv |

  ((uint32_t)ADC_InitStruct-》ADC_ContinuousConvMode 《《 1));

  這個《《1就是位置信息,CONT是CON2寄存器的位1

  這樣,我們看STM32的庫又能多看懂一點了。

  用于設定CON2的CONT位(位1):是否連續(xù)轉(zhuǎn)換

  該位由軟件設置和清除。如果設置了此位,則轉(zhuǎn)換將連續(xù)進行直到該位被清除。

  0:單次轉(zhuǎn)換模式 1:連續(xù)轉(zhuǎn)換模式

  */

  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

  /* uint32_t ADC_ExternalTrigConv;

  定義如何來觸發(fā)AD轉(zhuǎn)換,一共有8個可選項,以下給出兩個來解釋一下:

  #define ADC_ExternalTrigConv_T1_CC3 ((uint32_t)0x00040000)

  將0x00040000寫成二進制,就是:

  0000 0000 0000 0100 0000 0000 0000 0000

  對照下面的說明,不難看出,第19:17位是 010,即定時器1的CC3事件觸發(fā)。

  #define ADC_ExternalTrigConv_None ((uint32_t)0x000E0000)

  將0x000E0000寫成二進制,就是:

  0000 0000 0000 1110 0000 0000 0000 0000

  對照下面的說明,是SWSTART方式,即用軟件標志來啟動轉(zhuǎn)換。

關于EXTSEL[2:0]的說明:

  位19:17 EXTSEL[2:0]:選擇啟動規(guī)則通道組轉(zhuǎn)換的外部事件

  這些位選擇用于啟動規(guī)則通道組轉(zhuǎn)換的外部事件

  ADC1和ADC2的觸發(fā)配置如下

  000:定時器1的CC1事件 100:定時器3的TRGO事件

  001:定時器1的CC2事件 101:定時器4的CC4事件

  010:定時器1的CC3事件 110:EXTI線11/ TIM8_TRGO,

  僅大容量產(chǎn)品具有TIM8_TRGO功能

  011:定時器2的CC2事件 111:SWSTART

  ADC3的觸發(fā)配置如下

  000:定時器3的CC1事件 100:定時器8的TRGO事件

  001:定時器2的CC3事件 101:定時器5的CC1事件

  010:定時器1的CC3事件 110:定時器5的CC3事件

  011:定時器8的CC1事件 111:SWSTART

  */

  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

  /*

  這個是用來設定數(shù)據(jù)對齊模式的,有兩種可能:

  #define ADC_DataAlign_Right ((uint32_t)0x00000000)

  #define ADC_DataAlign_Left ((uint32_t)0x00000800)

  找到數(shù)據(jù)手冊上的相關說明:

  位11:ALIGN:數(shù)據(jù)對齊

  該位由軟件設置和清除。

  0:右對齊 1:左對齊

  */

  ADC_InitStructure.ADC_NbrOfChannel = 1;

  /* ADC_NbrOfChannel的定義如下:

  uint8_t ADC_NbrOfChannel;

  指定有多少個通道會被轉(zhuǎn)換,它的值可以是1~16,這個數(shù)據(jù)將會影響到寄存器ADC_SQR1,下面是stm32f10x_adc.c中的相關代碼:

  。。.。。.

  tmpreg2 |= (uint8_t) (ADC_InitStruct-》ADC_NbrOfChannel - (uint8_t)1);

  tmpreg1 |= (uint32_t)tmpreg2 《《 20;

  ADCx-》SQR1 = tmpreg1;

  看到mpreg1 |= (uint32_t)tmpreg2 《《 20;中的:20,用上面我們剛理解到的原則,這個值的低位將在ADC_SQR1的20位,而它的值是1~16,從代碼中可以看到這里又減去1,則其設置值為:0~15,即4bit就夠了,那么從20往前數(shù),也就是[23:20],那么SQR1中這幾位的用途是什么呢?順這條線索我們?nèi)フ襍QR1中的23:20位,看它是怎么用的。

  位23:20 L[3:0]:規(guī)則通道序列長度

  這些位定義了在規(guī)則通道轉(zhuǎn)

  0000:1個轉(zhuǎn)換

  0001:2個轉(zhuǎn)換

  ……

  1111:16個轉(zhuǎn)換

  也就是設置一次進行幾個通道的轉(zhuǎn)換,看來我們的理解完全正確。

  */

  ADC_Init(ADC1, &ADC_InitStructure);

  //通過前面一系列的設置,可以執(zhí)行ADC_Init函數(shù)了。

  /* ADC1 規(guī)則通道15(Channel15)配置(規(guī)則通道見文章開頭)*/

  ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 1, ADC_SampleTime_55Cycles5);

  /* 這個函數(shù)一共有4個參數(shù),第一個是指定轉(zhuǎn)換器,根據(jù)所采用的器件的不同,可以是ADC1,ADC2,ADC3;第二個參數(shù)是指定通道號;第三個參數(shù)是指定該通道在轉(zhuǎn)換序列中第幾個開始轉(zhuǎn)換,第四個參數(shù)是指定轉(zhuǎn)換時間

  第一、二個參數(shù)不難理解,這里就不再多說了,看一看第三個參數(shù)。

  先看一看這個函數(shù)的內(nèi)容,它在stm32f10x_adc.c中,這是STM庫提供的一個函數(shù):

  void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)

  { 。。.。。.前面的不寫了

  /* For Rank 1 to 6 */

  if (Rank 《 7) //這個Rand就是第三個參數(shù)

  {

  /* Get the old register value */

  tmpreg1 = ADCx-》SQR3;

  /* Calculate the mask to clear */

  tmpreg2 = SQR3_SQ_Set 《《 (5 * (Rank - 1));

  SQR3的值如下:

  //#define SQR3_SQ_Set ((uint32_t)0x0000001F)

  之所以用5去乘,看下圖中的表格:ADC_SQ3中SQ1~SQ6每個都是占5位。

  這下理解了:如果這個Rank是1,那么tmpreg2這個變量第[4:0]這5位將會是11111(即SQR3_SQ_Set的初始值:0x0000001f),如果Rank是2,那么tmpreg2這個變量的第[9:5]將會是11111,即tmpreg2將等于:0x00001f00,依此類推。

  /* Clear the old SQx bits for the selected rank */

  tmpreg1 &= ~tmpreg2;

  /* tmpreg2取反再與,即清掉tmpreg1中相應的5位*/

  tmpreg2 = (uint32_t)ADC_Channel 《《 (5 * (Rank - 1));

  /*這次tmpreg2取的是通道值了,然后同相根據(jù)Rank的值左移5、10或更多位 */

  tmpreg1 |= tmpreg2;

  /* Store the new register value */

  ADCx-》SQR3 = tmpreg1;

  }

  */
 

  

  第四個參數(shù)是采樣時間設定,代碼如下:

  tmpreg2 = (uint32_t)ADC_SampleTime 《《 (3 * ADC_Channel);

  /* 設定新的采樣時間,這里為什么用3,理由和上面的5一樣,看下圖。*/

  tmpreg1 |= tmpreg2;

  /* Store the new register value */

  ADCx-》SMPR2 = tmpreg1;

  

  /* Enable ADC1 DMA */

  ADC_DMACmd(ADC1, ENABLE);

  /* Enable ADC1 */

  ADC_Cmd(ADC1, ENABLE);

  至此一次ADC轉(zhuǎn)換配置完畢。很麻煩。。.。。.也許功能強大的副產(chǎn)品就是麻煩吧,沒有辦法。

二、使用內(nèi)置溫度傳感器測量溫度

  學習使用ADC多通道轉(zhuǎn)換方式,驗證溫度測量的準確性,為以后的工程實踐打好基礎。

  (1) ADC的單次與連續(xù)轉(zhuǎn)換

  ADC轉(zhuǎn)換可以在一次轉(zhuǎn)換后停止,然后再次觸發(fā)后進行下一次轉(zhuǎn)換;也可以是持續(xù)不斷地轉(zhuǎn)換下去。這個是通過設定ADC_CR2的CONT位來確定。

  而在ST提供的庫里面,是這樣來設定的:

  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

  (2) ADC的掃描模式

  ADC的掃描模式是用來掃描一組選定的通道的,它們將會被依次轉(zhuǎn)換。這個在上一份筆記中已說明過。

  那么連續(xù)轉(zhuǎn)換和掃描轉(zhuǎn)換之間又是什么關系呢?字面上理解,似乎它們都是持續(xù)不斷地轉(zhuǎn)換啊。

  答案是:連續(xù)轉(zhuǎn)換的層次比掃描更高,它管著掃描呢。也就是說,對連續(xù)轉(zhuǎn)換來說,它所謂的“一次轉(zhuǎn)換”可并不是指的一個通道的轉(zhuǎn)換結束,而是指的“一組”轉(zhuǎn)換結束,當然,這個“一組”有可能只有一個通道而已。再說得明確一些:當ADC掃描一次結束以后,如果CONT位是“1”(設定為連續(xù)轉(zhuǎn)換方式),那么將繼續(xù)下一輪的轉(zhuǎn)換。

 ?。?) EOC什么時候產(chǎn)生?

  我的理解應該是每個通道(Channel)轉(zhuǎn)換結束時都會發(fā)生。但這里有些問題(見下圖):

  

  上面的說明中:該位由硬件在(規(guī)則或注入)通道組換結束時設置…其中有個“組”字,字面的理解似乎應該是指一次轉(zhuǎn)換組的所有通道都結束后才置1?但如果是這樣,那么又如何進行數(shù)據(jù)的傳遞呢?要知道,對于ADC1來說,它的多個通道只有一個用于數(shù)據(jù)何存的寄存器:ADC1-》DR啊。

  而這個問題在其他兩個地方也沒有說得清楚(見下圖):

  

  我們前面討論了說連續(xù)轉(zhuǎn)換是針對一組轉(zhuǎn)換而言的,所以這里所謂的:每個轉(zhuǎn)換后EOC標志被設置,究竟是一組轉(zhuǎn)換結束后呢還是一個通道結束后呢?不明確。

  而在掃描模式是這么說的(見下圖):

  

  這里僅說到:如果設置了DMA位,在每次EOC后…,而并沒有說到什么時候會有EOC產(chǎn)生?是所有掃描結束還是每個通道轉(zhuǎn)換結束?

  而關于SCAN位又有這樣的說明(見下圖):

  

  注意最后的注:如果分別設置了EOCIE或JEOCIE位,只在最后一個通道轉(zhuǎn)換完畢才會產(chǎn)生EOC或者JEOC中斷。

  對這一行話的理解同樣會有歧義:究竟是只在最后一個通道轉(zhuǎn)換完畢才產(chǎn)生EOC或者JEOC呢,還是每個通道轉(zhuǎn)換時都產(chǎn)生EOC或者JEOC,但是僅在最后一個通道轉(zhuǎn)換完畢時的EOC/JEOC才會引發(fā)中斷?

  手冊上說得清楚,手冊不保證正確,有問題可以找英文原版……可憐我,如果漢語語法也搞不清楚,那么英語語法豈非更頭大?看來非得進修個英文六級再來學啦。

  還好,我們還能做實驗驗證。經(jīng)驗證,我認為應該是每次通道轉(zhuǎn)換時都有EOC產(chǎn)生,并且這個EOC可以觸發(fā)DMA事件。但是畢意自己驗證的不能保證一定理解正確,所以啰啰嘍嘍寫了這么多。

 ?。?)為了要使用內(nèi)置的溫度傳感器,得要先打開溫度傳感器(同時也打開了內(nèi)部REF測量通道),數(shù)據(jù)手冊上說是設置ADC-》CR2中的TSRVEFF位。這個位當然可以寫個代碼自行設置,不過我們現(xiàn)在是用庫編程,那就遵守紀律,找到相應的庫函數(shù)吧。

  打開stm32f10x_adc.c,用盡一切手段找,在這里(見下圖):

  

  根據(jù)上次的解讀,我們已知FunctionalState相當于是一個“位”變量,它只能取Enable和Disable兩個值之一。

  所以,main.c中加入這樣一行:

  ADC_TempSensorVrefintCmd(ENABLE); //開啟溫度傳感器及Vref通道

 ?。?)選定待轉(zhuǎn)換組中的通道,并設定轉(zhuǎn)換順序,轉(zhuǎn)換時間

  ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 2, ADC_SampleTime_239Cycles5);

  /* 設置ADC1的Channel15通道在轉(zhuǎn)換序列中第 2 個進行轉(zhuǎn)換,轉(zhuǎn)換時間設定為239.5個周期

  */

  這一段中的第一個參數(shù)是指定由ADC1轉(zhuǎn)換器轉(zhuǎn)換,因為溫度傳感器接在這個轉(zhuǎn)換器的第16通道上,第二個參數(shù)顯然就是選定第16通道了,而第三個參數(shù)2是說這個通道第二個轉(zhuǎn)換;第四個參數(shù)是設定采樣時間。

  說到采樣時間,又要多說幾句了。

  ADC1轉(zhuǎn)換器的時鐘是ADCCLK,這個時鐘是由APB2時鐘經(jīng)過分頻器而得到的,由于代碼中沒有對預分頻器進行設置,所以用默認值2分頻,所以ADCCLK的時鐘是36M。

對于溫度傳感器的使用,數(shù)據(jù)手冊中這么樣寫(見下圖):

  

  看第2條,即要求采樣時間大于2.2us,那么我們只能取最大的采樣周期239.5了。因為再低一檔的就是71.5個周期,這是無法滿足要求的。

  但是說到這里,又出來問題了,就在緊挨著這段話的上面有這么一段(見下圖):

  

  也就是它要求采樣時間是17.1us,這這豈不是明顯不相符?

  先標志于此,稍后查資料或做實驗來驗證。

 ?。?)設置DMA通道,將轉(zhuǎn)換得到的數(shù)據(jù)保存到SRAM中去。

  vu16 ADCConvertedValue[2]; //定義一個2個字的數(shù)組,用來保存數(shù)據(jù)

  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADCConvertedValue[0];

  //設定SRAM中的起始地址

  DMA_InitStructure.DMA_BufferSize = 2; //2個字節(jié)

  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

  //使用內(nèi)存地址自增模式

  ……

  其他的不多寫了。這樣,2個通道的測試數(shù)據(jù)分別被保存到ADCConvertedValue[0]和ADCConvertedValue[1]中去了,只要讀出這兩個單元中的值,就可以分別得到PC5(ADC_Channel15)上外接電位器的分壓值和內(nèi)部溫度傳感器的值了。

  (7)第17通道Refint

  在片內(nèi)有一個片內(nèi)基準,連接到ADC1的Channel17上,開始我以為,可以利用這個通道來做校準工作,但是看一看數(shù)據(jù)手冊,我知道沒戲了。 

  居然從1.16變到了1.24V。

  而我實測的結果更令我嘆息,開空調(diào)吹一下板子,實測的數(shù)值是1470,其時溫度大概是在25度左右,空調(diào)一停,幾度的變化,結果變成了1475,再試,我拿著板子對著空調(diào)出風口一陣吹,數(shù)值變到了1465.(其時溫度值為從1700變到1753)雖然基準電壓值的變化遠沒有溫度值變化大,可…。一個是基準,一個是傳感器啊。看來,非得用外部基準不可了。我的板子上VREF并沒有用基準源,是通過一個簡單的濾波電路接到VCC上的,這個基本上還算穩(wěn)定,說明那個低壓差穩(wěn)壓集成電路AMS1117的溫度特性還是不錯的。

  最后,報告一下測試結果

 ?。?) 室溫下讀到的溫度傳感器的輸出為1700。

  要將其轉(zhuǎn)換成溫度,還要找張表:(見下圖)

  

  由于該表都是用電壓來表示的,所以要將1700轉(zhuǎn)換成電壓值。

 ?。?686/4096)*3.3=1.3583

  那么溫度就是:

  T=(1.43-1.3583)/4.3*1000)+25

  =14.03+25

  =39度

  (2)拿電吹風來,一陣吹,讀數(shù)變?yōu)?550

  電壓值:(1550/4096)*3.3=1.2488V

  再次計算:

  T=(1.42-1.2488)/4.3*1000+25

  =42.1+25

  =67.1度

 ?。?)開空調(diào)吹,讀數(shù)變?yōu)?730,這個就不計算了,但是可以肯定數(shù)值變化趨勢是對的了。

  從第一個39這個值來看,測溫的大體范圍是對的,因為我在室內(nèi),估計當時的溫度可能會有33~34度左右,這個39差了很多,原因:(1)V25和Avg_Slope都是取的中間值,這個未必對;(2)測量值和電壓沒有精確對照測量,估計誤差也比較大。(3)是否與采樣時間有關系?這個還要驗證。

  因此,如果某個應用中只是單獨測溫的話,這兩點都要注意,要在生產(chǎn)后有個修正的表格,否則誤差會比較大。
 

 

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

作為業(yè)內(nèi)持續(xù)專注于物聯(lián)網(wǎng)(IoT)芯片開發(fā)的廠商,Silicon Labs(芯科科技)自2021年剝離基礎設施與汽車(I&A)業(yè)務后,全力聚焦物聯(lián)網(wǎng)領域。而隨著物聯(lián)網(wǎng)邁向全場景無縫連接與人工智能(AI)端側(cè)賦能的新階段,...

關鍵字: 芯科科技 IoT BLE AoA Sub-G AI

在嵌入式開發(fā)中,STM32的時鐘系統(tǒng)因其靈活性和復雜性成為開發(fā)者關注的焦點。然而,看似簡單的時鐘配置背后,隱藏著諸多易被忽視的陷阱,輕則導致系統(tǒng)不穩(wěn)定,重則引發(fā)硬件損壞。本文從時鐘源選擇、PLL配置、總線時鐘分配等關鍵環(huán)...

關鍵字: STM32 時鐘系統(tǒng)

在嵌入式系統(tǒng)開發(fā)中,STM32系列微控制器的內(nèi)部溫度傳感器因其低成本、高集成度特性,廣泛應用于設備自檢、環(huán)境監(jiān)測等場景。然而,受芯片工藝差異和電源噪聲影響,其原始數(shù)據(jù)存在±1.5℃的固有誤差。本文從硬件配置、校準算法、軟...

關鍵字: STM32 溫度傳感器

在能源效率與智能化需求雙重驅(qū)動下,AC-DC轉(zhuǎn)換器的數(shù)字控制技術正經(jīng)歷從傳統(tǒng)模擬方案向全數(shù)字架構的深刻變革。基于STM32微控制器的PFM(脈沖頻率調(diào)制)+PWM(脈沖寬度調(diào)制)混合調(diào)制策略,結合動態(tài)電壓調(diào)整(Dynam...

關鍵字: AC-DC STM32

在智慧城市建設中,井蓋位移監(jiān)測是保障市政設施安全運行的關鍵環(huán)節(jié)。傳統(tǒng)人工巡檢方式存在效率低、響應慢等問題,而基于低功耗藍牙(BLE)與邊緣計算的實時預警系統(tǒng),通過物聯(lián)網(wǎng)技術實現(xiàn)了對井蓋狀態(tài)的實時感知與智能分析。本文從系統(tǒng)...

關鍵字: 井蓋位移 BLE

當前智能家居產(chǎn)品需求不斷增長 ,在這一背景下 ,對現(xiàn)有澆花裝置缺陷進行了改進 ,設計出基于STM32單片機的全 自動家用澆花機器人。該設計主要由機械結構和控制系統(tǒng)構成 ,機械結構通過麥克納姆輪底盤與噴灑裝置的結合實現(xiàn)機器...

關鍵字: STM32 麥克納姆輪 安全可靠 通過性強

用c++編程似乎是讓你的Arduino項目起步的障礙嗎?您想要一種更直觀的微控制器編程方式嗎?那你需要了解一下Visuino!這個圖形化編程平臺將復雜電子項目的創(chuàng)建變成了拖動和連接塊的簡單任務。在本文中,我們將帶您完成使...

關鍵字: Visuino Arduino ESP32 STM32

基于STM32與LoRa技術的無線傳感網(wǎng)絡憑借其低功耗、廣覆蓋、抗干擾等特性,成為環(huán)境監(jiān)測、工業(yè)自動化等場景的核心解決方案。然而,如何在復雜電磁環(huán)境中實現(xiàn)高效休眠調(diào)度與動態(tài)信道優(yōu)化,成為提升網(wǎng)絡能效與可靠性的關鍵挑戰(zhàn)。本...

關鍵字: STM32 LoRa

在實時控制系統(tǒng)、高速通信協(xié)議處理及高精度數(shù)據(jù)采集等對時間敏感的應用場景中,中斷響應延遲的優(yōu)化直接決定了系統(tǒng)的可靠性與性能上限。STM32系列微控制器憑借其靈活的嵌套向量中斷控制器(NVIC)、多通道直接內(nèi)存訪問(DMA)...

關鍵字: STM32 DMA

數(shù)字電源技術向高功率密度、高效率與高動態(tài)響應方向加速演進,STM32微控制器憑借其基于DSP庫的算法加速能力與對LLC諧振變換器的精準控制架構,成為優(yōu)化電源動態(tài)性能的核心平臺。相較于傳統(tǒng)模擬控制或通用型數(shù)字控制器,STM...

關鍵字: STM32 數(shù)字電源
關閉