新手上路
- 积分
- 24
- 金钱
- 24
- 注册时间
- 2019-7-8
- 在线时间
- 8 小时
|
1金钱
这是一段论坛上的代码adcx=Get_Adc_Average(ADC_Channel_1,10); //得到ADC转换值
temp=(float)(adcx*(3.022/1022))/(4.620/6.609); //是10位adc,不是12位的adc得到ADC电压值,(4.620/6.609)是电阻分压系数
adcx=temp;
OLED_ShowNum(5+65,30,temp,1,16);
// LCD_ShowxNum(124,110,temp,1,16,0); //显示电压值整数部分
temp-=adcx;
temp*=1000;//这一部分处理后用来显示小数
OLED_ShowString(5+75,30,".",16);
OLED_ShowNum(5+80,30,temp,3,16);
OLED_ShowString(5+105,30,"mA",16);
OLED_Refresh_Gram();
// LCD_ShowxNum(140,110,temp,3,16,0X80); //显示电压值的小数部分
其实这段代码是有缺陷的,但是说实话,我没想明白怎么解决
这段代码的问题就在于不能显示3.0v电压(小数位并不能自动补0),假如我现在要显示3.099v电压,那么真实在oled上显示就是3._99v电压,那么该如何解决呢
然后这段代码处理起来还有精度问题,现在测量在3.7几是准确的,但是有0.04v跳动,请问滤波方面有什么好的建议,单片机性能较差,内存也比较少,用不了sprintf之类的函数,目前使用的是连续adc采值+平均值处理数据跳动在7个点以内,在电路上,电阻分压有加0.1uf电容,使用4位电阻均没超过10k
我使用的是stm8s001j3m3,虽然不该在stm32板块发,但是由于这段代码在处理上和stm32一摸一样,所以到32板块来发帖,毕竟学stm8也是为了快点入门32嘛,嘿嘿
---------c语言菜鸡
|
|