3.7步进电机驱动模块
3.7.1步进电机简介和原理
步进电机是将给定的电脉冲信号转变为角位移或线位移的开环控制元件。给定一个电脉冲信号,步进电机转子就转过相应的角度,这个角度就称作该步进电机的步距角。目前常用步进电机的步距角大多为1.8度(俗称一步)或0.9度(俗称半步)。以步距角为0.9度的步进电机来说,当我们给步进电机一个电脉冲信号,步进电机就转过0.9度;给两个脉冲信号,步进电机就转过1.8度。以此类推,连续给定脉冲信号,步进电机就可以连续运转。由于电脉冲信号与步进电机转角存在的这种线性关系,使得步进电机在速度控制、位置控制等方面得到了广泛的应用【22】。
步进电机的使用至少需要三个方面的配合,一是电脉冲信号发生器,它按照给定的设置重复为步进电机输送电脉冲信号,目前这种信号大多数由可编程控制器或单片机来完成;二是驱动器(信号放大器),它除了对电脉冲信号进行放大、驱动步进电机转动以外,还可以通过它改善步进电机的使用性能,事实上它在步进电机系统中起着重要的作用,一般一种步进电机可以根据不同的工况具有多种驱动器;三是步进电机,它有多种控制原理和型号,现在常用的有反应式、感应子式、混合式等。 步进电机的速度控制是通过输入的脉冲频率快慢实现的。当发生脉冲的频率减小时,步进电机的速度就下降;当频率增加时,速度就加快。还可以通过频率的改变而提高步进电机的速度或位置精度。 3.7.2 ULN2003驱动芯片
一般ULN2003是用作灌电流驱动。ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN 达林顿管组成。ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行【16】。
(1)ULN2003引脚说明:
1-7号引脚:输入端 10-16号引脚:输出端 8号引脚:地端 9号引脚:电源+ (2)达林顿驱动的典型应用:
①用于大功率开关电路,电机调速,逆变电路,利用CMOS电路经过达林顿管驱动高灵敏度继电器的电路;②驱动LCD智能显示屏
25
LCD智能显示屏是由微型计算机控制,以LCD矩阵板作显示的系统,可用来显示各种文字及图案。该系统中的行驱动器和列驱动器均可采用高β,高速低压降的达林顿管。应注意的是,达林顿管由于内部由多只管子及电阻组成,用万用表测试时,基极的正反向阻值与普通三极管不同。 3.7.3步进电机驱动模块
单片机输出波形信号脉冲的宽度可由延时子程序来确定。只要改变延时时间,就可以改变驱动脉冲的频率,也就改变了步进电机的转速。显然,使用方便、灵活。
单片机向P1口输出驱动代码由程序进行。在实际编程中,单片机驱动代码存入存储器,构成控制表。只要CPU执行传送命令,数据依次取出,送P1口就可以了。每输出一个代码,步进电机旋转一步,连续循环输出,步进电机连续运行;倒序输出,步进电机反向运行;停止输出,步进电机停止运行。改变数据输出的速度,可改变输出脉冲的频率,也就改变了步进电机运行的速度
【23】
。
图3.13 步进电机驱动模块电路图
由于设计灌溉控制电路所需的时间和花费太大,本设计在硬件电路方面没有做灌溉电路,原意是设计一个水阀控制电路,它有一个水阀灌溉部分和一个酸液电磁阀,最后有一个控制总阀门,当湿度低于最小值时,水阀自动打开灌溉,若土壤PH值呈碱性,那酸液电磁阀也会打开。
26
4 系统软件设计
4.1 程序设计
程序设计是指设计、编制、调试程序的方法和过程。它是目标明确的智力活动。由于程序是软件的本体,软件的质量主要通过程序的质量来体现,在软件研究中,程序设计的工作非常重要,内容涉及到有关的基本概念、工具、方法以及方法学等。程序设计通常分为问题建摸,算法设计,编写代码和编译调试四个阶段。
按照结构性质,有结构化程序设计与非结构化程序设计之分。前者是指具有结构性的程序设计方法与过程。它具有由基本结构构成复杂结构的层次性,后者反之。按照用户的要求,有过程式程序设计与非过程式程序设计之分。前者是指使用过程式程序设计语言的程序设计,后者指非过程式程序设计语言的程序设计。按照程序设计的成分性质,有顺序程序设计、并发程序设计、并行程序设计、分布式程序设计之分。按照程序设计风格,有逻辑式程序设计、函数式程序设计、对象式程序设计之分。
程序设计的基本概念有程序、数据、子程序、子例程、协同例程、模块以及顺序性、并发性、并行性、和分布性等。程序是程序设计中最为基本的概念,子程序和协同例程都是为了便于进行程序设计而建立的程序设计基本单位,顺序性、并发性、并行性和分布性反映程序的内在特性。
在硬件系统设计好以后,就要设计相应的程序实现系统功能。把整个过程分成若干个部分,每一部分叫做一个模块。把一个程序分成具有多个明确任务的程序模块,分别编制、调试后再把它们连接在一起形成一个完整的程序,这样的程序设计方法称为模块化程序设计。所谓“模块”,实质上就是能完成一定功能,并相对独立的程序段,这种程序设计方法称为模块程序设计法。
模块程序设计法的主要优点是:
(1)单个模块比起一个完整的程序易编写、调试及修改。 (2)程序的易读性好。 (3)程序的修改可局部化。
(4)模块可以共存,一个模块可以被多个任务在不同条件下调用。 (5)模块程序允许设计者分割任务和利用已有程序,为设计者提供方便。
27
[16]
本系统软件采用模块化结构,由主程序﹑键盘子程序、12864LCD液晶显示子程序构成。
4.2主程序设计
在本系统的程序设计中,主控模块负责启动系统后显示屏上的初级显示,开外部中断,判断系统模式,以及执行相应的子程序,完成系统功能。
在主程序模块中,需要完成对各模块接口的初始化工作,另外,在主程序模块中还需要检测模式标志单元的值,若该单元的值为0,则为手动模式,若为1,则为自动模式。用户选定模式后,主程序负责执行相应的子程序。若为手动模式,阀门打开后,则屏幕显示倒计时,时间一到,阀门就关闭。若为自动模式,则单片机定时检测P3.3口的值,若该值为高电平则不启动阀门,若该值为低电平,则启动阀门。启动阀门后,单片机还要继续检测P3.3口的值,若变高电平,则关闭阀门。执行完一个灌溉周期后继续循环检测P3.3口的电平值。
主程序流程图如图4-1所示。当接通电源时,自动灌溉控制系统启动,同时LCD液晶显示提示语,提示用户选择模式。若选择手动模式,显示屏还会提示用户通过键盘设置灌溉时间。在运行中键盘采用中断方式,若有键按下,则转向相应的子程序。
开始初级显示、开外部中断否模式单元的值=0?是手动模式自动模式启动执行完毕结束 图4-1主程序流程图
28
主程序如下:
main() { t=0; flag=0; TMOD=0x01;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1; ET0=1; TR0=1; P3_0=1; init_lcd(); clrram_lcd();
Initial_DS1302(); //时钟芯片初始化 up_flag=0; down_flag=0;
done=0; //进入默认液晶显示 pp=2; LED=ft=1; RH(); delay1(20); while(1) {
while(done==1)
keydone(); //进入调整模式
while(done==0) { RH();
if(pp==2) {
show_time();pp=0; //初始化 while(ff==0){RH();show_time();}
29