侧边栏壁纸
    • 累计撰写 302 篇文章
    • 累计收到 527 条评论
    电容、电感、电阻参数测量系统设计
    我的学记|刘航宇的博客

    电容、电感、电阻参数测量系统设计

    刘航宇
    2021-02-14 / 5 评论 / 1,302 阅读 / 正在检测是否收录...

    目录

    一、设计任务和要求

    1、设计并制作一个元器件参数测量仪。
    2、电阻阻值测量,范围:100Ω~1MΩ;
    3、电容容值测量,范围:100pF~10000pF;
    4、测量精度:±5% ;
    5、电感参数的测量;
    6、扩大量程;
    7、提高测量精度;
    系统设计图

    二、单元电路设计和参数计算

    1、电阻的检测单元电路设计

    电阻检测
    从而,可以计算得出电阻值的大小。
    2、电容的检测单元电路设计
    电容检测
    从而,可以计算得出电容值的大小。
    3、电感的检测单元电路设计
    电感检测
    从而,可以计算得出电感值的大小。

    三、总原理图及元器件清单

    总电路
    实物图
    (2)元器件清单
    表1 原理图中所使用的元器件清单
    元件序号 型号 数量 备注
    U1 STC89C52RC 1 单片机
    R3 A103J 1 排阻
    R2,R3,R17,R18 10KΩ 4 电位器
    X1 11.0592M 1 晶振
    C3 25V,10uF 1 电解电容
    C1,C2,C11 103(0.01uF) 3 瓷片电容
    R1,R13,R18 10KΩ 3 电阻
    J1,J2,J3,J4 4 按键
    U2 1602 1 液晶
    A1,A2 NE555 2 555定时器
    R4 300Ω 1 电阻
    R5,R6 510KΩ 2 电阻
    C4,C5,C6,C7,C8,C9 104(0.1uF) 6 瓷片电容
    R7,R9 100KΩ 2 电阻
    C10 50V,22uF 1 电解电容
    Q1,Q2,Q3 S9108(NPN型) 3 三极管
    R10 2KΩ 1 电阻
    R8,R11,R14 1KΩ 3 电阻
    C12,C13 50V,47uF 2 电解电容
    R12,R19 39KΩ 2 电阻
    R15,R16 51Ω 2 电阻
    C14 25V,470uF 1 电解电容
    U3 NE55532 1 运放

    四、附录

    软件程序

    //RCL测量仪程序
    //初始化
    #include <reg52.h>
    #define uint unsigned int
    #define uchar unsigned char
    #define ulong unsigned long
    #define    PI 3.1415926
    
    uchar code table1[8]="Welcome! RCL detector";
    uchar table2[16]="f(Hz)=";
    uchar table3[16]="R(Ohm)=";
    uchar table4[16]="C(pF)=";
    uchar table5[16]="L(uH)=";
    
    uchar num,a=0,th0,tl0;
    uint C,L;
    ulong f,R;
    
    sbit lcden=P2^4;                //液晶使能端   
    sbit lcdrs=P2^5;               //液晶数据命令选择端
    
    sbit key_R=P1^5;               //测量电阻按键
    sbit key_C=P1^6;               //测量电容按键
    sbit key_L=P1^7;               //测量电感按键
    
    sbit R_out=P1^2;                //测量电阻信号输入
    sbit C_out=P1^3;                //测量电容信号输入
    sbit L_out=P1^4;                //测量电感信号输入
    
    //声明子函数
    void delayms(uint xms);            //延时函数
    void write_com(uchar com);         //液晶写命令函数
    void write_data(uchar date);        //液晶写数据函数     
    void led_init();                //液晶初始化函数
    void t_init();                    //定时器0初始化函数
    void keyscan();                //键盘检测函数(确定被测元件为电阻、电容或电感)
    void display_f(ulong f);          //频率显示函数
    void display_R(ulong R);         //电阻显示函数
    void display_C(uint C);          //电容显示函数
    void display_L(uint L);             //电感显示函数
    
    //主函数
    void main()
    {
      led_init();
      t_init();
      keyscan();
      write_com(0x01);
      while(1)
      {
        display_f(f);
        switch(a)
        {
          case 1:R=(ulong)(5000000.0/0.6931472/f-150+0.5);display_R(R);break;
          case 2:C=(int)(100000000.0/153/0.6931472/f+0.5);display_C(C);break;
          case 3:L=(int)(1000000000000.0/0.1/PI/PI/f/f+0.5);display_L(L);break;
          }
      }
    }
    
    //中断函数
    void T0_count() interrupt 1
    {
      switch(a)
      {
       case 1:while(R_out);
                 while(!R_out);
              TH0=0;
              TL0=0;
              while(R_out);
              while(!R_out);
              th0=TH0;
              tl0=TL0;
              TR0=0;
              break;
       case 2:while(C_out);
                 while(!C_out);
              TH0=0;
              TL0=0;
              while(C_out);
              while(!C_out);
              th0=TH0;
              tl0=TL0;
              TR0=0;
              break;
        case 3:while(L_out);
                 while(!L_out);
              TH0=0;
              TL0=0;
              while(L_out);
              while(!L_out);
              th0=TH0;
              tl0=TL0;
              TR0=0;
              break;
       }
       f=1000000.0/1.085069/(th0*256+tl0)+0.5;
    }
    
    //延时函数
    void delayms(uint xms)    
    {
      uint i,j;
      for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
    }
    
    //液晶写命令函数
    void write_com(uchar com) 
    {
      lcdrs=0;
      P0=com;
      delayms(5);
      lcden=1;
      delayms(5);
      lcden=0;
    }
    
    //液晶写数据函数
    void write_data(uchar date)     
    {
      lcdrs=1;
      P0=date;
      delayms(5);
      lcden=1;
      delayms(5);
      lcden=0;
    }
    
    //液晶初始化函数
    void led_init()
    {
      lcden=0;
      write_com(0x38);            //设置16×2显示,5×7点阵,8位数据接口            
      write_com(0x0c);            //设置开显示,不显示光标        
      write_com(0x06);            //写一个字符后地址指针加1        
      write_com(0x01);            //显示清0,数据指针清0        
      write_com(0x80);            //显示欢迎界面
      for(num=0;num<8;num++)    
      {
         write_data(table1[num]);
         delayms(5);
      }
    
    }
    
    //定时器0初始化函数
    void t_init()
    {
      TMOD=0x01;                //设置定时器0工作方式1(M1M0=0x0001)                                          
      TH0=0;                    //装初值    
      TL0=0;
      EA=1;                        //开总中断            
      ET0=1;                    //开定时器0中断
      TR0=1;                    //启动定时器0
    }
    
    //键盘检测函数(确定被测元件为电阻、电容或电感)
    void keyscan()    
    {
      if(key_R==0)
      {
        delayms(10);
        if(key_R==0)
          a=1;
      }
      else
        if(key_C==0)
        {
          delayms(10);
          if(key_C==0)
            a=2;
        }
          else
          if(key_L==0)
          {
            delayms(10);
            if(key_L==0)
              a=3;
          }
          else
            while(key_R&&key_C&&key_L);        //按键按下时退出死循环
    }
    
    //频率显示函数
    void display_f(ulong f)  
    {
      uchar count=0;
      ulong f0;
      f0=f;
      while(f)
      {
         f=f/10;
         count++;
      }
      for(num=5+count;num>5;num--)
      {
          table2[num]=f0%10+48;
        f0=f0/10;
      }
      write_com(0x80);
      for(num=0;num<6+count;num++)
      {
        write_data(table2[num]);
        delayms(5);
      }
    }
    
    //电阻显示函数
    void display_R(ulong R) 
    {
      uchar count=0;
      ulong R0;
      R0=R;
      while(R)
      {
         R=R/10;
         count++;
      }
      for(num=6+count;num>6;num--)
      {
          table3[num]=R0%10+48;
        R0=R0/10;
      }
      write_com(0x80+0x40);
      for(num=0;num<7+count;num++)
      {
        write_data(table3[num]);
        delayms(5);
      }
    }
    
    //电容显示函数
    void display_C(uint C)  
    {
      uchar count=0;
      uint C0;
      C0=C;
      while(C)
      {
         C=C/10;
         count++;
      }
      for(num=5+count;num>5;num--)
      {
          table4[num]=C0%10+48;
        C0=C0/10;
      }
      write_com(0x80+0x40);
      for(num=0;num<6+count;num++)
      {
        write_data(table4[num]);
        delayms(5);
      }
    }
    
    //电感显示函数
    void display_L(uint L) 
    {
      uchar count=0;
      uint L0;
      L0=L;
      while(L)
      {
         L=L/10;
         count++;
      }
      for(num=5+count;num>5;num--)
      {
          table5[num]=L0%10+48;
        L0=L0/10;
      }
      write_com(0x80+0x40);
      for(num=0;num<6+count;num++)
      {
        write_data(table5[num]);
        delayms(5);
      }
    }
    3
    定语从句-什么是定语及定语的成分
    « 上一篇 2021-02-14
    如何判断运放是工作在线性区还是非线性区
    下一篇 » 2021-02-13

    评论 (5)

    取消
    1. 头像
      深圳摄影师
      Windows 7 · Google Chrome

      看你的博客好几天了,内容不错,站长能换个链接不,www.photoinhere.com 印象美摄影工作室,谢谢!

      回复
    2. 头像
      哈哈
      Android · Google Chrome

      大佬,太强了

      回复
    3. 头像
      make
      Android · Google Chrome

      表情

      回复
    4. 头像
      hand
      Android · Google Chrome

      6666

      回复
    5. 头像
      hand
      Android · QQ Browser

      很好

      回复