请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:RM57L843 大家好!
使用正确校准的万用表观察可变电阻器上的电压会产生不同的值、因为控制器中 AD 检测到的电压不是恒定偏移、也不是直流增益误差。 我已经进行了一些测量:
| 万用表电压[V] | ADC 计数器值[1] | ADC 电压[V] | 万用表电压- ADC 电压差[V] |
| 2.9999 | 897 | 2.89072275 | 0.10917725 |
|
2.0002. |
5774 | 1.84980464 | 0.15039536 |
| 1.0001 | 290 | 0.934570313 | 0.065529687 |
什么会导致差异?如何解决差异或将其最小化至0.01以下? 无论是否具有校准功能、都曾尝试过、甚至尝试将其设置为12位 ADC、这两种方法都不起作用。 提前感谢您的回复。
我也包括代码:
/*用户代码开始(0)*/
*用户代码结束*/
*包含文件*/
#include "hl_sys_common.h"
/*用户代码开始(1)*/
#include "hl_esm.h"
#include "hl_adc.h"
#include "hl_gio.h"
adcData_t adc_data[1];
void 等待(uint32);
/*用户代码结束*/
/*用户代码开始(2)*/
/*用户代码结束*/
int main (void)
{
/*用户代码开始(3)*/
uint32 ch_count=0;
uint32 id =0;
uint32值=0;
浮点电压= 0、valueloat = 0;
/*初始化 Gio *
gioInit();
gioSetDirection (gioPORTB、1);
/*初始化 sci/sci-lin:偶校验,2个停止位*/
sciInit();
/*初始化 ADC */
/*组1 ->通道0和1 *
/*硬件触发源作为 GIOB 引脚0 *
adcInit();
adcCalibration (adcREG1);
adcMidPointCalibration (adcREG1);
/*开始 ADC 转换*/
adcStartConversion (adcREG1、adcGROUP1);
while (1)/*。 永久继续*/
{
/*使用 Gio 端口 b 引脚0触发*/
gioSetBit (gioPORTB、0、1);
/*... 等待并读取转换计数*/
while ((adcIsConversionComplete (adcREG1、adcGROUP1))==0);
ch_count = adcGetData (adcREG1、adcGROUP1、&ADC_DATA[0]);
ch_count = ch_count;
ID = ADC_DATA[0].id;
值= ADC_DATA[0].value;
gioSetBit (gioPORTB、0、0);
电压=((浮点)值/1024)* 3.3;
等待(0xFFFFFFF);
};
/*用户代码结束*/
返回0;
}
/*用户代码开始(4)*/
空等待(uint32时间)
{
while (time){time--;};
}
/*用户代码结束*/