本帖最后由 kyoko 于 2010-5-4 10:21 编辑
STM8S103F2,用于采样电流。电流采样电阻为50毫欧,通过1K及104简单滤波后输入至芯片的AD口。采样电阻上的电压大约在10~50mV,芯片工作于5.0v,16MHz内部振荡。
调试过程中,发现,芯片采样出来的AD结果比实际值偏小1~2个AD字,请问有什么解决办法。
AD采样模块程序如下:
uint16 GetADResult(void)
{
uint16 result = 0;
uint8 i = 0;
ADC_CSR = 0x00; // 选择AD转换通道
ADC_CR1 = 0x62; // 设置AD转换时钟1/12,连续转换模式
ADC_CR2 = 0x08; // 设置数据为右对齐
ADC_CR3 = 0x00; // 不使用数据缓冲
ADC_CR1 |= 0x01; // 打开AD模块电源
Delay(200); // 延时至少100uS,用于等待采样保持电容充电至稳定
ADC_CR1 |= 0x01; // 启动AD转换
for(i = 0; i < 16; i++)
{
ADC_CSR &= 0x7F;
while(!(ADC_CSR & 0x80)); // 等待AD转换完成
result += ADC_DRH * 256 + ADC_DRL;
}
ADC_CR1 &= 0xFE;
return result >>4;
}
转换的结果比理论值偏小,但很稳定。请问是否有改善的空间?由于我的系统电流动态范围比较大,不能增大电流采样电阻值,也不能降低芯片工作电源电压。
PCB板以前是采用Microchip以及台系的芯片,只更改了对应的芯片封装,布板上应该没什么问题。滤波电容紧靠芯片引脚
谢谢 |