智能频率计设计.docx
《智能频率计设计.docx》由会员分享,可在线阅读,更多相关《智能频率计设计.docx(17页珍藏版)》请在冰豆网上搜索。
智能频率计设计
1.设计主要内容及要求;
设计一个智能频率计。
要求:
1)硬件电路设计,包括原理图和PCB板图。
2)智能频率计软件设计。
3)要求能够测量及显示频率,频率范围100HZ---500KHZ。
2.对设计论文撰写内容、格式、字数的要求;
(1).课程设计论文是体现和总结课程设计成果的载体,一般不应少于3000字。
(2).学生应撰写的内容为:
中文摘要和关键词、目录、正文、参考文献等。
课程设计论文的结构及各部分内容要求可参照《沈阳工程学院毕业设计(论文)撰写规范》执行。
应做到文理通顺,内容正确完整,书写工整,装订整齐。
(3).论文要求打印,打印时按《沈阳工程学院毕业设计(论文)撰写规范》的要求进行打印。
(4).课程设计论文装订顺序为:
封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、参考文献。
3.时间进度安排;
顺序
阶段日期
计划完成内容
备注
1
月日
教师讲解题目,学生查阅相关资料
2
月日
查阅相关资料、进行方案论证
3
月日
参数计算、确定方案
4
月日
绘制原理图,设计PCB板图
5
月日
设计PCB板图,程序设计
6
月日
程序设计
7
月日
程序调试
8
月日
撰写论文
7
月日
论文答辩,成品验收
一设计任务描述
1.1设计题目
智能频率计设计
1.2设计要求
1.2.1基本要求
设计一个智能频率计。
要求:
1)硬件电路设计,包括原理图和PCB板图。
2)智能频率计软件设计。
3)要求能够测量及显示频率,频率范围100HZ---500KHZ。
二设计思路
2.1频率测量方法
频率测量是电子测量领域的最基本测量,通常频率测量有两种方法:
(1)计数法:
这是指在一定的时间间隔T内,对输入信号的周期脉冲计数为:
N,则信号的频率为F=N/T。
这种方法适合于高频测量,信号的频率越高,则相对误差越小。
(2)测周法:
这种方法是计量在被测信号一个周期内频率为F0的标准信号的脉冲数N来间接测量频率,F=F0/N。
被测信号的周期越长(频率越低),则测得的标准信号的脉冲数N越大,则相对误差越小。
2.2频率测量硬件设计
频率测量有:
频率表和频率比较器
频率表:
用于频率的测量。
测量一个输入信号的频率的大小。
频率比较器:
用于频率的比较。
比较两输入信号的频率的大小。
2.3频率测量软件设计
由于此程序是基于C8051F020单片机的程序设计,主要的设计思路是利用信号发生器产生100HZ-500KHZ的方波,通过单片机的P0.0端口输入进单片机,经过单片机的处理,再由单片机的实验箱的液晶屏进行显示具体思路如下:
(1)首先是对单片机的初始化设定。
(2)PCA0采集部分。
(3)数据的转化部分。
(4)数据的显示部分。
三硬件设计方框图
智能频率计设计方框图
四硬件设计
4.1单片机模块
4.1.1电源电路
在电源电路中,SPX1117-3.3是稳压芯片将输入电压5V转换成3.3V作为C8051F020单片机的主要供电电源。
S1为输入电源开关按钮,在下载完数据后可用此按键来更新下载数据。
D2为电源指示灯,单片机通电时LED灯亮。
其电路图如图4—1单片机电源电路所示。
图4—1单片机电源电路
4.1.2晶振电路
Y1为晶体振荡器,其振荡频率为22.11842MHZ,为单片机提供其工作所需要的时钟,C7、C8起到帮助晶振的作用。
其电路图如图4—2单片机晶振电路所示。
图4—2单片机晶振电路
4.1.3复位电路
当开发板上电时,C5经充电后复位端电压相当于低电平实现上电复位:
当断电后通过D3(1N4148)形成放电回路。
其电路图如图4—3单片机复位电路所示。
图4—3单片机复位电路
4.1.4液晶显示(LCD)接口电路
单片机留有一个LCD液晶接口,相对应的液晶为MzL05-12864,它是一款仅写入的串行SPI接口方式的液晶,给液晶仅需5个控制口即可完成对其控制。
单片机使用模拟SPI的方式对液晶进行操作。
其电路图如图4—4单片机液晶接口电路所示。
图4—4单片机液晶接口电路
4.1.5LED显示电路
单片机控制LED的显示及其显示内容。
其电路图如图4—5单片机LED显示电路所示。
图4—5单片机LED显示电路
4.2频率计系统模块
4.2.1频率计
该电路为一“频率转换插件”,能用万用表(或电压表)测量信号的频率,测量范围为100HZ-500KHZ。
电路中D6、D7用于输入限幅保护,输入信号的幅值应低于400Vp-p。
由于隔直电容C10的作用,电压比较器AR1只有交流输入,由于分压电阻R7、R8的作用AR1的输入端的直流偏置为电源电压的一半,流入R6的偏流使AR1输出低电平,一旦输入信号的振幅足够大克服了偏移AR1反转输出高电平通过C11的正反馈加快转换过程,当输入信号为负振幅时AR1重新反转,输出低电平。
所以在IC3的输入端为一矩形波。
IC3为一频率/电压转换芯片,其转换的线性度为1%。
AR2输出的电压与输入信号的频率成正比的电压。
输出有AR2缓冲,它是一个准确的电压跟随器,具有较低的输入阻抗。
R17用于输出短路保护为防止由于电阻R17上的压降导致输出错误R17的输出端反馈到电压比较器的反相输入端。
其电路图如图4—6频率计电路所示。
图4—6频率计电路
4.2.2频率比较器
频率比较器电路有两个输入端,分别输入两个信号一个信号从Q1的基极输入,控制Q1的导通,Q1导通频率就是输入信号的频率,Q1后面就是一个二极管,用于产生与输入信号频率相对应的脉冲串,这个脉冲串是的Q2截止电容器C17放电。
另一个信号从Q4基极输入,它的作用原理同上只不过大的作用是给电容器C17充电,这样同时加入两个信号时C17上的电量就由两个输入信号的频率决定。
刚开始时电容器C17上的电压为电源电压的一半5V,这样加入信号后如果f1高于f2的话,放电时间很长,所以其电压要低于5V,反之类似。
这样就得到了由输入频率差得到的电压输出。
其电路图如图4—7频率比较器电路图所示。
图4—7频率比较器电路
五软件设计方框图
N
N
Y
Y
〇
Y
智能频率计软件设计方框图
六软件设计
6.1主程序设计
主程序涉及到系统资源分配,一些复杂运算等等。
主程序如下。
main(){
WDTCN=0xde;
WDTCN=0xad;//关看门狗
PCA_Init();//PCA0初始化
PORT_Init();//端口初始化
LCD_Init();//液晶初始化
T0_Init();//T0初始化
SYSCLK_Init();//系统时钟初始化,11MHz
TR0=1;//启动定时器T0
while
(1)//死循环
if(state1!
=state)//判断是否有换档,有则进入if(){}里面
{{switch(state)
{case0:
Tcount=3;break;//A档,只计算3个被测脉冲
case1:
Tcount=200;break;//B档,只计算200个被测脉冲
case2:
Tcount=800;break;//C档,只计算800个被测脉冲
case3:
Tcount1=400;break;//D档,只计算400*65536个基准脉冲
case4:
Tcount1=10;break;//E档,只计算10*65536个基准脉冲
default:
break;}
state1=state;//换档结束
count1=0;count=0;//基准频率计时归零
T=0;T1=0;//被测脉冲计数归零
PCA0L=0;PCA0H=0;//PCA0定时器归零
PCA0CPM0|=0x01;}//开启捕捉中断
if(st1==1)//低频档
{Timer0=(double)((PCH*256+PCL+65536*(count+count1*60000))/SYSCLK);
//计算时间
fre=(double)((Tcount-1)/Timer0);//间接计数法算频率
T=0;T1=0;count=0;count1=0;PCA0L=0;PCA0H=0;PCL=0;PCH=0;st1=0;
//各变量归零
PCA0CPM0|=0x01;}//开启捕捉中断
if(st3==1)//高频档
{fre=(double)((T-1+T1*60000)*SYSCLK/(Tcount1*65535));//直接计数法
PCA0L=0;PCA0H=0;T=0;T1=0;count=0;count1=0;st3=0;//各变量归零
PCA0CPM0|=0x01;}//开启捕捉中断
if(countt0>=450)//T0计时到了
{fre=0;countt0=0;count1=0;count=0;state=0;state1=100;T=0;
T1=0;PCA0L=0;PCA0H=0;//各变量归零
PCA0CPM0|=0x01;}//开启捕捉中断
if(fre<=50)state=0;//频率小于50Hz换A档
if((fre>50)&&(fre<=100))state=1;//频率50~100Hz换B档
if((fre>100)&&(fre<=1000))state=2;//频率100~1000Hz换C档
if((fre>1000)&&(fre<=25000))state=3;//频率1000~25000Hz换D档
if(fre>25000)state=4;//频率大于25000Hz换E档
LCD_show(fre);}}//液晶显示函数
6.2液晶显示程序设计
液晶显示程序如下。
voidLCD_Init(void)
{unsignedintx;
P6=0x09;//写命令
for(x=0;x<5000;x++);//延时程序
P7=0x38;//两行显示,5×7点阵
P6=0x08;//结束写命令
P6=0x09;//写命令
for(x=0;x<1000;x++);//延时程序
P7=0x0e;//开显示,开光标,字符不闪烁
P6=0x08;//结束写命令
P6=0x09;//写命令
for(x=0;x<1000;x++);//延时程序
P7=0x06;//I/D=1,AC自动增加1;S=0,整体显示不移动
P6=0x08;//结束写命令
P6=0x09;//写命令
for(x=0;x<5000;x++);//延时程序
P7=0x01;//清除DDRAM,置AC=0;
P6=0x08;//结束写命令
P6=0x09;//写命令
for(x=0;x<5000;x++);}//延时程序
voidLCD_show(doubleshu)
{unsignedinti1,shu1=0,i2,i3,x;
unsignedcharLCD[8]={0},temp=0,www=0,*LCDpoint;
doubleshu2=0;
if(state>=3)shu/=1000;//如果是高频档,用KHz的单位
shu2=shu;//将频率数值另存
shu1=shu;//取频率的整数部分
LCDpoint=LCD;
for(i2=0;;i2++)//将整数每位取出,并保存在LCD[]中
{LCD[i2]=shu1%10;
shu1/=10;
if(shu1==0)break;}
for(i3=0;i3{temp=LCD[i3];
LCD[i3]=LCD[i2-i3];
LCD[i2-i3]=temp;}
LCD[i2+1]=10;//保存小数点
shu1=shu;//取频率整数部分
shu2=shu-shu1;//将频率减去整数部分,得到小数部分
for(i1=i2+2;i1<=4+i2;i1++)//取出小数部分的每一位
{LCD[i1]=(unsignedchar)(shu2*10);
shu2=shu2*10-LCD[i1];}
P7=0x80;//第一行显示
P6=0x01;//写命令
P6=0x00;//结束写命令
for(x=0;x<1000;x++);//延时
for(i2=0;i2<=9;i2++)//显示量程
{www=liangcheng[state][i2];//查相应的量程的ASCII码
P7=www;//写数据
P6=0x05;//开始写数据
P6=0x04;//结束写数据
for(x=0;x<1000;x++);}//延时
P7=0xc1;//第二行显示
P6=0x01;//开始写命令
P6=0x00;//结束写命令
for(x=0;x<1000;x++);//延时
for(i2=0;i2<=i1;i2++)//显示数据
{www=LCDdata[LCD[i2]];//查询数据相应得ASCII码
P7=www;//写入数据
P6=0x05;//开始写数据
P6=0x04;//结束写数据
for(x=0;x<1000;x++);}延时
if(state>=3)www=75;//根据档数是否显示“K”
elsewww=0x20;//否则显示空格
P7=www;//写入数据
P6=0x05;//开始写数据
P6=0x04;//结束写数据
for(x=0;x<1000;x++);//延时
P7=72;//“H”
P6=0x05;//开始写数据
P6=0x04;//结束写数据
for(x=0;x<1000;x++);//延时
P7=122;//“z”
P6=0x05;//开始写数据
P6=0x04;//结束写数据
for(x=0;x<1000;x++);//延时
for(i2=0;i2<=16-i1-4;i2++)//余下的位用空隔显示
{P7=0x20;
P6=0x05;
P6=0x04;
for(x=0;x<1000;x++);}}
6.3PCA0采集程序设计
PCA0模块有边沿触发的捕捉方式,每来一个下降沿,进一次中断并计一个数,直接计数法和间接计数法都需要这个功能。
PCA0功能的初始化由PCA_Init()函数(函数定义见附录1)完成,该函数的作用是:
(1)选择系统时钟为PCA0计数器时钟源,时钟溢出使能;
(2)下降沿触发捕捉,捕捉中断使能;
(3)为cex0分配P0.0端口,将PCA0中断优先级为高;
(4)对PCA0时钟初始化。
PCA0中断服务程序如下:
voidPCA_ISR(void)interrupt9
{if(CF==1){count++;CF=0;}//count变量保存时钟溢出次数
if(count==60000){count1++;count=0;}//count1记录count变量溢出次数
if(CCF0==1){T++;CCF0=0;countt0=0;}//T保存脉冲个数,并清零T0定时器
if(T==60000){T1++;T=0;}//T1保存T溢出次数
if(T==1){PCA0L=0;PCA0H=0;CR=1;}//当第一个脉冲来时开启PCA0定时器
if(state<3)//低频档
{if(T==Tcount&&T1==0)//记录到Tcount个被测脉冲次数
{PCL=PCA0CPL0;
PCH=PCA0CPH0;//记录此时的比较寄存器中的数值
st1=1;//表示低频档
CR=0;//停止PCA0计数器
PCA0CPM0&=0xfe;}}//关闭捕捉中断
else//高频档
{if(count==Tcount1&&count1==0)//记录到Tcount1*65536个基准脉冲次数
{st3=1;//表示高频档
PCA0CPM0&=0xfe;//关闭捕捉中断
CR=0;}}}//关闭PCA0时钟
6.4T0等待初始化程序
由于程序算法上的问题,因为间接计数法和直接计数法都用上了一些共用变量,程序可能会出错,而且在由高频档换向低频当时很容易卡死。
因此特为此设置了定时器0作为判断程序是否卡死的依据,若卡死允许时间计满T0将初始化一些共用变量初始化。
七工作过程分析
本文设计的智能频率计具有适用范围广,精度高,频率范围较大,并且可以自动换档等特性。
它的工作过程如下:
(1)信号输入放大电路,由使用者调整放大倍数,然后信号被适当的放大;
(2)已经被放大的信号再输入低通滤波电路,滤除大部分高频干扰,得到较纯净的信号。
(3)纯净的信号需要进行整形,得到标准的方波信号。
(4)信号输入单片机,单片机对脉冲数进行计数。
(5)如果频率小于1000Hz,则视作低频信号,使用间接计数法计算信号频率。
首先,当检测到第一个下降沿之后,启动PCA0定时器(对基准频率计时,结果保存在PCH、PCL、count和count1中),当系统对被测频率的计数达到Tcount之后,关闭PCA0捕捉中断和PCA0定时器,通过公式计算频率:
Timer0=(double)((PCH*256+PCL+65536*(count+count1*60000))/SYSCLK)
frequency=(double)((Tcount-1)/Timer0)
算出频率frequency之后,使用函数LCD_show(double)显示。
运行结果如图7-1和7-2所示,其中图7-1是实际的频率,图7-2是频率计所检测的频率。
图7—1实际频率图图7—2频率计图
如果被测频率大于1000Hz,那么则视作高频信号,使用直接计数法对信号进行处理。
同样,当第一个下降沿到来时,开启PCA0定时器,并计算在Tcount1*65536/SYSCLK(即Tcount1*5.93ms)时间内的脉冲个数(脉冲个数存在T和T1中)。
通过公式计算频率:
fre=(double)((T-1+T1*60000)*SYSCLK/(Tcount1*65535));
经过LCD_show(double)函数显示所测频率值。
如图7-3和7-4所示。
其中图7-3是实际的频率,图7-4是频率计所检测的频率。
图7—3实际频率图图7—4频率计图
八元器件清单
名称
型号
数量
备注
普通电阻器
33
电容
19
整流二极管
1N4004
6
发光二极管
3
数码管
4
单片机
C8051F020
1
集成稳压器
LM7805
1
三极管
BC550C
4
集成运放
CA3130
2
LA4151
1
电源
1
1
1
5V
10V
25V
九主要元器件介绍
9.1C8051F020
C8051系列单片机是集成的混合信号片上系统,具有与MCS-51内核及指令集完全兼容的微控制器,除了具有标准8051的数字外设部件之外,片内还集成了数据采集和控制系统中常用的模拟部件和其他数字外设及功能部件。
C8051系列单片机是真正能独立工作的片上系统(SOC)。
CPU有效地管理模拟和数字外设,可以关闭单个或全部外设以节省功耗。
C8051F系列单片机是完全集成的混合信号系统级芯片,具有与8051兼容的CIP-51微控制器内核,采用流水线结构,单周期指令运行速度是8051的12倍,全指令集运行速度是原来的9.5倍。
其内部电路包括CIP-51微控制器内核及RAM、ROM、I/O口、定时/计数器、ADC、DAC、PCA、SPI和SMBus等部件,即把计算机的基本组成单元以及模拟和数字外设集成在一个芯片上,构成一个完整的片上系统(SOC)。
C8051F020内部带有数据采集所需的ADC和DAC,其中ADC有两个,一个是8路12位逐次逼近型ADC,可编程转换速率,最大为100kS/s.可通过多通道选择器配置为单端输入或差分输入。
内有可编程增益放大器PGA用于将输入的信号放大,提高A/D的转换精度。
可编程增益为:
0.5、1、2、4、8或16,复位时默认值为1。
另一个是8路8位ADC,可编程转换速率最大为500kS/s,其可编程放大增益为0.5、1、2、4,复位时默认值为0.5。
有2个12位的DAC,用于将12位的数字量转换为电压量,可产生连续变化的波形,两路信号可同步输出。
C8051F020外设还增添了三个串行口。
可同时与外界进行串行数据通信,SMBus兼容于I2C串行扩展总线;SPI串行扩展接口;两个增强型UART串口。
C8051F020具有基于JTAG接口的在系统调试功能,片内的调试电路通过JTAG接口可提供高速、方便的在系统调试。
9.2MzL05-12864
MzL05-12864模组是一个小型的LCD显示器模组,显示细腻,带白色背光;MzL05-12864模块的MCU接口为串行SPI接口,非常合适应用于小型仪器、手持设备之中。
MzL05-12864为一块小型的128X64点阵的LCD显示模组,模组上的 LCM采用COG技术将控制(包括显存)、驱动器集成在LCM的玻璃上,接口简单、操作方便;为方便用户的使用,铭正同创在LCM的基础上设计了MzL05-12864模组,将模组所必需的外围电容电阻集成到模组上。
MzL05-12864模组与各种MCU均可进行方便简单的接口操作。
具有128X64点阵FSTN、1/64占空比、1/9偏压比、单电源供电对比度编程可调、仅写入的串行SPI接口方式、3.3V的白色LLED背光,美观大方的特点。
9.3LM7805
三端稳压集成电路LM7805。
电子产品中,常见的三端稳压集成电路有正电压输出的lm78××系列和负电压输出的lm79××系列。
顾名思义,三端IC是指这种稳压用的集成电路,只有三条引脚输出,分别是输入端、接地端和输出端。
它的样子象是普通的三极管。
LM7805是美国半导体公司的固定输出三端正稳压器集成电路,输出电流在1A以上,输出电压是+5V。
内其内部包括过热、过流和调整管保护等电路,误差放大电路,基准电压电路和调整电路,使用比较方便且稳定精度高。