步进电机式温度表的设计Word格式文档下载.docx
《步进电机式温度表的设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《步进电机式温度表的设计Word格式文档下载.docx(37页珍藏版)》请在冰点文库上搜索。
随着科学技术的不断发展,人们对车载温度仪表的技术要求也越来越高,步进电机式温度表无疑将会在以后的技术生产中居于主导地位,因而研究开发以步进电机为机芯的车载温度仪表势头强劲,引起人们的高度重视,同时对我国科技水平的提高有重要的意义。
而步进电机运动控制技术难度较大,应用范围较广,当要求对运动机构进行精确控制的任务,就离不开运动控制系统,运动控制技术得到了各个国家的重视,己经成为一个专门的技术领域,体现着一个国家生产设备自动化技术水平。
由于其重要的实用价值以及技术上的复杂性,步进电机运动控制器一直为我国科研人员研究的对象,成为受到广泛关注和重视的问题。
改善控制器可显著的提高步进电机的位置控制和速度控制的可靠性、稳定性。
设计方案是伴随着大规模集成电路和微电子技术的发展应运而生的,就是基于专用芯片实现步进电机的分步驱动功能,通过微电子技术将所有的功能模块集成在一块芯片中,其特点就是系统简单、调试方便、体积小,易于维护。
本方案所设计的步进电机式温度表采用单片机AT89C51为核心构成检测装置,利用新型温度传感芯片DS18B20检测温度,并将其转换成数字信号;
利用新型步进电机驱动芯片ULN2003放大电流,用以驱动步进电机工作;
利用大功能显示驱动芯片PCF8566驱动数码管工作,对温度值进行实时显示。
方案框图如图2-1所示。
图2-1方案一原理框图
下面对系统各部分做简要的介绍。
1.温度传感电路
本方案以新型温度传感芯片DS18B20为核心构成温度传感电路。
传统的温度传感电路均使用温度传感器与A/D转换电路相结合的方法检测、转换温度信号,这种方法由于各个器件相互连接,使得系统检测精度很低、且效率不高。
利用新型温度传感芯片DS18B20将温度传感器和A/D转换电路集成的特点,检测、转换温度,大大的降低了成本,且精度很高,满足现代人们对温度传感电路功能的要求,用它构成步进电机式温度表的一部分,使得整个系统的软、硬件设计变的相对简单。
由于篇幅关系,本设计将在以后的章节中详细介绍DS18B20芯片。
2.步进电机的单片机控制电路
步进电机可以对旋转角度和转动角度进行高精度控制,步进电机作为控制执行元件,是机电一体化的关键产品之一广泛应用在各种自动化控制系统和精密机械等领域。
步进电机和普通电机不同之处是步进电机接受脉冲信号的控制。
如果通过单片机按顺序给步进电机绕组施加有序的脉冲电流,就可以控制电机的转动,从而实现数字→角度的转换,转换的角度大小与施加的脉冲大小成正比,而转动方向则与脉冲的顺序有关。
这将在以后的章节中做详细的介绍,由单片机实现的步进电机控制系统如图2-2所示。
图2-2单片机控制步进电机系统框图
本方案中步进电机采用分步驱动方法,分步驱动因为把原来的步进电机的一个整步(FullStep)距角分为不同数量的小步来完成,因此,不仅可以大大提高对执行机构的控制精度,同时因为电流的变化改变幅度降低,使电机运行平稳,无振荡;
有效的抑制了振荡、噪声和转矩波动;
提高了动态输出力矩。
本方案中采用驱动芯片ULN2003用以放大电流,驱动步进电机运转,ULN2003与其他传统的步进电机专用驱动芯片相比,工作电压高,工作电流大,输出还可以在高负载电流并行运行,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据,能够满足人们的技术要求。
第二章硬件设计
单片机控制模块的设计
3.2.1单片机的选取及在本设计中的应用
单片机是性能极佳的控制处理器,具有集成度高、控制功能强、软件资源丰富、硬件电路简单、工作可靠等优点,在本设计中用它作步进电机控制器的核心部件,无论在功能灵活性或者工作可靠性方面都比传统的控制器优越的多。
本设计中采用美国Atmel公司的8位单片机AT89C51作为单片机控制模块的核心部件,该型单片机在本设计中的应用如下:
1.复位电路设计
图3-3单片机的复位电路
89C51的复位有自动上电复位和人工按钮复位两种,图3-3给出了它们的电路。
在复位电路中,单片机的RST/VPD引脚为复位/备用电源线,它可使单片机处于复
位工作状态。
RST/VPD的第二功能是作为备用电源输入端。
当主电源VCC发生故障而降低到规定低电平时,RST/VPD线上的备用电源自动投入,以保证片内RAM中信息不丢失。
上电复位电路与开关复位电路相比,具有电路简单、自动复位等优点。
考虑到设计要求以及实际的应用,在本设计中,系统采用上电复位电路,用于对单片机进行复位。
2.晶振电路设计
图3-4单片机的晶振连接图
本设计中所用的单片机的晶振连接如图所示。
其中,XTAL1为单片机的反相振荡放大器输入和内部时钟发生电路输入端;
XTAL2为单片机的反相振荡放大器输出端。
这两个端子用来外接石英晶体和微调电容,及用来连接89C51片内OSC的定时反馈电路。
石英晶体起振后,在XTAL2线上输出一个3V左右的正弦波,以便使89C51片内的OSC电路按石英晶振相同频率自激振荡,本设计中OSC的输出时钟频率fOSC为12MHz,电容CO1、CO2为30pf,可以帮助起振,调节它可以达到微调fOSC的目的。
3.P1口的使用
P1口是带内部上拉的双向I/O口,向P1口写入1时,P1口被内部上拉为高电平;
可用做输入口,当作为输入脚时,被外部拉低的P1口会因为内部上拉而输出电流。
P1口还具有第二功能:
P1.0为定时计数器2的外部计数输入/时钟输出。
P1.1为定时计数器2重装载/方向控制。
在本设计中,利用P1.0、P1.1、P1.2、P1.3四个引脚通过限流电阻与步进电机驱动芯片的各个管脚相连,通过单片机的这四个脚输出脉冲,使步进电机工作。
3.
/VPP管脚的使用
/VPP为外部寻址使能/编程电压。
在访问整个外部程序存储器时,
必须外部置低;
如果
为高时,将执行内部程序,除非程序计数器包含大于片内FLASH的地址;
该引脚在对FLASH编程时接5V/12V编程电压(Vpp);
如果保密位1已编程,
在复位时由内部锁存。
在本设计中,我们将该管脚置1,以便能够访问片内ROM。
3.2.2模块的设计及控制原理
根据设计要求,我们知道主要采用MCU为核心构成步进电机式温度测量系统,该系统对各种温度信号进行检测、指示,具有数码显示功能,因此单片机89C51是核心部件,在本设计中起到重要作用。
本设计中,温度信号(非电量)通过温度传感模块转换输出的数字信号通过P3口送入单片机,从而实现对温度的测量,单片机通过软件控制着步进电机的正转、反转;
此外,将单片机的输出信号接入LCD,可以实现温度的显示。
3.3步进电机驱动模块设计
3.3.1步进电机的选型及在本设计中的应用
步进电机是微特电机的一种,它是将电脉冲信号转换成相应的角位移或直线位移的变换器。
它可以用脉冲信号直接进行开环定位控制,而无需位置或速度传感器,并且控制线路简单,使用方便、可靠。
在自动控制系统中或者汽车电子控制系统中,常常需要有将数字信号转换为角位移或线位移的电磁装置,步进电动机的工作特点恰好符合此要求,可以说它是和现代数字控制技术结合的最好的一类电机,很容易和其它数字器件进行接口。
因此广泛应用于汽车电子、数控机床、机器人等领域。
本设计中选用VID29系列仪表马达。
VID29仪表马达是一种精密的微型步进马达,内置减速比180/1的齿轮系,可将数字信号直接准确的转为模拟的指示输出。
VID29仪表马达需要两路逻辑脉冲信号驱动,可以工作于5V~10V的脉冲下,输出轴的步距角最小可以达到1/12°
,最大角速度600°
/S。
VID29系列仪表马达是两相步进马达经三级齿轮减速转动输出的,工作原理如下图所示:
图3-5VID29马达工作原理图
特点:
工作电压范围:
5V~10V
低功耗:
低于20mA,5V,2×
100mW
工作环境温度:
-40℃~105℃
高精度:
步距角最小可达到1/12°
。
长寿命:
特殊耐磨材料和齿形设计
图3-6分步驱动模式脉冲序列
用标准的5V逻辑电路电压,可以以分步驱动模式直接驱动马达,电流需求小于20mA。
在分步模式下,每个脉冲可以驱动马达转子转动60°
(即输出轴转动1/3度)。
马达转动的方向取决于施加在马达左右线圈上的周期性脉冲序列的相位差。
如上图所示,左线圈电压
相位超前于右线圈电压
时(相位差为π/3),VID_29系列的马达输出轴将顺时针旋转。
为了使马达运转更平稳,减小马达噪音,可以采用细分技术,用更精密更接近正弦波的脉冲波序列来驱动马达,使马达获得15°
的微步步进。
如下图所示:
图3-7脉冲细分时序图
电气特性:
工作环境温度最大值105℃,最小值-40℃。
线圈电阻最大值300
,最小值260
,典型值280
消耗电流最大值20
启动频率最小值160
,最大驱动频率600
机械特性:
全步模式下步距1°
,分布模式下步距1/3°
,微步模式下步距1/12°
转角范围0~315°
在本设计中,考虑到驱动芯片的选取、设计要求的需要以及成本的高低,我们采用分步模式驱动仪表马达。
3.3.2步进电机驱动芯片的选型及在本设计中的应用
在本次步进电机式温度表系统的设计中,由于步进电机工作电流过大,单片机输出脉冲难以驱动,因而使用一驱动芯片,利用其放大电流驱动步进电机工作。
目前市场上经常使用到的芯片有VID-6606、ULN2003等,下面便对这些芯片做一些简单的介绍,然后通过对比选取一种适合本设计要求的驱动芯片。
1.驱动芯片ULN2003
ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。
ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
ULN2003工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行。
图3-8ULN2003方框图
表3-1ULN2003极限值参数
ULN2003与单片机的连接如图3-9所示。
图3-9ULN2003与单片机连接图
2.VID-6606
VID-6606是一款专为驱动微型步进马达而设计的CMOS集成电路,每个驱动芯片可同时驱动四路马达。
在驱动芯片的频率控制端输入脉冲序列,可以控制步进马达的输出轴以微步转动,每个微步马达输出轴转动1/12°
,最大角速度可达600°
/s。
表3-2VID-6606的电气参数
图3-10VID-6606与单片机连接图
VID-6606与单片机连接如图3-10所示。
该产品适用于相位差为60°
的两相永磁仪表步进马达,该型驱动芯片的特点是:
(1)以微步驱动
(2)简单易用,每个马达只需速度和方向两个控制端
(3)所有输入脚都有干扰过滤器
(4)宽工作电压
(5)低电磁干扰辐射
以上是对实际中经常使用的两种驱动芯片的简单介绍。
从上面可以看出VID-6606驱动芯片采用微步驱动,驱动步进电机指针一步走1/12°
,而ULN2003采用分步驱动,驱动指针一步走1/3°
从上面的介绍中我们可以看到,本设计使用的步进马达采用分步驱动模式,因而选取ULN2003作为本设计的步进电机驱动芯片。
下面对此次设计的步进电机驱动模块做详细介绍。
3.3.3步进电机驱动电路设计
电路图如图3-11所示。
由单片机的P1口通过限流电阻将步进电机驱动脉冲送入驱动芯片ULN2003,利用芯片的放大作用将驱动电流放大到步进电机工作电流范围内,通过OUT1、OUT2、OUT3三个管脚输出,驱动步进电机运转。
图3-11单片机控制步进电机电路
以上是此次步进电机式温度表的硬件设计,只有通过软件编程,才能够有效运行此系统,下面将介绍本系统的软件设计。
第四章系统软件设计
4.1系统总体框图
图4-1系统软件流程图
系统软件设计采用模块化设计方法。
整个系统由温度传感模块,转换结果处理模块,步进电机正反转模块等部分组成。
系统软件流程图如图4-1所示。
上电或复位后,系统将进入初始化,系统开始运行。
在执行过程中,根据程序的运转分别调用各个功能模块完成步进电机的正反转和显示温度。
下面根据各功能模块的工作原理及设计要求进行软件设计,编写程序。
4.2温度传感系统软件设计
在本设计中,温度传感电路以温度传感芯片DS18B20为核心,由于DS18B20本身具有A/D转换功能,所以软件设计只需将DS18B20进行软件设计即可。
软件设计框图如图所示,具体的程序见附录E。
图4-2温度传感系统软件设计框图
4.3数据转换模块设计
在本设计中,步进电机转角最大为315°
,步进电机每步走1/3°
,则步进电机指针最多可走315/(1/3)=945步。
在设计中,温度显示范围为0~120℃,则步进电机每走一步温度变化120℃/945。
在本设计中,温度传感芯片DS18B20转换输出的温度信号为16位,则单片机每跳动一位,步进电机指针走945/4096步,即指针转动(945/4096)×
(1/3)°
.
图4-3为数据处理程序流程图。
图4-3数据处理程序流程图
本设计中,利用单片机再次采样值与上次采样值的差值是否大于0来判断步进电机是正转还是反转,然后利用差值与单片机每跳动一位步进电机指针所走步数相乘,得出步进电机指针所走步数N。
(1)判断步进电机正反转程序
在本程序的设计中,由于采样值均为16位,因而减法需考虑进位,当差值>0时,步进电机正转,此时给R5赋0;
当差值<0时,步进电机反转,此时给R5赋1,详细程序见附录E。
(2)求步进电机步数N的程序
求解公式为:
N=差值×
(945/4096),本设计中,由于差值为16位数,而945、4096均为16位数,所以可以直接进行相乘、相除运算。
89C51的乘法指令只能完成两个8位数相乘,因此16位无符号数相乘必须将他们分为4个8位数相乘来实现,具体乘法示意图如图4-4所示,图中ab为16位被乘数(a为高8位,b为低8位),同理,cd为16位乘数。
ab
×
cd
bdHbdL
+)adHadL
R2R3@R0
+)bcHbcL
R1R2@R0+1
+)acHacL
@R0+3@R0+2
图4-4边乘边加16位乘法法则示意图
差值结果:
低8位→40H
高8位→41H
十进制数945转换成十六进制数为03B1H,4096转换成十六进制数为1000H。
在本设计中,由于差值可能为负数,还需求补码。
具体程序见附录E。
以上程序实现了16位的差值与十进制数945的相乘,接下来是实现上面得到的32位数除以4096,这个商就是我们要的步进电机的转动步数N,余数这里我们舍去。
除法执行前后的寄存器分配如图4-5所示。
被除数
R5
R4
R3
R2
除数
R7
R6
(a)除法执行前
余数商数
除数
(b)除法执行后
图4-5除法执行前后的寄存器分配
实现上面乘法结果的32位数除以16位数(十进制数4096)的除法程序流程图如图4-6所示。
详细程序见附录E。
源程序清单(程序中显示的部分不要)
*************
主程序:
*************
ORG0000H
MAIN:
MOVPSW,#00H;
选用寄存器组0
MOVSP,#70H;
设置堆栈指针SP=70H
MOV40H,#00H;
上次采样值低4位清零
MOV41H,#00H;
上次采样值高8位清零
……
******************
温度传感、转换程序:
TEMPER_LEQU40H;
用于保存读出温度的低8位
TEMPER_HEQU41H;
用于保存读出温度的高8位
FLAG1EQU38H;
是否检测到DS18B20标志位
TEMPBCDEQU30H
DOTBCDEQU31H
DQBITP3.0
C_BITEQU23H
B_BITEQU20H;
数码管个位数存放内存位置
A_BITEQU21H;
数码管十位数存放内存位置
WDZH:
LCALLGET_TEMPER;
调用读温度子程序,温度存入到了40H和41H中
MOVA,40H;
高字节的低4位+低字节的高4位=温度整数的二进制数
ANLA,#0F0H
SWAPA
MOVR7,A
MOVA,41H
ANLA,#0FH
ORLA,R7
MOVTEMPBCD,A;
整数部分BCD
MOVA,40H
ANLA,#0FH;
低字节的低4位,即小数部分
MOVDPTR,#DOTTAB
MOVCA,@A+DPTR
MOVDOTBCD,A;
小数部分的BCD
LCALLDISPLAY;
调用数码管显示子程序
AJMPWDZH
;
读出转换后的温度值
GET_TEMPER:
SETBDQ
LCALLINIT_1820;
先复位DS18B20
JBFLAG1,TSS2
RET;
判断DS1820是否存在?
若DS18B20不存在则返回
TSS2:
MOVA,#0CCH;
跳过ROM匹配
LCALLWRITE_1820
MOVA,#44H;
发出温度转换命令
LCALLDISPLAY;
调用显示子程序实现延时一段时间,等待A/D转换结束,12位—750微秒
LCALLINIT_1820;
准备读温度前先复位
MOVA,#0CCH;
LCALLWRITE_1820
MOVA,#0BEH;
发出读温度命令
LCALLREAD_18200;
将读出的温度数据保存到40H/41H
RET
;
DS18B20复位初始化子程序
INIT_1820:
SETBDQ
NOP
CLRDQ
MOVR1,#3;
主机发出延时537微秒的复位低脉冲
TSR1:
MOVR0,#107
DJNZR0,$
DJNZR1,TSR1
SETBDQ;
然后拉高数据线
MOVR0,#25H
TSR2:
JNBDQ,TSR3;
等待DS18B20回应
DJNZR0,TSR2
LJMPTSR4;
延时
TSR3:
SETBFLAG1;
置标志位,表示DS1820存在
LJMPTSR5
TSR4:
CLRFLAG1;
清标志位,表示DS1820不存在
LJMPTSR7
TSR5:
MOVR0,#117
DJNZR0,$;
时序要求延时一段时间
TSR7:
SETBDQ
写DS18B20的子程序
WRITE_1820:
MOVR2,#8;
一共8位数据
CLRC
WR1:
CLRDQ
MOVR3,#6
DJNZR3,$
RRCA
MOVDQ,C
MOVR3,#23
DJNZR3,