RM新时代网站-首页

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

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

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

GD32開發(fā)實戰(zhàn)指南(基礎篇) 第14章 內(nèi)部溫度傳感器

嵌入式大雜燴 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2023-05-17 08:58 ? 次閱讀

開發(fā)環(huán)境:

MDK:Keil 5.30

開發(fā)板:GD32F207I-EVAL

MCU:GD32F207IK

1 內(nèi)部溫度傳感器工作原理

GD32 有一個內(nèi)部的溫度傳感器,可以用來測量 CPU 及周圍的溫度(TA)。該溫度傳感器在內(nèi)部和 ADCx_IN16 輸入通道相連接,此通道把傳感器輸出的電壓轉(zhuǎn)換成數(shù)字值。溫度傳感器模擬輸入推薦采樣時間是 17.1μs。GD32 的內(nèi)部溫度傳感器支持的溫度范圍為: -40~125度。精度比較差,為±1.5℃左右。

GD32 內(nèi)部溫度傳感器的使用很簡單,只要設置一下內(nèi)部 ADC,并激活其內(nèi)部通道就差不多了。關于 ADC 的設置,我們在前面的章節(jié)已經(jīng)進行了詳細的介紹,這里就不再多說。接下來我們介紹一下和溫度傳感器設置相關的 2 個地方。

第一個地方,我們要使用 GD32的內(nèi)部溫度傳感器,必須先激活 ADC 的內(nèi)部通道,這里通過 ADC_CTL1的 TSVREN位(bit23)設置。設置該位為 1 則啟用內(nèi)部溫度傳感器。置位ADC_CTL1寄存器的ADCON位,或者由外部觸發(fā)啟動ADC轉(zhuǎn)換。

第二個地方, GD32的內(nèi)部溫度傳感器固定的連接在 ADC 的通道 16 上,所以,我們在設置好 ADC 之后只要讀取通道 16 的值,就是溫度傳感器返回來的電壓值了。根據(jù)這個值,我們就可以計算出當前溫度。GD32內(nèi)置一個溫度傳感器,通過 ADC_IN16這個通道可以讀出溫度傳感器的電壓。其中給出了一個計算公式:

Temperature (in ℃) = {(V25- Vsense) / Avg_Slope} + 25

  • 公式中的 Vsense 就是在 ADC_IN16讀到的數(shù)值。單位是V。
  • Avg_Slope 就是溫度與 ADC 數(shù)值轉(zhuǎn)換的斜率。最小=4.0 典型=4.3 最大=4.6 單位是 mV/℃
  • V25 最小=1.34V 典型=1.43V 最大=1.52V

現(xiàn)在,我們就可以總結(jié)一下 GD32內(nèi)部溫度傳感器使用的步驟了,如下:

1)設置 ADC,開啟內(nèi)部溫度傳感器。

關于如何設置 ADC,上一節(jié)已經(jīng)介紹了,我們采用與上一節(jié)相似的設置。 不同的是上一節(jié)溫度傳感器是讀取外部通道的值,而內(nèi)部溫度傳感器相當與把通道端口連接在內(nèi)部溫度傳感器上。所以這里,我們要開啟內(nèi)部溫度傳感器功能:

adc_tempsensor_vrefint_enable();

2)讀取通道 16 的 AD 值,計算結(jié)果。

在設置完之后,我們就可以讀取溫度傳感器的電壓值了, 得到該值就可以用上面的公式計算溫度值。

例如讀到 Vsense= 1.30V。分別取 V25和 Avg_Slope 的典型值,

計算得到:(1.43 - 1.30)/0.0043 + 25 = 55.23

所以溫度大約為 55℃。

  • GD32內(nèi)部溫度傳感器與 ADC 的通道16相連,與 ADC 配合使用實現(xiàn)溫度測量;
  • 測量范圍–40~125℃,精度±1.5℃。
  • 溫度傳感器產(chǎn)生一個隨溫度線性變化的電壓,轉(zhuǎn)換范圍在2V < VDDA < 3.6V之間。

2 內(nèi)部溫度傳感器讀取實現(xiàn)

內(nèi)部ADC實現(xiàn)代碼很簡單,配置函數(shù)如下:

