2回答

1收藏

简易温度采集系统

其他 其他 4265 人阅读 | 2 人回复 | 2013-04-19

简易温度采集系统

本程序是使用了12位AD转换和ntc温度传感器,ntc是负洗漱数温度,系统通过AD转换将温度传感器和avr单片机联系起来。
在本实验中使用了atmelstudio的提供例程程序,为此我写了一些心得体会。
下图是AD转换的与温度线性关系。


有图中可以知道有部分两者很好吻合在一起,为了反映这部分的,有如下的等式。

为此有如下相应的程序
if (result > 697) {
              temperature = (int8_t)((-0.0295 * result) + 40.5);
       } if (result > 420) {
              temperature = (int8_t)((-0.0474 * result) + 53.3);
       } else {
              temperature = (int8_t)((-0.0777 * result) + 65.1);
       }
为了显示温度,在ADC中断函数使用了如下函数
snprintf(out_str, OUTPUT_STR_SIZE,"Temperature: %4d C", last_temperature);
gfx_mono_draw_string(out_str, 0, 0, &sysfont);
启动下次转换
adc_start_conversion(adc, ch_mask);
在每次AD转换都会产生一次中断,采显示温度。下为中断函数
static void adc_handler(ADC_t *adc, uint8_t ch_mask, adc_result_t result)
为了配置ADC模块,使用了无符号的12数据存储结果,配置了参考电压,最大采样率频率是200kHz,人工的转换触发中断。
adc_set_conversion_parameters(&adc_conf, ADC_SIGN_ON, ADC_RES_12,
                     ADC_REF_VCC);
       adc_set_clock_rate(&adc_conf,200000UL);
       adc_set_conversion_trigger(&adc_conf, ADC_TRIG_MANUAL, 0, 0);
       adc_enable_internal_input(&adc_conf, ADC_INT_TEMPSENSE);
       adc_write_configuration(&ADCA, &adc_conf);
       adc_set_callback(&ADCA, &adc_handler);申请中断函数
AD转换通道0和温度传感器连接,为此配置AD转换通道0
adcch_set_input(&adcch_conf, ADCCH_POS_PIN1, ADCCH_NEG_NONE,
                            1);
adcch_set_interrupt_mode(&adcch_conf, ADCCH_MODE_COMPLETE);
adcch_enable_interrupt(&adcch_conf);
adcch_write_configuration(&ADCA, ADC_CH0, &adcch_conf);
下面函数是使能AD转换,开始第一次转换。
adc_enable(&ADCA);
adc_start_conversion(&ADCA, ADC_CH0);
下图是实验显示结果。


6.pdf

164.23 KB, 下载次数: 15

文档

ADC_EXAMPLE1_GFX1.rar

1.49 MB, 下载次数: 14

程序

分享到:
回复

使用道具 举报

回答|共 2 个

倒序浏览

沙发

小马哈

发表于 2013-4-19 19:55:24 | 只看该作者

{:soso_e142:},不错,不错。
板凳

dwwzl

发表于 2013-4-20 07:55:03 | 只看该作者

关注!。。。。。。。。。。。。。。。。。。。。。。
用技术,爱生活!
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条