c语言实现NTC 采样
时间: 2023-08-30 11:10:47 浏览: 158
要实现NTC采样,需要先了解NTC的工作原理。NTC是一种负温度系数热敏电阻,它的阻值随着温度的升高而下降。在实际应用中,通常将NTC接入一个电路中,通过测量电路中的电压或电流来得到NTC的阻值,从而推算出环境温度。
C语言实现NTC采样的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#define ADC_CS 0 // AD转换器片选引脚
#define ADC_DIO 1 // AD转换器数据引脚
#define ADC_CLK 2 // AD转换器时钟引脚
// AD转换器读取函数
int get_ADC_Result(unsigned char channel) {
unsigned char i;
unsigned char dat1 = 0, dat2 = 0;
digitalWrite(ADC_CS, 0); // 片选AD转换器
delayMicroseconds(5);
shiftOut(ADC_DIO, ADC_CLK, MSBFIRST, channel); // 发送通道号
for (i = 0; i < 8; i++) {
digitalWrite(ADC_CLK, 1);
delayMicroseconds(5);
digitalWrite(ADC_CLK, 0);
delayMicroseconds(5);
dat1 <<= 1;
dat1 |= digitalRead(ADC_DIO);
}
for (i = 0; i < 8; i++) {
dat2 <<= 1;
digitalWrite(ADC_CLK, 1);
delayMicroseconds(5);
digitalWrite(ADC_CLK, 0);
delayMicroseconds(5);
dat2 |= digitalRead(ADC_DIO);
}
digitalWrite(ADC_CS, 1); // 取消片选
return ((dat1 << 8) | dat2); // 返回AD转换结果
}
int main(void) {
int adcValue;
float resistance;
float temperature;
if (wiringPiSetup() == -1) { // 初始化wiringPi库
printf("wiringPi setup failed !");
return 1;
}
pinMode(ADC_CS, OUTPUT); // 设置ADC_CS引脚为输出模式
pinMode(ADC_DIO, OUTPUT); // 设置ADC_DIO引脚为输出模式
pinMode(ADC_CLK, OUTPUT); // 设置ADC_CLK引脚为输出模式
while (1) {
adcValue = get_ADC_Result(0); // 读取AD转换结果
resistance = (float) (1023 - adcValue) * 10 / adcValue; // 计算NTC电阻值
temperature = 1 / (1 / 298.15 + log(resistance / 10) / 3950) - 273.15; // 计算温度值
printf("NTC resistance is %.1f ohm, temperature is %.1f degree Celsius.\n", resistance, temperature);
delay(1000); // 延时1秒
}
return 0;
}
```
在这个代码中,我们首先定义了AD转换器的片选引脚、数据引脚和时钟引脚的编号。然后在`main()`函数中初始化了wiringPi库,并将ADC_CS、ADC_DIO和ADC_CLK引脚设置为输出模式。接着进入一个循环,每次读取AD转换器的通道0上的采样值,然后根据公式计算出NTC电阻值和温度值,并输出到终端上。
需要注意的是,这个代码中的公式只适用于10K欧姆的NTC热敏电阻。如果你使用的NTC电阻不是10K欧姆,你需要修改公式中的常数值。
阅读全文