翌创ET6001开发板具有A/D数据采集功能,为例实现NTC温度检测,先对ADC0的通道0以单端采样的方式来进行数据采样。
对该通道的功能配置函数为:
void ADC_SingleSample_Config(void)
{
ADC_InitTypeDef stInit;
ADC_DeInit(ADC0);
ADC_StartCalibration(ADC0);
ADC_StructInit(&stInit);
stInit.virtualChannelMask = ADC_VIRTUAL_CHANNEL0;
stInit.workMode = ADC_WORK_MODE_SINGLE;
stInit.trigMode = ADC_TRIGGER_MODE_CONTINUOUS;
stInit.trigger = ADC0_TRIGGER_SRPWM_ROW0_COL0;
ADC_Init(ADC0, &stInit);
ADC_ACRemapSingle(ADC0, ADC_VIRTUAL_CHANNEL0, ADC_ANALOG_CHANNEL0);
ADC_CoreEnable(ADC0);
ADC_VCEnable(ADC0, ADC_VIRTUAL_CHANNEL0);
}
基于串口的数据采集值输出的函数为:
void ADC_Test(void)
{
unsigned int ret=0;
while (ADC_GetVCResultStatus(ADC0, ADC_VIRTUAL_CHANNEL0) != SET);
ret = ADC_S16D2toUint(ADC_GetVCResult(ADC0, ADC_VIRTUAL_CHANNEL0));
printf("adc sample code: %d \r\n", ret);
}
进行测试的主程序为:
int main(void)
{
UART0_printf_init();
printf("adc sample test \r\n");
Test_ADC_Init();
while (1)
{
ADC_Test();
delay(600000);
}
}
经程序的编译与运行,其测试结果如图1所示。
图1 测试效果
值得指出的是,当在ADC0 (J2-SAR_A0)接入3.3V电压值,其输出值为4057,而非4096;当进入GNG时,其输出值为24,也并不为零。
NTC温度检测是建立在A/D数据采集的基础上,通过添加感温器件即可进行温度检测。
NTC是一种温度敏感器件,其阻值会随温度的升高而呈下降的热敏特性。
在外接NTC热敏电阻模块的情况下,可进行温度的检测,其电路如图2所示,并将OUT引脚接入ADC0 。
图2 测温电路
图3 电路连接
实现温度检测与输出显示的函数为:
void ADC_Test(void)
{
uint16_t u,V;
unsigned int ret=0;
while (ADC_GetVCResultStatus(ADC0, ADC_VIRTUAL_CHANNEL0) != SET);
u = ADC_S16D2toUint(ADC_GetVCResult(ADC0, ADC_VIRTUAL_CHANNEL0));
printf("ADC0: %d \n", u);
V=0;
...
if((u<=1644) && (u>1268))
V=10+(1644-u)/37;
if((u<=1268) && (u>947))
V=20+(1268-u)/32;
if((u<=947) && (u>692))
V=30+(947-u)/25;
...
printf("temperature: %d C \n", V);
}
在室温环境下,其测试结果如图4所示。
图4 室温检测
在手指接触NTC热敏电阻的外部铠甲时,可明显观察到温度在缓慢地上升,其测试结果如图6所示。
图5 升温测试
图6 测试结果
|