非原创,和大家分享一下
基于AT89C51单片机和555芯片构成的多谐振荡电路设计一电容测量电路,这种测量方法主要是通过一块555芯片来测量电容大小。让555芯片工作在直接反馈无稳态的状态下,555芯片输出一定频率的方波,其频率的大小跟被测量的电容之间的关系是:f=0.772/(R*Cx) ,固定R的大小,其公式就可以写为:f=k/Cx,只要能够测量出555芯片输出的频率,就可以计算出测量的电容。计算频率的方法可以利用单片机的计数器T0和中断INT0配合使用来进行测量。
1.3.1 系统硬件电路设计
该电路主要由单片机AT89C51、按键、继电器、74HC08、LCD16028、555芯片等构成,整体设计电路如图1-7所示。
图1-7
555模块简介
NE555管脚功能介绍:
1脚为地。2脚为触发输入端;3脚为输出端,输出的电平状态受触发器控制,而触发器受上比较器6脚和下比较器2脚的控制。
当触发器接受上比较器A1从R脚输入的高电平时,触发器被置于复位状态,3脚输出低电平;
2脚和6脚是互补的,2脚只对低电平起作用,高电平对它不起作用,即电压小于1Ucc/3,此时3脚输出高电平。6脚为阈值端,只对高电平起作用,低电平对它不起作用,即输入 电压大于2Ucc/3,称高触发端,3脚输出低电平,但有一个先决条件,即2脚电位必须大于Ucc/3时才有效。3脚在高电位接近电源电压Ucc,输出电流最大可打200mA。
4脚是复位端,当4脚电位小于0.4V时,不管2、6脚状态如何,输出端3脚都输出低电平。5脚是控制端。7脚称放电端,与3脚输出同步,输出电平一致,但7脚并不输出电流,所以3脚称为实高(或低)、7脚称为虚高。
555集成电路的框图及工作原理:
555集成电路开始是作定时器应用的,所以叫做555定时器或555时基电路。但后来经过开发,它除了作定时延时控制外,还可用于调光、调温、调压、调速等多种控制及计量检测。此外,还可以组成脉冲振荡、单稳、双稳和脉冲调制电路,用于交流信号源、电源变换、频率变换、脉冲调制等。由于它工作可靠、使用方便、价格低廉,目前被广泛用于各种电子产品中,555集成电路内部有几十个元器件,有分压器、比较器、基本R-S触发器、放电管以及缓冲器等,电路比较复杂,是模拟电路和数字电路的混合体,如图1所示。
555振荡器电路(无稳电路):
由555定时器构成的多谐振荡器如图9(a)所示,其工作波形见图9(b)。
接通电源后,电源VDD通过R1和R2对电容C充电,当Uc<1/3VDD时,振荡器输出Vo=1,放电管截止。当Uc充电到≥2/3VDD后,振荡器输出Vo翻转成0,此时放电管导通,使放电端(DIS)接地,电容C通过R2对地放电,使Uc下降。当Uc下降到≤1/3VDD后,振荡器输出Vo又翻转成1,此时放电管又截止,使放电端(DIS)不接地,电源VDD通过R1和R2又对电容C充电,又使Uc从1/3VDD上升到2/3VDD,触发器又发生翻转,如此周而复始,从而在输出端Vo得到连续变化的振荡脉冲波形。脉冲宽度TL≈0.7R2C,由电容C放电时间决定;TH=0.7(R1+R2)C,由电容C充电时间决定,脉冲周期T≈TH+TL。
1.3.2系统软件设计
系统主程序设计流程如图3-4所示,主要完成定时器的初始化,启动555芯片工作,等待中断,若有中断,则计算电容大小,显示电容大小,然后等待下一次中断。
proteus仿真
载入hex文件,如图1-8
图1-8
可以改变单刀双掷开关SW1,切换被测量的电容。LCD1602上即可显示被测电容的值,仿真时会有误差。
程序清单如下:
用keil c编译
本工程包含一个文件
电容测量.c
/******************************文件Main.c 如下****************************/
//编译环境 :keil c51
//mpu型号:stc89c52rc
//晶振频率:12M
//操作系统:win x
/*************************************************************************/
#include "reg51.h"
#include"intrins.h" //库函数
#define DATA P0
sbit RW=P2^1; //1602写数据
sbit RS=P2^0; //1602写地址
sbit EN=P2^2; //1602工作使能
sbit b_test=P3^7; //控制小灯的亮灭
sbit _reset=P3^5; //555时基芯片工作控制信号
unsigned int T_flag,N,C,i,Dis1,Dis0;
unsigned int b[6]={0X13,0X0D,0X00,0X00,0X40,0X16}; //显示C=00pF
/*******************************延时1ms*********************************/
void Delay1ms(unsigned int mm)
{unsigned int i;
for(mm;mm>0;mm--)
for(i=100;i>0;i--);
}
/********************************检查忙否********************************/
void Checkstates()
{
unsigned char dat;
RS=0;
RW=1;
do{EN=1; //下降沿
_nop_(); //保持一定间隔
_nop_();
dat=DATA;
_nop_();
_nop_();
EN=0;
}while((dat&0x80)==1);
}
/*******************************LCD写命令函数****************************/
void wcomd(unsigned char cmd)
{
Checkstates();
RS=0;
RW=0;
DATA=cmd;
EN=1;
_nop_();
_nop_();
_nop_();
_nop_();
EN=0;
}
/******************************LCD写数据函数*******************************/
void wdata(unsigned char dat)
{
Checkstates();
RS=1;
RW=0;
DATA=dat;
EN=1;
_nop_();
_nop_();
_nop_();
_nop_();
EN=0;
}
/********************************初始化***********************************/
void LCDINIT()
{
Delay1ms(15);
wcomd(0x38); //功能设置
Delay1ms(5);
wcomd(0x38); //功能设置
Delay1ms(5);
wcomd(0x01); //清屏
Delay1ms(5);
wcomd(0x08); //关显示
Delay1ms(5);
wcomd(0x0c); //开显示,不开光标
}
/********************************显示函数********************************/
void Display(void) //显示函数
{
unsigned char i,j;
unsigned char a[12]={0X4D,0X45,0X41,0X53,0X55,0X52,0X45,0X4D,0X45,0X4E,0X54,0X53};//显示measurements
LCDINIT();
for(i=0;i<12;i++) //写显示第一行
上一篇:搞定单片机采用6MHz的晶振,定时1ms,用定时器方式0
下一篇:51单片机制作电容电感测表
推荐阅读最新更新时间:2024-11-10 13:47
设计资源 培训 开发板 精华推荐
- 使用 STMicroelectronics 的 ST1L04 的参考设计
- FRDM-17C724-EVB: Freedom扩展板 - MPC17C724,双H桥,步进电机驱动器,2.7V-5.5V,0.4A
- 使用 Analog Devices 的 LTP5901IPC-IPMA 的参考设计
- resolution//智能插座暑期进阶
- ADR550B 5V 输出高精度并联模式电压基准的典型应用
- 基于 Blackfin 数字信号处理器 (DSP) 的 ADZS-BF533-EZLITE、ADSP-BF533 EZ-KIT Lite 评估系统
- LTC2351HUH 6 通道、14 位、1.5Msps 关断同步采样 ADC 的典型应用
- LTC3838EUHF-1 6.5V 至 34V 输入、5V/12A 和 3.3V/12A 双路输出、300kHz、RSENSE、5V 输出连接至 EXTVCC、降压转换器的典型应用电路
- PCB月历 (2023)
- IS31LT3117 直接驱动 4 个 LED 灯串的典型应用