/*
    brief      Configure the ADC peripheral
    param[in]  none
    param[out] none
    retval     none
*/
void adc_config(void)
{
    /* enable GPIOC clock */
    rcu_periph_clock_enable(RCU_GPIOC);

    /* enable ADC0 clock */
    rcu_periph_clock_enable(RCU_ADC0);

    /* config ADC clock */
    rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);

    /* config the GPIO as analog mode */
    gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_3);

    /* ADC mode config */
    adc_mode_config(ADC_MODE_FREE);

    /* ADC continuous mode function disable */
    adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, DISABLE);

    /* ADC data alignment config */
    adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);

    /* ADC channel length config */
    adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 1);

    /* ADC regular channel config */
    adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_16, ADC_SAMPLETIME_1POINT5);

    /* ADC trigger config */
    adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);

    /* ADC external trigger enable */
    adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);

    /* ADC temperature and Vrefint enable */
    adc_tempsensor_vrefint_enable();

    /* enable ADC interface */
    adc_enable(ADC0);
    delay_ms(1);

    /* ADC calibration and reset calibration */
    adc_calibration_enable(ADC0);

}

主函數(shù)也很簡單:

/*
    brief      main function
    param[in]  none
    param[out] none
    retval     none
*/
int main(void)
{
    uint32_t ad=0;  
    uint8_t i=0;

    //systick init
    sysTick_init();

    //usart init 115200 8-N-1
    com_init(COM1, 115200, 0, 1);

    //adc config
    adc_config();

    while(1)
    {      
        ad=0;
        for(i=0;i<50;i++)
        {

            adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);

            while(!adc_flag_get(ADC0,ADC_FLAG_EOC));//檢查轉(zhuǎn)換標志
            adc_flag_clear(ADC0, ADC_FLAG_EOC); // 清除結(jié)束標志

            ad=ad+adc_regular_data_read(ADC0);//ADC轉(zhuǎn)換結(jié)果
        }
        ad=ad/50;
        printf("The current AD value = 0x%04X \\r\\n", ad); 
        printf("The current AD value = %f V \\r\\n",(float)ad / 4096 * 3.3); //實際電壓
        printf("temperture =%f\\r\\n\\r\\n",(1.43-3.3/4096*ad)/0.0043+25);

        delay_ms(1000);
    }
}

值得注意的是,獲取內(nèi)部溫度的核心代碼就以下幾行:

adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);

while(!adc_flag_get(ADC0,ADC_FLAG_EOC));//檢查轉(zhuǎn)換標志
adc_flag_clear(ADC0, ADC_FLAG_EOC); // 清除結(jié)束標志

ad=ad+adc_regular_data_read(ADC0);//ADC轉(zhuǎn)換結(jié)果

只是為了防止偶然誤差,這里求50次的均值。

3 實驗現(xiàn)象

將程序編譯好后下載到板子中,通過串口助手可以看到在接收區(qū)有溫度值輸出。

16842453000809fyvw7xhxs

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

    關注

    146

    文章

    17123

    瀏覽量

    350973
  • 溫度傳感器
    +關注

    關注

    48

    文章

    2940

    瀏覽量

    156014
  • 開發(fā)板
    +關注

    關注

    25

    文章

    5032

    瀏覽量

    97371
  • Cortex-M
    +關注

    關注

    2

    文章

    229

    瀏覽量

    29752
  • GD32
    +關注

    關注

    7

    文章

    403

    瀏覽量

    24326
