永发信息网

请教一下 用stc8951单片机P1^1口串100k电阻后连接0.1uf电容同时接比较器(L

答案:1  悬赏:10  手机版
解决时间 2021-02-02 18:51
  • 提问者网友:人傍凄凉立暮秋
  • 2021-02-02 10:10
请教一下 用stc8951单片机P1^1口串100k电阻后连接0.1uf电容同时接比较器(L
最佳答案
  • 五星知识达人网友:酒安江南
  • 2021-02-02 11:01
根据电容器充电方程,测出高电平起始到比较器翻转的充电时间,从而可以算出电压
由于是指数方程,计算比较复杂,不要期望它会很准确如达到16位的精度追问能给个程序代码么 我显示的代码写好了 就这不会卡这好久了追答计算公式是
Vo=Vcc×(1-e^(-t/RC))
具体程序我还 没有,我看过某杂志上的文章,说的是2051单片机中比较器测电压的原理,只用了8位精度,原理是把测到的时间和计算的电压值作成一个表,采用查询方式输出,如果要提高精度,表格的数据量是很大的
可以用定时器,如定时10US,中断程序里变量a加1
主程序里:
a=0;//变量清0
TR0=1;//启动定时器
while(bijiao==0);//等待比较器输出高电平
TR1=0;;//关闭定时器
然後a的值就代表充电时间
由此进行数学计算或查表即可

不过使用这种方法来测电压我是不赞成的,带硬件AD的51单片机多了是,何必在硬件上多费周折呢,况且和AD模块比同样需消耗CPU资源,想得到高精度也是不可能的追问我就是这里不会啊追答你是说数学运算?手工计算会吧?
如果在程序中计算可以用C语言的库函数:需包含头文件 math.h
然后用函数 double exp(double x); 用来求以e为底的对数
当然要保证待测电压低于单片机供电电压,否则程序中
while(bijiao==0);//等待比较器输出高电平或低电平  会死机追问我比较笨 我想看看程序慢慢理解消化追答一步一步算
uint32_t a;//51单片机用 uint a;
double b1,b,vo;
//t=a*10;//单位,微秒
//RC=100*1000*0.1=10000;//单位,微秒
//t/RC=a/1000;
b=exp(a/1000);
b1=1/b;
vo=vcc(1-b1);//vo即为测得电压
为什么不可能准确呢?
电源电压 100K电阻 0.1UF电容 比较器翻转电压 单片机内部导通电阻 以及计时时间误差 运算误差 都可能对测量结果有影响
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