关于5V霍尔 AI8H ADC采样的问题,急求!!!!
本帖最后由 DebugLab 于 2024-10-12 23:19 编辑是这样的大神们,,我用啦一款5V的霍尔电流200A的传感器,用STC8H 12位的ADC采样 ,这个霍尔再0A的时候对应的是2.5V。我的基准电压是5V电压,我可以推出在没有电流情况下读取到霍尔的2.5V代表0A,霍尔4.5V是200A的量程,小弟太笨,不知道程序怎么去处理这个关系,只知道2.5V 对应2048的ADC的值,如何让2.5V的时候显示0A。在4.5V的时候显示200A,啊太头疼啦,跪求大神们指点,我数学太差劲啦!
本帖最后由 晓飛飛 于 2024-10-12 23:38 编辑
定义个有符号类型,ADC读取后减掉零位对应的ADC值就可以了。
比如
float I
int adc_int
adc_int = (ADC_RES << 8) | ADC_RESL
adc_int -= 0x0800
然后再进行后续比例计算。
我帮你算好了,输出电流I = adc_int * 0.12207
已知
甲:0000=0.0V=***A
乙:2048=2.5V=000A
丙:****=4.5V=200A
丁:4096=5.0V=***A
求
C语言程序,输入ADC值,输出电流
解
设ADC值为x,电流为y,该函数是二元一次方程
首先需要明确一些定律:
在笛卡尔坐标系中任何一个一次方程的图像都是直线
两点确定一条直线
直线的斜率△处处相等
先确定这两个点:
第一个点为最小值,取乙,为(2048,0A)
第二个点为最大值,取丁,x=4096,求y
使用乙、丙计算斜率,设电压为z,计算斜率△y/△z,该函数是一元一次方程
△y=200A-0A=200A
△z=4.5V-2.5V=2V
△y/△z=200A/2V
化简,得△y/△z=100A/V
计算丁的y
△y/△z=100A/V
(y-0)/(5.0V-2.5V)=100A/V
y/2.5V=100A/V
内项之积等于外项之积
y=2.5V*100A/1V
y=250A
第2个点就计算出来了,丁的坐标为(4096,250A)
计算斜率△y/△x
△y/△x=(250A-0A)/(4096-2048)
△y/△x=250A/2048
已知x,求y
(y-0A)/(x-2048)=250A/2048
y/(x-2048)=250A/2048
还是内项之积等于外项之积
y=(x-2048)*250A/2048
这就OK了
使用50%验证
(4096+2048)/2=3072
(250A+0A)/2=125A
应为(3072,125A)
y=(3072-2048)*250A/2048
y=1024*250A/2048
y=250A/2
y=125A
验证OK
编程
采用定点计算,电流分辨率设置为0.1A
unsigned int Calculate_Current(unsigned int x)
{
return (unsigned int)((unsigned long)x-2048UL)*2500UL/2048UL;
}
化简得
unsigned int Calculate_Current(unsigned int x)
{
return (unsigned int)((unsigned long)x-2048UL)*625UL/512UL;
}
输入参数为ADC值,返回值为电流(单位A)的10倍(0.1A)
晓飛飛 发表于 2024-10-12 23:53
不应按照2047计算,应按照2048计算,因为相邻两个值永远是2048分之1 感谢热心的大神们,,跪谢跪谢! DebugLab 发表于 2024-10-13 01:02
不应按照2047计算,应按照2048计算,因为相邻两个值永远是2048分之1
搞了十几年计量仪器,一直是这么算的,难道说我一直错了么,出的货不计其数了,如果是我错了,简直罪孽深重{:4_258:} DebugLab 发表于 2024-10-13 01:02
不应按照2047计算,应按照2048计算,因为相邻两个值永远是2048分之1
我的计算表格中,满幅2047对应的电压是4.998779296875V,并不是按5V算的,所以和2048对应5V的思路并不矛盾,或者说是异曲同工,并无不妥。 晓飛飛 发表于 2024-10-13 10:17
搞了十几年计量仪器,一直是这么算的,难道说我一直错了么,出的货不计其数了,如果是我错了,简直罪孽深 ...
你是对的,例如从0到9,9代表的最高,10就已经是2位数了。同理。 晓飛飛 发表于 2024-10-13 10:17
搞了十几年计量仪器,一直是这么算的,难道说我一直错了么,出的货不计其数了,如果是我错了,简直罪孽深 ...
误差2048分之一,可以忽略不计了,无所谓
页:
[1]