找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1499|回復(fù): 11
收起左側(cè)

請問這里的NTC溫度檢測要怎么寫

[復(fù)制鏈接]
ID:1041297 發(fā)表于 2024-8-26 08:12 | 顯示全部樓層 |閱讀模式
請問這里的NTC溫度檢測要怎么寫
1.PNG
回復(fù)

使用道具 舉報

ID:404160 發(fā)表于 2024-8-26 13:18 | 顯示全部樓層
#include "sc92f7411.h" // 包含SC92F7411的寄存器定義頭文件

// 定義常量
#define ADC_CHANNEL 0  // 假設(shè)NTC連接到ADC0通道
#define FIXED_RESISTOR 10000  // 固定電阻值
#define VCC 3.3  // 假設(shè)參考電壓為3.3V
#define NTC_BETA 3950  // NTC的B參數(shù)

// 初始化ADC
void adc_init() {
    // 配置ADC時鐘、參考電壓、轉(zhuǎn)換模式等
    // ... 根據(jù)數(shù)據(jù)手冊配置ADC寄存器
    ADCCON = 0x00; // 初始化ADC控制寄存器,具體配置根據(jù)數(shù)據(jù)手冊
    ADCCON |= (1 << ADCEN); // 使能ADC
}

// 讀取ADC值
uint16_t read_adc(uint8_t channel) {
    // 設(shè)置ADC通道
    ADCCON &= ~(0x0F); // 清除通道選擇位
    ADCCON |= channel;
    // 啟動轉(zhuǎn)換
    ADCCON |= (1 << ADCS);
    // 等待轉(zhuǎn)換完成
    while (!(ADCCON & (1 << ADRDY)));
    // 讀取ADC結(jié)果
    return ADCDAT;
}

// 計算溫度
float calculate_temperature(uint16_t adc_value) {
    // ... 同樣根據(jù)Steinhart-Hart方程計算溫度
}

int main() {
    adc_init();
    while (1) {
        uint16_t adc_reading = read_adc(ADC_CHANNEL);
        float temperature = calculate_temperature(adc_reading);
        // 顯示或處理溫度數(shù)據(jù)
    }
}
NTC的參數(shù): 根據(jù)你用的NTC的B參數(shù)、阻值修改程序。以及ADC的配置: 您希望ADC的工作模式、分辨率等。
回復(fù)

使用道具 舉報

ID:1109793 發(fā)表于 2024-8-26 14:38 | 顯示全部樓層
跟廠家索取表格,然后論壇里面下載一個軟件,生成ADC的結(jié)果表格,然后查表
回復(fù)

使用道具 舉報

ID:309610 發(fā)表于 2024-8-26 20:41 | 顯示全部樓層
#include <math.h>
float T_c=0.0;   //溫度值
// 定義常量
#define R_FIXED 10000.0 // 固定電阻值10kΩ
#define B_CONST 3950.0 // NTC的B常數(shù)
#define T0 298.15 // 25℃轉(zhuǎn)換為開爾文
#define R0 10000.0 // NTC在25℃時的電阻值10kΩ

float calculate_temperature(float voltage) {
    float R_ntc, T;
    float V_supply = 3.3; // 電源電壓3.3V

    // 計算NTC電阻值
    R_ntc = R_FIXED * (V_supply / voltage - 1);

    // 計算溫度(開爾文)
    T = 1 / (1 / T0 + log(R_ntc / R0) / B_CONST);

    // 轉(zhuǎn)換為攝氏度
    T = T - 273.15;

    return T;
}

        T_c=calculate_temperature( filtered_voltage[1]); //電壓轉(zhuǎn)溫度計算  filtered_voltage[1]為ADC采樣轉(zhuǎn)換后電壓
要求不高可以使用上面程序,按硬件修改相應(yīng)電阻值
回復(fù)

使用道具 舉報

ID:1041297 發(fā)表于 2024-8-28 07:59 | 顯示全部樓層
xiaobendan001 發(fā)表于 2024-8-26 14:38
跟廠家索取表格,然后論壇里面下載一個軟件,生成ADC的結(jié)果表格,然后查表

兄弟,這個軟件在哪里獲取
回復(fù)

使用道具 舉報

ID:1109793 發(fā)表于 2024-8-28 10:23 | 顯示全部樓層
1314love 發(fā)表于 2024-8-28 07:59
兄弟,這個軟件在哪里獲取

論壇里面搜搜吧
回復(fù)

使用道具 舉報

