楼主你测出来精度多少,0.01v吗,还是0.1v |
cocolala 发表于 2020-12-1 11:28 请问STC8H8K64U支持USB硬件接口仿真吗? |
你好,楼主,你有么有用STC8H1K28这个单片机做PWM波形输出的程序。这款单片机刚出来不久,找不到相关例程。如果有能不能分享一下。 |
经常用AD,实际使用中出现的问题点,简单总结下,参考下。 AD取样,没有特殊情况啥的,两个算法必须,不然不专业! 1:注意输入阻抗问题。电源要稳定做好滤波处理,电源很重要,片内AD一般都用电源当基准。 2:头两次取样建议丢弃,速度允许,尽可能慢档位 3:加【中位值平均滤波】 【全程区间线性插值】 4:如果不使用595或者1650 1638之类LED驱动芯片,MCU频率尽可能提高! 5:尽可能用外部晶振。 |
1922323908 发表于 2020-12-4 23:31 已经解决了!根据楼上大佬的回复,确实是使用了不正确的公式导致数据溢出。谢谢! |
wulin 发表于 2020-11-29 07:26 解决了!谢谢大佬! |
可以做个卡尔曼滤波器,或是把采到的数据放到matlab中曲线拟合一下 |
wulin 发表于 2020-11-29 07:26 谢谢! |
lovexulu 发表于 2020-11-29 14:40 51官方的datasheet就是个大坑呀!用的51官方的中断程序……发现了好几个错误 |
ab = ah*4+al 这个什么意思? ADCCFG = 0x2f,这个寄存器改一下,ADC结果就直接取高位和低位运算就可以了 你参考一下楼上的几位,先把ADC部分的资料看一下再修改 这没有什么难度的 |
出现问题不要轻易怀疑单片机问题,首先要确认特殊功能寄存器的配置是否正确。 仔细核对通道选择,转换速度选择,转换结果格式选择(合并转换结果高低位的方式不同)。 正确选择电压换算公式的数据类型,楼主采用的公式错误,运算过程数据溢出。 十二位ADC结果换算成10进制(4舍5入)公式 毫伏=(参考电压*十二位ADC结果*10000/4096+5)/10 依据楼主程序配置建议算法: void ad() { unsigned int ab = 0; unsigned int ac = 0; unsigned int ad; ab = ((unsigned int)ah<<4)|(al>>4);//两个寄存器(adc结果)合并 ad = (long)ab*10000/4096*3.2;//计算电压(无小数点) ac = ad; ...... |
添加数字滤波器以平均模拟变量采样; 此外,请检查模拟参考电压是否稳定。 |
就离谱 |