本帖最后由 16777216 于 2013-5-6 08:01 编辑
关于分辨率的文图
要求是要分辨率 0.1 精度1度
采用ntc1000的热敏电阻 ad采用了10位的 stc单片机自带的10ad转换
ad使用查表法
建立如下的数组
UINT16 code AD_Tab[111]={ 131, 138, 144, 151, 157, 164, 172,-------------------922, 924, 927};
共111个数字 对应 0度 1度 2度 -----------110度
在比如 109度的时候为924 110度的时候为927 那么此时我的分辨率是否为 (927-924)/10=0.3度
我得到的温度计算方法是 比如当数值为 925 的时候 T=109+(925-924)/(927-204)= 109.3度
926的时候 T=109+(926-924)/(927-204)=109.6度
但是我的要求是要达到0.1的分辨率 那么 必须要改变我 的ad么 采用16位ad?
或者还有别的方法么
还有一个问题 就是在20-21度的时候 俩ad采样相差大于10 但是我用液晶显示还是直接从20----20.4-----20.8----20.12
基本上都是以0.4度递增 但是理论上在这些点可以达到0.1递增的
我通过手动赋值ad的实际采样 可以正常显示20.1 20.2 20.3 20.4 说明ad采样出问题了么 奇怪了
这个是ad采样
- UINT16 Get_ADC(void)
- {
-
- UINT16 Temp;
- ADC_RES = 0; //清除结果
- ADC_RESL = 0;
- ADC_CONTR &= ~(0x01<<5); //清flag
- ADC_CONTR |= 0x68; //通道0 全速 开始转换
- while (1) //等待A/D转换结束
- {
- if (ADC_CONTR & 0x10) //0001,0000 测试A/D转换结束否
- {
- break;
- }
- }
- ADC_CONTR &= ~(0x01<<5); //清flag
- Temp = ((UINT16)ADC_RES)<<8 | ((UINT16)ADC_RESL);
- return Temp; //返回 A/D 10 位转换结果
这个是采样与温度转换的程序
- UINT16 Get_Temp(void)
- {
- UINT8 n, temp_zheng;
- UINT16 ad_temp;
- FP32 temp_xiao;
- UINT16 temp = 0;
- ad_temp = Get_ADC();
- while(1)
- {
- if ((ad_temp >= AD_Tab[n]) && (ad_temp <= AD_Tab[n+1]))
- {
- temp_zheng = n;
- temp_xiao = (1.0*(ad_temp - AD_Tab[n]))/(AD_Tab[n+1] - AD_Tab[n]);
- temp = temp_zheng*100 + temp_xiao*100.0;
- return temp;
- }
- n++;
- if (n>110)
- {
- return 20000;
- }
- }
这个是主函数
- void DispNowTemp(UINT16 j)
- {
- LCD_write_char(1, 1, j/1000 + '0');
- LCD_write_char(1, 2, j%1000/100 + '0');
- LCD_write_char(1, 3, '.');
- LCD_write_char(1, 4, j%1000%100/10 + '0');
- LCD_write_char(1, 5, j%1000%100%10 + '0');
- }
- main()
- {
- P3M1 |= 0x01 << 2;
- //P2M0 |= 0x01 << 5;
- P1M0 |= 0XF9;
- P1M1 = 0X01;
- sei();
- LCD_start();
- InitADC();
- while(1)
- {
- ADTemp = Get_Temp();
- DispNowTemp(ADTemp);
- //LCD_write_num(1,1,ADTemp);
- //LCD_clear();
- }
这个是采样ad
- UINT16 code AD_Tab[111]={ 131,
- 138,
- 144,
- 151,
- 157,
- 164,
- 172,
- 179,
- 187,
- 194,
- 202,
- 210,
- 219,
- 227,
- 236,
- 245,
- 254,
- 263,
- 272,
- 282,
- 291,
- 301,
- 311,
- 321,
- 331,
- 341,
- 352,
- 362,
- 372,
- 382,
- 393,
- 403,
- 414,
- 424,
- 435,
- 445,
- 456,
- 466,
- 477,
- 487,
- 497,
- 507,
- 518,
- 528,
- 538,
- 548,
- 558,
- 568,
- 577,
- 587,
- 596,
- 606,
- 615,
- 624,
- 633,
- 642,
- 651,
- 659,
- 668,
- 676,
- 684,
- 692,
- 700,
- 708,
- 715,
- 723,
- 730,
- 737,
- 744,
- 751,
- 758,
- 764,
- 771,
- 777,
- 783,
- 789,
- 795,
- 801,
- 806,
- 812,
- 817,
- 822,
- 828,
- 832,
- 837,
- 842,
- 847,
- 851,
- 855,
- 860,
- 864,
- 868,
- 872,
- 876,
- 879,
- 883,
- 887,
- 890,
- 893,
- 897,
- 900,
- 903,
- 906,
- 909,
- 911,
- 914,
- 917,
- 919,
- 922,
- 924,
- 927};
|