楼主这么神的帖子,我今天才看到,实在是罪过。
班门弄斧一下。
1. 内置ADC和PWM互相影响的问题
STM8输出PWM的时候,即便外部负载很小,但端口本身仍为pF级别负载。如果您使用的STM8是单组电源脚的最便宜型号,ADC会受影响。
电源退耦极为重要。我看了楼主的layout对退耦做的很好,单片机供电也是从5V最近取得的。
2. C++
串口通信的上位机用什么语言写都好,就是用C++最不好。这是微软的锅。目前较为推荐的是.NET或者python。
3. 2.56M电阻
所以,那个10k是1%还是5%?
4. RCRCRCRCRC滤波
如果目的是实现陡峭的滚降,您的阻容取值和拓扑是完全错误的,除了导致相移极高(反应慢),滤波效果并不好。
既然输入已经是10k+22nF,下一环节应考虑使用100k+2.2nF,以实现40dB滚降,同时最小化相移。
5. 光耦截止慢
我做过这个实验,817光耦推挽,极限大概是5kHz。楼主既然着迷zheng,应该买高速逻辑光耦,1块多一个,马上解决问题。
6. 分辨率和噪声
既然楼主是测电池电压,而且每秒钟只测2次,不如用内置ADC按照100kHz采样,然后FIR滤波以获得低噪声和高分辨率。