分享电路图就更好 |
看似简单,其实很复杂! |
![]() MCU的工作频率为22.1184MHz. 使用MCU自带的比较器进行ADC转换, 并通过串口输出结果. 用定时器0产生10us中断查询比较器的状态. 使用比较器做ADC, 原理图如下. 做ADC的原理是基于电荷平衡的计数式ADC. 电压从Vin输入, 通过100K+104滤波, 进入比较器的P5.5正输入端, 经过比较器的比较, 将结果输出到P1.5再通过100K+104滤波后送比较器P5.4负输入端,跟输入电压平衡. 设置两个变量: 计数周期(量程)adc_duty 和 比较结果高电平的计数值 adc, adc严格比例于输入电压. ADC的基准就是P1.5的高电平. 如果高电平准确,比较器的放大倍数足够大,则ADC结果会很准确. 当比较结果为高电平,则P1.5输出1, 并且adc+1. 当比较结果为低电平,则P1.5输出0. 每一次比较都判断计数周期是否完成,完成则adc里的值就是ADC结果. 电荷平衡计数式ADC的性能类似数字万用表用的双积分ADC, 当计数周期为20ms的倍数时,具有很强的抗工频干扰能力,很好的线性和精度. 原理可以参考ADD3501(3 1/2位数字万用表)或ADD3701(3 3/4位数字万用表), 也可以参考AD7740 VFC电路. 例: 比较一次的时间间隔为10us, 量程为10000, 则做1次ADC的时间为100ms. 比较器的响应时间越短, 则完成ADC就越快. 由于要求每次比较时间间隔都要相等,所以用C编程最好在定时器中断里进行, 定时器设置为自动重装, 高优先级中断, 其它中断均低优先级. 用汇编的话, 保证比较输出电平处理的时间要相等. |
STC15W201S系列单片机引脚图:![]() |
大佬牛逼,能写这么多代码,学习学习 |