收藏 人收藏

    評論

    相關推薦

    GD32開發(fā)實戰(zhàn)指南(基礎) 1 開發(fā)環(huán)境搭建

    設計的GD32F207I-EVAL開發(fā)板。 GD32F207I-EVAL開發(fā)板使用 GD32F207IK作為主控制
    的頭像 發(fā)表于 05-07 23:35 ?1.1w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>1<b class='flag-5'>章</b> <b class='flag-5'>開發(fā)</b>環(huán)境搭建

    GD32開發(fā)實戰(zhàn)指南(基礎) 6 按鍵

    按鍵 GPIO 端口有兩個方案可以選擇,一是采用上拉輸入模式,因為按鍵在沒按下的時候,是默認為高電平的,采且內(nèi)部上拉模式正好符合這個要求。第二個方案是直接采用浮空輸入模式,因為按照硬件電路圖,在芯片外部接了上拉電阻,其實就沒必要再配置成內(nèi)部上拉輸入模式了,因為在外部上拉與
    的頭像 發(fā)表于 05-11 08:57 ?4648次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>6<b class='flag-5'>章</b> 按鍵

    GD32開發(fā)實戰(zhàn)指南(基礎) 7 定時

    系統(tǒng)滴答定時一般用來提供“心跳”作用,而GD32定時最基本功能也是定時,可以設置不同時間長度的定時。定時除了最基本的定時功能外,定時
    的頭像 發(fā)表于 05-11 09:00 ?1.2w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>7<b class='flag-5'>章</b> 定時<b class='flag-5'>器</b>

    GD32開發(fā)實戰(zhàn)指南(基礎) 8 定時

    Modulation” 的縮寫,簡稱脈寬調(diào)制,是利用微處理的數(shù)字輸出來對模擬電路進行控制的一種非常有效的技術。簡單一點,就是對脈沖寬度的控制。 GD32 的定時除了 TIMER5 和 6(基本定時
    的頭像 發(fā)表于 05-12 22:14 ?7924次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>8<b class='flag-5'>章</b> 定時<b class='flag-5'>器</b>

    GD32開發(fā)實戰(zhàn)指南(基礎) 11 CPU的高級代理-DMA

    或者存儲和存儲之間的高速數(shù)據(jù)傳輸,因而被廣泛地使用。早在 8086 的應用中就已經(jīng)有 Intel 的 8237 這種典型的 DMA 控制,而 GD32的 DMA 則是以類似外設的
    的頭像 發(fā)表于 05-16 08:59 ?3862次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>11<b class='flag-5'>章</b> CPU的高級代理-DMA

    GD32開發(fā)實戰(zhàn)指南(基礎) 12 ADC

    GD32F2系列有 3 個逐次逼近型的ADC,精度為 12 位,有18個多路復用通道,可以轉(zhuǎn)換來自16個外部通道和2個內(nèi)部通道的模擬信號。其中ADC0 和 ADC1都有 16 個外部通道, ADC2
    的頭像 發(fā)表于 05-16 09:03 ?1.1w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>12<b class='flag-5'>章</b> ADC

    GD32開發(fā)實戰(zhàn)指南(基礎) 15 低功耗

    GD32的工作電壓(VDD)為2.0~3.6V。通過內(nèi)置的電壓調(diào)節(jié)提供所需的1.8V電源。當主電源VDD掉電后,通過VBAT腳為實時時鐘(RTC)和備份寄存提供電源。
    的頭像 發(fā)表于 05-17 08:59 ?8047次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>15<b class='flag-5'>章</b> 低功耗

    GD32開發(fā)實戰(zhàn)指南(基礎) 16 RTC

    開發(fā)環(huán)境: MDK:Keil 5.30 開發(fā)板:GD32F207I-EVAL MCU:GD32F207IK 1 RTC工作原理 1.1 RTC簡介
    的頭像 發(fā)表于 05-18 22:14 ?7151次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>16<b class='flag-5'>章</b> RTC

    GD32開發(fā)實戰(zhàn)指南(基礎) 17 看門狗

    開發(fā)環(huán)境: MDK:Keil 5.30 開發(fā)板:GD32F207I-EVAL MCU:GD32F207IK GD32 有兩個看門狗, 一個是
    的頭像 發(fā)表于 06-03 16:00 ?1.1w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>17<b class='flag-5'>章</b> 看門狗

    【圖書分享】《STM32庫開發(fā)實戰(zhàn)指南

    庫函數(shù)開發(fā)小結(jié) 10 DMA——為CPU減負 11 ADC實驗(DMA方式) 12
    發(fā)表于 03-13 17:01

    STM32的內(nèi)部溫度傳感器

    實驗目的STM32內(nèi)部集成了一個溫度傳感器,可以用來測量芯片的溫度,本章學習如何讀取此溫度值,數(shù)據(jù)手冊請參看
    發(fā)表于 08-12 06:40

    STM32內(nèi)部溫度傳感器概述

    記錄一下,方便以后翻閱~主要內(nèi)容:1)STM32內(nèi)部溫度傳感器概述;2)相關實驗代碼解讀。實驗功能:系統(tǒng)啟動后,實時將內(nèi)部溫度
    發(fā)表于 12-10 06:11

    GD32 MCU原理及固件庫開發(fā)指南》+讀后感

    。 2介紹GD32 MCU快速入門與開發(fā)平臺搭建的方法,包括對軟硬件開發(fā)平臺、調(diào)試工具、GD32
    發(fā)表于 06-06 21:52

    GD32開發(fā)實戰(zhàn)指南(基礎) 19 程序加密

    GD32通過讀取芯片唯一ID號來實現(xiàn)程序的保護,防止被抄襲。96位的產(chǎn)品唯一身份標識所提供的參考號碼對任意一個GD32微控制
    的頭像 發(fā)表于 05-20 09:10 ?4138次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實戰(zhàn)</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>19<b class='flag-5'>章</b> 程序加密

    GD32 MCU內(nèi)部溫度傳感器如何使用,以及適合哪種應用場景?

    GD32 MCU全系列產(chǎn)品均內(nèi)置溫度傳感器內(nèi)部溫度傳感器可以用于測量器件周圍
    的頭像 發(fā)表于 02-28 09:26 ?1949次閱讀
    <b class='flag-5'>GD32</b> MCU<b class='flag-5'>內(nèi)部</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>如何使用,以及適合哪種應用場景?
    RM新时代网站-首页