ID:1130995 發(fā)表于 2024-8-28 13:30 | 顯示全部樓層
1314love 發(fā)表于 2024-8-28 07:59
兄弟,這個軟件在哪里獲取

#define VREF    5000  //電壓,單位mv
#define NTC_K   273.15
#define NTC_T2  298.15
#define NTC_B   3950.0
#define NTC_R   10000.0  //熱敏電阻標稱值10K
#define R14       4700.0   //與NTC電阻并聯(lián)的電阻 阻值   

//計算熱敏電阻對應(yīng)的溫度值,返回值放大10倍,例如:152表示15.2度
//u16 dat:采集的電壓值,單位毫伏
u16 Cal_Temperature(u16 dat)
{        
          u16 tmp = 0;
                float tmp1 = 0.0;
                float tmp2 = 0.0;
          float Resisit = 0.0;
        
          tmp = VREF - dat;
                Resisit = R14*tmp;
                Resisit = Resisit/dat;  //計算出當前溫度下熱敏電阻的阻值
                tmp1 = Resisit/NTC_R;
                tmp2 = log(tmp1);   
                tmp1 = tmp2/NTC_B;
                tmp2 = 1/NTC_T2;
                tmp1 = (tmp1+tmp2);
                tmp2 = 1.0/tmp1;
    if(tmp2 <= 274)tmp2 = 274;
                tmp2 -= 273.15;
          tmp1 = tmp2+0.05;
          tmp1 = (int)(tmp1*10);
         
                return tmp1;
}
回復(fù)

使用道具 舉報

ID:1041297 發(fā)表于 2024-8-28 14:55 | 顯示全部樓層
guobaox1981 發(fā)表于 2024-8-26 20:41
#include
float T_c=0.0;   //溫度值
// 定義常量

請問你這個voltage是ADC值嗎,還是說這個voltage是獲取的ADC值后轉(zhuǎn)化為電壓
回復(fù)

使用道具 舉報

ID:1041297 發(fā)表于 2024-8-28 16:02 | 顯示全部樓層
guobaox1981 發(fā)表于 2024-8-26 20:41
#include
float T_c=0.0;   //溫度值
// 定義常量

兄弟  我有個疑問 我不知道理解的對不對,您幫我看看,就是先用ADC去算出ADC值,然后返回回來去算NTC電阻值,再去算溫度,然后比如我有個加熱模式,我設(shè)定了150°,那我把這個算出來的溫度去和這個設(shè)定的溫度去比較,如果相等,就是等于加熱完成了對不對?還有就是那個查表法,我看你這邊沒有用,是不是查表法只是方便不用總是去看手冊,然后把它列到數(shù)組里面方便看
回復(fù)

使用道具 舉報

ID:309610 發(fā)表于 2024-8-28 21:09 | 顯示全部樓層
1314love 發(fā)表于 2024-8-28 14:55
請問你這個voltage是ADC值嗎,還是說這個voltage是獲取的ADC值后轉(zhuǎn)化為電壓

voltage是ADC采樣轉(zhuǎn)換后的電壓值為浮點數(shù)。
回復(fù)

使用道具 舉報

ID:309610 發(fā)表于 2024-8-31 16:17 | 顯示全部樓層
1314love 發(fā)表于 2024-8-28 16:02
兄弟  我有個疑問 我不知道理解的對不對,您幫我看看,就是先用ADC去算出ADC值,然后返回回來去算NTC電阻 ...

是的 我是多通道ADC采樣,采樣定時器中斷開啟,ADC轉(zhuǎn)換完成中斷保存結(jié)果,所以統(tǒng)一采樣完成12位ADC值保存到數(shù)組內(nèi),建立完成標志。采樣完成后主程序統(tǒng)一計算和濾波轉(zhuǎn)換為真實電壓值。再根據(jù)熱電阻電壓及電源電壓計算熱電阻阻值,再根據(jù)計算出溫度值,無需查表,一般精度夠用。 比起查表法,由于使用大量浮點計算,比較吃硬件,51單片機的話比較占系統(tǒng)資源,計算時間也較長,查表法就比較快,不占太多資源。
回復(fù)

使用道具 舉報

ID:13282 發(fā)表于 2024-9-1 00:52 | 顯示全部樓層
1314love 發(fā)表于 2024-8-28 07:59
兄弟,這個軟件在哪里獲取

把數(shù)據(jù)復(fù)制到EXCEL表一個列中, 然后用EXCEL函數(shù)計算ADC值就可以啦
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表