完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 hhh402 于 2017-8-3 18:13 编辑 很多人都反映STC单片机AD转换精度不高,转换数值波动大。我通过一个多月的反复试验,终于找到了提高AD转换精度的方法。 首先是硬件问题,手册提到要在AD管脚到地之间加一个电容47P左右,用来稳定电压提高精度。我的经验是不要加这个电容,电压有一点波动有利于使用过采样方法提高转换精度。我的电路可以使用过采样实现12位转换精度。关于过采样请自己百度。 第二、AD转换时要先切换通道,延时一下再AD转换,AD转换时临时关闭中断可以使转换更稳定。 第三、使用过采样方法提高精度,硬件是10位,过采样可以达到12位。
附上程序
unsigned int AD_get(unsigned char channel) //AD转换 { EA=0; //关总中断,避免显示影响转换 ADC_CONTR=0xc8|channel; //开启AD转换1100 1000 即POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 _nop_(); _nop_(); _nop_(); _nop_();//要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR 寄存器 while((ADC_CONTR&0x10)==0); //等待转换完成 EA=1; //开总中断 ADC_CONTR&=0xe7; //关闭AD转换,ADC_FLAG位由软件清0 return(ADC_RES*4+ADC_RESL); //返回AD转换完成的10位数据(16进制) } //------------------------------------------------------------------------------ u16 AD_work(unsigned char channel) //AD过采样 { u16 AD_val=0; //定义处理后的数值AD_val unsigned char i; ADC_CONTR |=channel; //预转换通道使AD电压稳定。 即POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 _nop_(); _nop_(); _nop_(); _nop_();//要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR 寄存器 for(i=0;i<32;i++) { ADC_RES=0; //清零转换结果寄存器高8位 ADC_RESL=0; //清零转换结果寄存器低2位 AD_val+=AD_get(channel); //转换32次总和(提高精度) } AD_val/=8; //数值扩大到4倍,过采样到12位。 return AD_val; } 转换结果:ad1是温度1的AD过采样转换数值,ad2是温度2的AD过采样转换数值。每秒转换一次稳定。 转换对应的温度是28.8度。 ad1= 1487; ad2= 1489; ad1= 1486; ad2= 1490; ad1= 1487; ad2= 1489; ad1= 1488; ad2= 1489; ad1= 1487; ad2= 1490; ad1= 1487; ad2= 1490; ad1= 1488; ad2= 1490; ad1= 1488; ad2= 1488; ad1= 1487; ad2= 1488; ad1= 1488; ad2= 1488; ad1= 1488; ad2= 1489; ad1= 1487; ad2= 1488; ad1= 1487; ad2= 1489; ad1= 1487; ad2= 1489; ad1= 1487; ad2= 1489; ad1= 1487; ad2= 1490; ad1= 1487; ad2= 1490; ad1= 1488; ad2= 1489; ad1= 1488; ad2= 1489; ad1= 1487; ad2= 1488; ad1= 1488; ad2= 1489; ad1= 1487; ad2= 1488; ad1= 1487; ad2= 1490; ad1= 1486; ad2= 1488; ad1= 1487; ad2= 1489; ad1= 1487; ad2= 1488; ad1= 1487; ad2= 1489; ad1= 1487; ad2= 1488; ad1= 1487; ad2= 1488; ad1= 1487; ad2= 1488; ad1= 1487; ad2= 1488; ad1= 1487; ad2= 1488; ad1= 1488; ad2= 1488; ad1= 1487; ad2= 1488; ad1= 1487; ad2= 1488; |
|
相关推荐
5 个讨论
|
|
转换结果:ad1是温度1的AD过采样转换数值,wd1是温度1数值,ad2是温度2的AD过采样转换数值。wd2是温度2数值,每秒转换一次。通过串口用串口助手显示的数据.
ad1= 1451; wd1= 29.4du; ad2= 1401;wd2= 30.7du; ad1= 1451; wd1= 29.4du; ad2= 1403;wd2= 30.7du; ad1= 1451; wd1= 29.4du; ad2= 1404;wd2= 30.6du; ad1= 1451; wd1= 29.4du; ad2= 1404;wd2= 30.6du; ad1= 1453; wd1= 29.4du; ad2= 1405;wd2= 30.6du; ad1= 1454; wd1= 29.4du; ad2= 1405;wd2= 30.6du; ad1= 1452; wd1= 29.3du; ad2= 1406;wd2= 30.6du; ad1= 1453; wd1= 29.4du; ad2= 1406;wd2= 30.5du; ad1= 1455; wd1= 29.4du; ad2= 1406;wd2= 30.5du; ad1= 1454; wd1= 29.3du; ad2= 1405;wd2= 30.5du; ad1= 1455; wd1= 29.3du; ad2= 1408;wd2= 30.6du; ad1= 1456; wd1= 29.3du; ad2= 1408;wd2= 30.5du; ad1= 1456; wd1= 29.3du; ad2= 1409;wd2= 30.5du; ad1= 1456; wd1= 29.3du; ad2= 1410;wd2= 30.5du; ad1= 1457; wd1= 29.3du; ad2= 1410;wd2= 30.4du; ad1= 1458; wd1= 29.3du; ad2= 1410;wd2= 30.4du; ad1= 1457; wd1= 29.2du; ad2= 1410;wd2= 30.4du; ad1= 1459; wd1= 29.3du; ad2= 1411;wd2= 30.4du; ad1= 1459; wd1= 29.2du; ad2= 1412;wd2= 30.4du; ad1= 1459; wd1= 29.2du; ad2= 1410;wd2= 30.4du; ad1= 1459; wd1= 29.2du; ad2= 1403;wd2= 30.4du; ad1= 1462; wd1= 29.2du; ad2= 1390;wd2= 30.6du; ad1= 1460; wd1= 29.1du; ad2= 1376;wd2= 30.9du; ad1= 1460; wd1= 29.2du; ad2= 1363;wd2= 31.3du; ad1= 1460; wd1= 29.2du; ad2= 1352;wd2= 31.7du; ad1= 1462; wd1= 29.2du; ad2= 1342;wd2= 31.9du; ad1= 1462; wd1= 29.1du; ad2= 1333;wd2= 32.2du; ad1= 1462; wd1= 29.1du; ad2= 1325;wd2= 32.4du; ad1= 1462; wd1= 29.1du; ad2= 1317;wd2= 32.7du; ad1= 1463; wd1= 29.1du; ad2= 1308;wd2= 32.9du; ad1= 1463; wd1= 29.1du; ad2= 1301;wd2= 33.1du; ad1= 1463; wd1= 29.1du; ad2= 1295;wd2= 33.3du; ad1= 1464; wd1= 29.1du; ad2= 1293;wd2= 33.5du; ad1= 1464; wd1= 29.1du; ad2= 1286;wd2= 33.5du; ad1= 1463; wd1= 29.1du; ad2= 1284;wd2= 33.7du; ad1= 1456; wd1= 29.1du; ad2= 1284;wd2= 33.8du; ad1= 1441; wd1= 29.3du; ad2= 1284;wd2= 33.8du; ad1= 1424; wd1= 29.7du; ad2= 1286;wd2= 33.8du; ad1= 1408; wd1= 30.1du; ad2= 1287;wd2= 33.7du; ad1= 1389; wd1= 30.5du; ad2= 1288;wd2= 33.7du; ad1= 1375; wd1= 31.0du; ad2= 1291;wd2= 33.7du; ad1= 1358; wd1= 31.3du; ad2= 1294;wd2= 33.6du; ad1= 1344; wd1= 31.8du; ad2= 1293;wd2= 33.5du; ad1= 1333; wd1= 32.2du; ad2= 1297;wd2= 33.5du; ad1= 1323; wd1= 32.4du; ad2= 1299;wd2= 33.4du; ad1= 1314; wd1= 32.7du; ad2= 1300;wd2= 33.4du; ad1= 1308; wd1= 32.9du; ad2= 1302;wd2= 33.3du; ad1= 1304; wd1= 33.1du; ad2= 1302;wd2= 33.3du; ad1= 1304; wd1= 33.2du; ad2= 1304;wd2= 33.3du; ad1= 1303; wd1= 33.2du; ad2= 1306;wd2= 33.2du; ad1= 1305; wd1= 33.2du; ad2= 1309;wd2= 33.2du; ad1= 1307; wd1= 33.2du; ad2= 1310;wd2= 33.1du; ad1= 1308; wd1= 33.1du; ad2= 1312;wd2= 33.0du; ad1= 1310; wd1= 33.1du; ad2= 1315;wd2= 33.0du; ad1= 1312; wd1= 33.0du; ad2= 1315;wd2= 32.9du; ad1= 1314; wd1= 33.0du; ad2= 1317;wd2= 32.9du; ad1= 1316; wd1= 32.9du; ad2= 1321;wd2= 32.9du; ad1= 1319; wd1= 32.9du; ad2= 1321;wd2= 32.8du; ad1= 1320; wd1= 32.8du; ad2= 1322;wd2= 32.8du; ad1= 1321; wd1= 32.8du; ad2= 1325;wd2= 32.7du; ad1= 1324; wd1= 32.8du; ad2= 1326;wd2= 32.7du; ad1= 1326; wd1= 32.7du; ad2= 1327;wd2= 32.6du; ad1= 1327; wd1= 32.6du; ad2= 1328;wd2= 32.6du; ad1= 1330; wd1= 32.6du; ad2= 1330;wd2= 32.6du; ad1= 1332; wd1= 32.5du; ad2= 1331;wd2= 32.5du; ad1= 1334; wd1= 32.5du; ad2= 1333;wd2= 32.5du; ad1= 1335; wd1= 32.4du; ad2= 1335;wd2= 32.4du; ad1= 1336; wd1= 32.4du; ad2= 1336;wd2= 32.4du; ad1= 1339; wd1= 32.4du; ad2= 1337;wd2= 32.4du; ad1= 1340; wd1= 32.3du; ad2= 1338;wd2= 32.3du; ad1= 1340; wd1= 32.3du; ad2= 1340;wd2= 32.3du; ad1= 1343; wd1= 32.3du; ad2= 1340;wd2= 32.3du; ad1= 1345; wd1= 32.2du; ad2= 1342;wd2= 32.3du; ad1= 1346; wd1= 32.1du; ad2= 1343;wd2= 32.2du; ad1= 1348; wd1= 32.1du; ad2= 1345;wd2= 32.2du; ad1= 1349; wd1= 32.0du; ad2= 1346;wd2= 32.1du; ad1= 1350; wd1= 32.0du; ad2= 1348;wd2= 32.1du; ad1= 1353; wd1= 32.0du; ad2= 1350;wd2= 32.0du; ad1= 1354; wd1= 31.9du; ad2= 1349;wd2= 32.0du; ad1= 1355; wd1= 31.9du; ad2= 1351;wd2= 32.0du; ad1= 1356; wd1= 31.9du; ad2= 1354;wd2= 32.0du; ad1= 1357; wd1= 31.8du; ad2= 1354;wd2= 31.9du; ad1= 1359; wd1= 31.8du; ad2= 1356;wd2= 31.9du; ad1= 1360; wd1= 31.8du; ad2= 1357;wd2= 31.8du; ad1= 1363; wd1= 31.7du; ad2= 1358;wd2= 31.8du; ad1= 1363; wd1= 31.7du; ad2= 1359;wd2= 31.8du; ad1= 1364; wd1= 31.7du; ad2= 1360;wd2= 31.8du; ad1= 1367; wd1= 31.6du; ad2= 1361;wd2= 31.7du; ad1= 1368; wd1= 31.5du; ad2= 1363;wd2= 31.7du; ad1= 1368; wd1= 31.5du; ad2= 1363;wd2= 31.7du; ad1= 1370; wd1= 31.5du; ad2= 1365;wd2= 31.7du; ad1= 1372; wd1= 31.5du; ad2= 1365;wd2= 31.6du; ad1= 1372; wd1= 31.4du; ad2= 1366;wd2= 31.6du; ad1= 1373; wd1= 31.4du; ad2= 1369;wd2= 31.6du; ad1= 1375; wd1= 31.4du; ad2= 1369;wd2= 31.5du; ad1= 1376; wd1= 31.3du; ad2= 1368;wd2= 31.5du; ad1= 1377; wd1= 31.3du; ad2= 1372;wd2= 31.5du; ad1= 1379; wd1= 31.3du; ad2= 1371;wd2= 31.4du; ad1= 1380; wd1= 31.2du; ad2= 1373;wd2= 31.4du; ad1= 1381; wd1= 31.2du; ad2= 1375;wd2= 31.4du; ad1= 1382; wd1= 31.2du; ad2= 1375;wd2= 31.3du; ad1= 1384; wd1= 31.2du; ad2= 1376;wd2= 31.3du; ad1= 1385; wd1= 31.1du; ad2= 1376;wd2= 31.3du; ad1= 1384; wd1= 31.1du; ad2= 1379;wd2= 31.3du; ad1= 1387; wd1= 31.1du; ad2= 1379;wd2= 31.2du; ad1= 1388; wd1= 31.0du; ad2= 1380;wd2= 31.2du; ad1= 1388; wd1= 31.0du; ad2= 1379;wd2= 31.2du; ad1= 1390; wd1= 31.0du; ad2= 1381;wd2= 31.2du; ad1= 1392; wd1= 30.9du; ad2= 1382;wd2= 31.2du; ad1= 1392; wd1= 30.9du; ad2= 1383;wd2= 31.2du; ad1= 1393; wd1= 30.9du; ad2= 1384;wd2= 31.1du; ad1= 1395; wd1= 30.9du; ad2= 1384;wd2= 31.1du; ad1= 1395; wd1= 30.8du; ad2= 1386;wd2= 31.1du; ad1= 1394; wd1= 30.8du; ad2= 1386;wd2= 31.0du; ad1= 1397; wd1= 30.8du; ad2= 1387;wd2= 31.0du; ad1= 1399; wd1= 30.8du; ad2= 1388;wd2= 31.0du; ad1= 1398; wd1= 30.7du; ad2= 1389;wd2= 31.0du; ad1= 1400; wd1= 30.7du; ad2= 1391;wd2= 31.0du; ad1= 1402; wd1= 30.7du; ad2= 1391;wd2= 30.9du; ad1= 1403; wd1= 30.6du; ad2= 1391;wd2= 30.9du; ad1= 1402; wd1= 30.6du; ad2= 1392;wd2= 30.9du; ad1= 1404; wd1= 30.6du; ad2= 1393;wd2= 30.9du; ad1= 1406; wd1= 30.6du; ad2= 1393;wd2= 30.9du; ad1= 1404; wd1= 30.5du; ad2= 1395;wd2= 30.9du; ad1= 1407; wd1= 30.6du; ad2= 1396;wd2= 30.8du; ad1= 1408; wd1= 30.5du; ad2= 1395;wd2= 30.8du; ad1= 1408; wd1= 30.5du; ad2= 1397;wd2= 30.8du; ad1= 1410; wd1= 30.5du; ad2= 1399;wd2= 30.8du; ad1= 1411; wd1= 30.4du; ad2= 1398;wd2= 30.7du; ad1= 1411; wd1= 30.4du; ad2= 1401;wd2= 30.7du; ad1= 1411; wd1= 30.4du; ad2= 1400;wd2= 30.7du; ad1= 1412; wd1= 30.4du; ad2= 1401;wd2= 30.7du; ad1= 1414; wd1= 30.4du; ad2= 1401;wd2= 30.7du; ad1= 1414; wd1= 30.3du; ad2= 1403;wd2= 30.7du; ad1= 1414; wd1= 30.3du; ad2= 1404;wd2= 30.6du; ad1= 1417; wd1= 30.3du; ad2= 1403;wd2= 30.6du; ad1= 1416; wd1= 30.3du; ad2= 1404;wd2= 30.6du; ad1= 1417; wd1= 30.3du; ad2= 1406;wd2= 30.6du; ad1= 1419; wd1= 30.3du; ad2= 1406;wd2= 30.5du; ad1= 1419; wd1= 30.2du; ad2= 1406;wd2= 30.5du; ad1= 1420; wd1= 30.2du; ad2= 1407;wd2= 30.5du; ad1= 1421; wd1= 30.2du; ad2= 1408;wd2= 30.5du; ad1= 1422; wd1= 30.2du; ad2= 1408;wd2= 30.5du; ad1= 1421; wd1= 30.1du; ad2= 1410;wd2= 30.5du; ad1= 1423; wd1= 30.2du; ad2= 1410;wd2= 30.4du; ad1= 1423; wd1= 30.1du; ad2= 1410;wd2= 30.4du; ad1= 1424; wd1= 30.1du; ad2= 1411;wd2= 30.4du; ad1= 1424; wd1= 30.1du; ad2= 1412;wd2= 30.4du; ad1= 1425; wd1= 30.1du; ad2= 1412;wd2= 30.4du; ad1= 1426; wd1= 30.1du; ad2= 1413;wd2= 30.4du; ad1= 1426; wd1= 30.0du; ad2= 1411;wd2= 30.4du; ad1= 1428; wd1= 30.0du; ad2= 1414;wd2= 30.4du; ad1= 1429; wd1= 30.0du; ad2= 1415;wd2= 30.3du; ad1= 1429; wd1= 30.0du; ad2= 1417;wd2= 30.3du; ad1= 1429; wd1= 30.0du; ad2= 1417;wd2= 30.3du; ad1= 1431; wd1= 30.0du; ad2= 1416;wd2= 30.3du; ad1= 1431; wd1= 29.9du; ad2= 1417;wd2= 30.3du; ad1= 1431; wd1= 29.9du; ad2= 1419;wd2= 30.3du; ad1= 1433; wd1= 29.9du; ad2= 1418;wd2= 30.2du; ad1= 1434; wd1= 29.9du; ad2= 1419;wd2= 30.2du; ad1= 1433; wd1= 29.8du; ad2= 1419;wd2= 30.2du; ad1= 1434; wd1= 29.9du; ad2= 1421;wd2= 30.2du; ad1= 1435; wd1= 29.8du; ad2= 1420;wd2= 30.2du; ad1= 1435; wd1= 29.8du; ad2= 1421;wd2= 30.2du; ad1= 1436; wd1= 29.8du; ad2= 1422;wd2= 30.2du; ad1= 1436; wd1= 29.8du; ad2= 1424;wd2= 30.1du; ad1= 1438; wd1= 29.8du; ad2= 1423;wd2= 30.1du; ad1= 1438; wd1= 29.7du; ad2= 1423;wd2= 30.1du; ad1= 1439; wd1= 29.7du; ad2= 1424;wd2= 30.1du; ad1= 1439; wd1= 29.7du; ad2= 1424;wd2= 30.1du; ad1= 1440; wd1= 29.7du; ad2= 1426;wd2= 30.1du; ad1= 1439; wd1= 29.7du; ad2= 1426;wd2= 30.0du; ad1= 1440; wd1= 29.7du; ad2= 1426;wd2= 30.0du; ad1= 1442; wd1= 29.7du; ad2= 1427;wd2= 30.0du; ad1= 1442; wd1= 29.6du; ad2= 1428;wd2= 30.0du; ad1= 1441; wd1= 29.6du; ad2= 1428;wd2= 30.0du; ad1= 1444; wd1= 29.7du; ad2= 1429;wd2= 30.0du; ad1= 1444; wd1= 29.6du; ad2= 1428;wd2= 30.0du; ad1= 1443; wd1= 29.6du; ad2= 1428;wd2= 30.0du; ad1= 1444; wd1= 29.6du; ad2= 1430;wd2= 30.0du; ad1= 1446; wd1= 29.6du; ad2= 1431;wd2= 29.9du; ad1= 1446; wd1= 29.5du; ad2= 1429;wd2= 29.9du; ad1= 1446; wd1= 29.5du; ad2= 1432;wd2= 30.0du; ad1= 1447; wd1= 29.5du; ad2= 1432;wd2= 29.9du; ad1= 1448; wd1= 29.5du; ad2= 1431;wd2= 29.9du; ad1= 1448; wd1= 29.5du; ad2= 1432;wd2= 29.9du; ad1= 1448; wd1= 29.5du; ad2= 1434;wd2= 29.9du; ad1= 1448; wd1= 29.5du; ad2= 1434;wd2= 29.8du; ad1= 1450; wd1= 29.5du; ad2= 1434;wd2= 29.8du; ad1= 1449; wd1= 29.4du; ad2= 1434;wd2= 29.8du; ad1= 1450; wd1= 29.5du; ad2= 1435;wd2= 29.8du; ad1= 1452; wd1= 29.4du; ad2= 1435;wd2= 29.8du; |
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11763 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 22:37 , Processed in 0.546002 second(s), Total 41, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号