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

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

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

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

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

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

MDK:Keil 5.30

開發(fā)板:GD32F207I-EVAL

MCU:GD32F207IK

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

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

GD32 內(nèi)部溫度傳感器的使用很簡(jiǎn)單,只要設(shè)置一下內(nèi)部 ADC,并激活其內(nèi)部通道就差不多了。關(guān)于 ADC 的設(shè)置,我們?cè)谇懊娴恼鹿?jié)已經(jīng)進(jìn)行了詳細(xì)的介紹,這里就不再多說。接下來我們介紹一下和溫度傳感器設(shè)置相關(guān)的 2 個(gè)地方。

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

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

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)設(shè)置 ADC,開啟內(nèi)部溫度傳感器。

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

adc_tempsensor_vrefint_enable();

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

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

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

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

所以溫度大約為 55℃。

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

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

內(nèi)部ADC實(shí)現(xiàn)代碼很簡(jiǎ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ù)也很簡(jiǎn)單:

/*
    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)換標(biāo)志
            adc_flag_clear(ADC0, ADC_FLAG_EOC); // 清除結(jié)束標(biāo)志

            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); //實(shí)際電壓
        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)換標(biāo)志
adc_flag_clear(ADC0, ADC_FLAG_EOC); // 清除結(jié)束標(biāo)志

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

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

3 實(shí)驗(yàn)現(xiàn)象

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

16842453000809fyvw7xhxs

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

    關(guān)注

    146

    文章

    17148

    瀏覽量

    351196
  • 溫度傳感器
    +關(guān)注

    關(guān)注

    48

    文章

    2940

    瀏覽量

    156074
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5050

    瀏覽量

    97471
  • Cortex-M
    +關(guān)注

    關(guān)注

    2

    文章

    229

    瀏覽量

    29763
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    403

    瀏覽量

    24351
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    設(shè)計(jì)的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'>實(shí)戰(zhàn)</b><b class='flag-5'>指南</b>(基礎(chǔ)<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ā)實(shí)戰(zhàn)指南(基礎(chǔ)) 6 按鍵

    按鍵 GPIO 端口有兩個(gè)方案可以選擇,一是采用上拉輸入模式,因?yàn)榘存I在沒按下的時(shí)候,是默認(rèn)為高電平的,采且內(nèi)部上拉模式正好符合這個(gè)要求。第二個(gè)方案是直接采用浮空輸入模式,因?yàn)榘凑沼布娐穲D,在芯片外部接了上拉電阻,其實(shí)就沒必要再配置成內(nèi)部上拉輸入模式了,因?yàn)樵谕獠可侠c
    的頭像 發(fā)表于 05-11 08:57 ?4665次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>指南</b>(基礎(chǔ)<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>6<b class='flag-5'>章</b> 按鍵

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    實(shí)驗(yàn)?zāi)康腟TM32內(nèi)部集成了一個(gè)溫度傳感器,可以用來測(cè)量芯片的溫度,本章學(xué)習(xí)如何讀取此溫度值,數(shù)據(jù)手冊(cè)請(qǐng)參看
    發(fā)表于 08-12 06:40

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

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

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

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

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

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

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

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