本文主要叙述利用Proteus软件实现的数字式指针温度计的一种调试方法,采用MCS51单片机作为指针温度计的数字信号处理器,其中,温度采集传感器选用Dailas公司的DSl820单总线式数字温度传感器,该温度计的温度值通过四个数码管显示,同时还可以通过刻盘指针指示。
硬件设计
硬件设计包括温度采集模块、单片系统及温度显示模块等模块,其中,刻度盘上指针的控制是设计中的一个重点。在设计数字电路的角位移控制时,一般选用步进电机或伺服电机,选用步进电机时,其步进角固定,同时,对于角位移的控制,会产生控制角度的动作位置不够精确的问题;选用伺服电机也就是舵机时,其控制原理是通过MCS51单片机产生脉宽调制(PWM)信号的占空比来改变舵机摇臂旋转的位置,以达到控制伺服电机的目的,最后在刻度盘上指示温度值。
系统硬件电路原理图如下图所示。
1. 舵机的工作原理系统中指针的驱动由舵机实现,为使指针在刻度盘上的初始指示精确,文中采用 4个独立按键实现指针刻盘上的粗、微调节。
舵机是一个简单的闭环系统,其内部硬件电路、微型电机及减速器封装在一个部件内,实物图如下图所示,输出轴可在-90度~90度范围内旋转到任意角度。
舵机包含控制信号线、电源线和地线3根引线,其反馈元件为一个与输出轴同轴的精密电位器,通过电位器的反馈信号得到舵机输出轴转动的位置,然后将相应的电压值反馈回控制芯片,最后将反馈的输出轴位置与控制引线设定的位置进行比较,得到输出轴位置的偏差,从而驱动微型电机转动,使输出轴转到预定控制的角度。
舵机的控制信号为一列PWM波,周期为18~20ms,舵机输出轴转动的角度位置与PWM信号占空比呈线性关系,当控制信号的高电平宽度为0.5ms时,舵机输出轴位置为-90度;当信号高电平宽度为2.5ms时,输出轴位置为+90度。
软件设计单片机软件的设计包括DS1820的读写、模拟PWM输出、单片机温度取值、按键扫描、数码管显示等稗序设计。
1.DSl820的读写DSl820采用单总线协议,能够实现数据的双向传输,在进行DS1820读写操作前应先对DS1820进行复位,同时,必须严格遵守DS1820的读写时序,尽量精简中断程序,以减少对DS1820的读写时序的影响,提高温度采集的准确性。
DS1820读、写子程序如下:
/*******************读操作**********************/
uchar readbyte(void)
{
ucha r i=0:
uchar dat=0;
for(i=8;i>0;i--)
{
DQ=0:
dat>>=1:
DQ=1:
if(DQ)
datㄧ=0x80;
delay(4);
}
return(dat);
}
/********写操作********/
void writebyte(unsigned char dat)
/*写1字节*/
{
uchar i=O:
for(i=8;i>0;j--)
{
DQ=0:
DQ=dat&0x01:
delay(5);
DQ=1:
dat>>=1;
}
delay(4);
}
2.PWM的输出
利用MCS51单片机的定时器中断产生PWM信号,T0每产生 次中断,PWM输出逻辑电平翻转一次,PWM控制信号的输出周期为20ms。
定时器中断服务稃序如下:
void timer0(void)interrupt 1 using 1
{
p12=!01 2
int_d=1 8432-int_d:
THO=- (int_d/256);TL0=-
(int_d%256);
if(int_d>=550&&int_d<=2050)
int_d=int_m;
else int_d=1 8432_int_m;
/*判断脉宽是否在正常范围之内*/
}
其中,int_m为中断计数的中间变量。
3.按键扫描程序
文中采用4个独立按键完成指针刻度盘上的粗、微调节,按键扫描程序如下:
/******独立按键扫描程序****/
void keysCAN(void)
{
/****************指针微调*******************/
if(p14==O)
{
delay(300);
if(p1 4==0)
{
if (550<=int_m&&int_m<=2047)
int_m+=3;
while(p14==O)vLEDKey_Scan();
/*待按键松开,数码管动态扫描*/
}
}
/************指针微调*******/
if(p1 5==0)
{
delay(300);
if(p1 5==O)
{
if
(553<=int_m&&int_m<=2050)
int_m-=3:
while(p1 5==0) vLedKey_Scan
():
}
}
/**************指针粗调************/
if(p1 6==0)
{
delay(300);
if(p1 6==0)
{
if
(550<=int_m&&int_m<=2030)
int_m+=20;
while(p1 6==0)vLedKey_Scan();
}
}
/***********指针粗调***************/
if(p1 7==0)
{
delay(300);
if(p1 7==O)
{
if
(570<=int_m&&int_m<=2050)
im_m-=20;
while(p1 7==O)vLedKey_Scan
();
}
}
}
Proteus软件调试
Proteus软件可以对常用的单片机进行实时仿真,具有全速、单步、设置断点等调试功能,可以观察各个变量、寄存器等当前状态,同时支持第三方软件编译和调试环境。
在Proteus软件中系统的调试界面如下图所示,
其中,逻辑分析仪用于测量单片机产生的PWM信号,其中通道A3为测量PWM信号的基准,通道A5为单片机产生的PWM信号;示波器用于观察产生的PWM信号。
在Proteus6.9软件中调试的某一调试状态的界面图如下图所示,
系统27℃、43.1℃时指针刻盘的显示效果图分别如下图所示。