CH579使用內(nèi)部溫度采集不準(zhǔn)

您好,我們產(chǎn)品用了芯片內(nèi)部溫度采集,但是發(fā)現(xiàn)批量生產(chǎn)時(shí)有一些時(shí)-233度,有些是-23度,有些是30度,請(qǐng)問這種有沒有辦法統(tǒng)一一個(gè)參考點(diǎn)(比如就是25度作為一個(gè)參考點(diǎn)),如何修改?

內(nèi)部的溫度測(cè)量,是依賴于 ADC ,

請(qǐng)確保ADC 本身測(cè)量沒有問題,??

比如當(dāng)IO 的輸入電平,高于芯片的供電電壓時(shí)候, 將會(huì)影響到ADC 的測(cè)量結(jié)果,

對(duì)于ch578/579 如果使能的ADC 的粗調(diào) 值進(jìn)行修正,請(qǐng)確保PA5 在校準(zhǔn)時(shí)候配置為高阻輸入,且外部也是高阻態(tài), 否則將可能影響到 ADC 的粗調(diào)結(jié)果,從而進(jìn)一步影響到ADC的測(cè)量結(jié)果.

另外,也可將具體的測(cè)量溫度的代碼發(fā)我郵箱zxy@wch.cn,我們進(jìn)一步排查.


麻煩幫忙看一下ADC采集溫度代碼是否有問題,代碼如下所示:

#include "CH57x_common.h"

#include "adc.h"

signed short? RoughCalib_Value=0;// ADC粗調(diào)偏差值

/*******************************************************************************

* Function Name? : ADC_Init

* Description? ? : ADC初始化函數(shù)

* Input? ? ? ? ? : None

* Output? ? ? ? ?: None

* Return? ? ? ? ?: None

*******************************************************************************/

void ADC_Init(void)

{

? ? /* 溫度采樣并輸出, 包含數(shù)據(jù)粗校準(zhǔn) */?

? ? PRINT( "\n1.Temperature sampling...\n");

? ? ADC_InterTSSampInit();

? ? RoughCalib_Value = ADC_DataCalib_Rough();? // 用于計(jì)算ADC內(nèi)部偏差,記錄到變量 RoughCalib_Value中,注意這個(gè)變量需要定義為有符號(hào)變量

}

/*******************************************************************************

* Function Name? : Get_Adc_Average

* Description? ? : 獲取內(nèi)部溫度通道的轉(zhuǎn)換值,取times次,然后平均?

* Input? ? ? ? ? : times:獲取次數(shù)

* Output? ? ? ? ?: None

* Return? ? ? ? ?: 內(nèi)部溫度通道的times次轉(zhuǎn)換結(jié)果平均值

*******************************************************************************/

uint16_t Get_Adc_Average(uint8_t times)

{

uint32_t temp_val=0;

uint8_t t;

for(t=0;t

{

temp_val+=ADC_ExcutSingleConver() + RoughCalib_Value;? ? ? // 連續(xù)采樣20次

}

return temp_val/times;

}?

/*******************************************************************************

* Function Name? : Get_Adc_Average

* Description? ? : 獲取溫度

* Input? ? ? ? ? : None

* Output? ? ? ? ?: None

* Return? ? ? ? ?: 內(nèi)部溫度通道的times次轉(zhuǎn)換結(jié)果平均值

*******************************************************************************/

uint8_t Get_Temprate(void)

{

? int temp=0;

? temp=ADC_GetCurrentTS(Get_Adc_Average(20));

? if(temp<0)

temp=256+temp;

? PRINT("temp:%d 'c\r\n",temp);

? return temp;

}



同樣的問題,我也碰到了。


? /* 溫度采樣并輸出, 包含數(shù)據(jù)校準(zhǔn) */

? PRINT( "\n1.Temperature sampling...\n" );

? ADC_InterTSSampInit();

? RoughCalib_Value = ADC_DataCalib_Rough(); // 用于計(jì)算ADC內(nèi)部偏差,記錄到變量 RoughCalib_Value中,注意這個(gè)變量需要定義為有符號(hào)變量

? while(1)

{

? for( i = 0; i < 20; i++ )

? {

? ? ? ababab[i] = ADC_ExcutSingleConver() + RoughCalib_Value;? ? ? // 連續(xù)采樣20次

? }

? for( i = 0; i < 20; i++ )

? {

? ? PRINT( "%d \n", ababab[i] );

? }

}



我是這么寫的,我在官方例程上直接寫一個(gè)死循環(huán)看數(shù)組取數(shù),和串口打印出來的數(shù)據(jù)是否變化但是一直不變就不知道是什么意思了,打印出來這個(gè)數(shù)字一直位置在2849-2857這個(gè)范圍


從你給出的這個(gè)數(shù)據(jù),你用的應(yīng)該不是579吧,用的是573或者是582,你是怎么給芯片改變溫度的呢,外部溫度沒有明顯變化的情況下,adc采樣出的值基本不會(huì)有太大的變化的。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频