找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1829|回复: 6
收起左侧

请教两个关于用单片机测放电时间的问题,请指点下,谢谢

[复制链接]
ID:104797 发表于 2021-3-12 21:09 | 显示全部楼层 |阅读模式
如图是电容放电波形
51hei图片_20210312203051.jpg

我想用51系列单片机测电容的放电时间,要求是这样的:电容充电电压在12-20V,开关打开后,电容开始放电,当放电到8V时,测量出从开始放电到放到8V时的时间和电压的最大值(应该是电容的充电电压),也就是图中t的大小,时间大概在400微秒左右,我想请教下,是用AD转换,还是有其它简单的方法?如果用AD转换,采样电路用什么样的可靠一些?如果用其它方法,电压的最大值怎样计算出来?

另外,我用示波器观察放电波形时,由于是用开关控制的,观察到波形类似下图这样的:
51hei图片_20210312203043.jpg

在开关打开瞬间,波形不连续,应该是开关抖动问题,改用继电器控制,能稍好一些,并联电容也没什么大变化,请教各位有什么方法解决这个问题?我想用可控硅或MOS管来控制,又担会对放电电压影响大?
请各位指点下怎样解决这两个问题?谢谢!!!最好能看图说话
回复

使用道具 举报

ID:516863 发表于 2021-3-12 23:58 | 显示全部楼层
请问你的电容容量是1F还是1UF?电压是12V还是20V?是短路放电吗?
回复

使用道具 举报

ID:516863 发表于 2021-3-13 00:00 | 显示全部楼层
按照你的要求,请参考电池充电保护电路及原理。
回复

使用道具 举报

ID:213173 发表于 2021-3-13 09:41 | 显示全部楼层
建议用MOS管作为充放电。按图用51单片机外部中断下降沿触发,运放当作电压比较用。原理图和程序不一定能够正常运行,但逻辑关系已很清楚。 无标题.jpg

  1. #include "reg51.h"
  2. sbit key=P1^0;                        //充放电开关
  3. sbit recharge =P1^1; //充电管
  4. sbit discharge=P1^2; //放电管
  5. unsigned int num,num1;//定时器计数变量
  6. unsigned int count=0;        //消抖计数变量
  7. long time; //时间变量us
  8. bit flag=0;//放电结束标志
  9. bit sign=0;//开关状态标志

  10. void main()
  11. {
  12.         TMOD= 0x01;
  13.         TH0 = 0x00;
  14.         TL0 = 0x00;
  15.         TR0 = 0;//关闭定时器
  16.         ET0 = 1;
  17.         EA  = 1;     
  18.         IT0 = 1;
  19.         EX0 = 1;   
  20.         while (1)
  21.         {
  22.                 if(!key)        //放电
  23.                 {
  24.                         if(++count>=500 && sign==0)        //放电
  25.                         {
  26.                                 sign=1;                        //操作记忆
  27.                                 recharge =0;//关充电
  28.                                 discharge=1;//开放电
  29.                                 num=0;                //清0
  30.                                 num1=0;                //清0
  31.                                 time=0;                //清0
  32.                                 TR0 = 1;                //启动定时器
  33.                                 while(!flag);//等待放电结束
  34.                                 flag=0;                //清0
  35.                                 time=(long)(num1*65536)+num;//单位us
  36.                         }
  37.                 }
  38.                 else
  39.                 {
  40.                         count=0;                //清0
  41.                         sign=0;                //复位
  42.                         recharge =1;//开充电
  43.                         discharge=0;//关放电
  44.                 }
  45.         }
  46. }
  47. void t0int() interrupt 1
  48. {
  49.     num1++;//累加
  50. }

  51. void exint0() interrupt 0
  52. {
  53.         TR0 = 0;                //关闭定时器
  54.         num=TH0<<8|TL0; //读取寄存器值
  55.         flag=1;                        //放电结束
  56. }



复制代码




回复

使用道具 举报

ID:104797 发表于 2021-3-13 15:35 | 显示全部楼层
wulin 发表于 2021-3-13 09:41
建议用MOS管作为充放电。按图用51单片机外部中断下降沿触发,运放当作电压比较用。原理图和程序不一定能够 ...

谢谢指点。
因为充电压12~20V不是固定的(因为还有其它的外转电路),不用AD转换的话,最大放电电压(峰值)应该怎么用单片机测出来?
回复

使用道具 举报

ID:213173 发表于 2021-3-13 16:40 | 显示全部楼层
lhpm641 发表于 2021-3-13 15:35
谢谢指点。
因为充电压12~20V不是固定的(因为还有其它的外转电路),不用AD转换的话,最大放电电压(峰 ...

电容充放电时间是可以用RC时间常数计算出了的,用示波器也可以直观观察,你这要求有点怪。难道要开发专用测量仪器?
回复

使用道具 举报

ID:104797 发表于 2021-3-13 18:17 | 显示全部楼层
wulin 发表于 2021-3-13 16:40
电容充放电时间是可以用RC时间常数计算出了的,用示波器也可以直观观察,你这要求有点怪。难道要开发专用 ...

确实有点类似专用仪器了,一块板子要测6个参数,用了5、6台仪器,虽然测试参数简单,但是用的仪器多,测放电时间和最大电压是其中一个,所以想做个能把几个参数都测出来的测量装置,这是其中的一个模块,不想弄的复杂了,但一直没有想出有什么简便的方法。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表