智能灌溉系统的研究与设计.docx

上传人:b****6 文档编号:8849160 上传时间:2023-02-02 格式:DOCX 页数:26 大小:324.94KB
下载 相关 举报
智能灌溉系统的研究与设计.docx_第1页
第1页 / 共26页
智能灌溉系统的研究与设计.docx_第2页
第2页 / 共26页
智能灌溉系统的研究与设计.docx_第3页
第3页 / 共26页
智能灌溉系统的研究与设计.docx_第4页
第4页 / 共26页
智能灌溉系统的研究与设计.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

智能灌溉系统的研究与设计.docx

《智能灌溉系统的研究与设计.docx》由会员分享,可在线阅读,更多相关《智能灌溉系统的研究与设计.docx(26页珍藏版)》请在冰豆网上搜索。

智能灌溉系统的研究与设计.docx

智能灌溉系统的研究与设计

毕业设计(论文)

题目智能灌溉系统的研究与设计

 

教学点

专业

年级

姓名

指导教师

 

定稿日期:

2011年6月1日

 

摘要

本系统系统通过选择合适的传感器将对土壤中含水量以及空气湿度等重要物理量进行采集,通过信号及采集部分将其转化为数字信号,交给单片机系统进行处理,通过智能控制部分,在需要时驱动相关外设,进行自动精确定位地灌溉。

具体流程图如下:

工作过程流程图

 

关键字:

智能控制精确定位密封湿度传感器差动放大顺序通电

液晶显示

机械设计部分

整体的机构形式如下所述:

水由出水口接入,经过水泵增压后,经过导水软管,最后从管的另一端喷射出来。

机械臂主要由导水软管,套筒,舵机,步进电机和与电机配合的传动装置组成。

套筒下端固结有加工上锥齿的圆环,电机通过锥齿轮传动,带动套筒转动。

舵机固定在套筒上,当套筒旋转时,舵机也随套筒旋转。

导水软管穿过套筒与固定在套筒上端的舵机相固结,当舵机臂摆动时导水软管喷头处完成竖直方向的调整,以使喷出的水能够调整远近。

而套筒转动则实现了喷水方向的调整。

这样,通过水平旋转及竖直摆动,实现了喷灌的精确定位。

考虑到水对电机、齿轮传动部分的腐蚀影响,电机及其与套筒的传动部分通过密封箱密封,导线引出,连接到控制电路部分及电源部分,以实现对机械系统的电力输入及控制。

机械臂通过套筒下端深埋入土壤进行固定。

这种方案是我们经过多次调整最后确定出来的。

下图为我们用机械仿真软件pro/engineer制作的图形(具体见附图)

我们的创新体现在我们的设计过程当中。

在喷口的设计中,由于市场上所售的喷头多利用水压将水达到某个固定位置,因此不能实现喷灌位置的可调性要求。

因此喷管管口需要重新设计。

在喷头处,我们曾试验过多个方案。

其中一个就是拟定用钢管作导水管,将水直接引到喷头,而喷头处设计成喷口可以转动的形式,通过增加一个电机并通过细杆与喷头处连实现竖直方向的转动,水平方向的转动还是靠另一个电动机带动套筒来实现(具体见附proe仿真图)。

但是这种设计有两个问题我们没能解决。

第一个问题就是密封的问题,喷口转动时对其密封要求较高,且此处水压较高,更增加密封难度。

第二个问题就是底部的电机如何使上部的喷头进行竖直方向的摆动。

此处传动距离较长,增加材料势必增加水平转动电机的负载,且此电机好密封,极易漏水烧毁电机。

于是我们直接采用了接导水软管的方法。

导水软管是用一种软橡皮材料做成的,我们在进行试验时,一端接从水泵流过的水,一端穿过套筒固定在舵机上,有较好的弹性,使灌溉机械臂在转动时,水管不会产生较大的阻力矩,也不会发生塑性变形影响使用。

这种形式的优点是结构简单,使用方便,一根管足以解决喷头出的设计问题。

缺点是电机带动套筒的转角不能持续朝一个方向转动,否则水管会打结使水流不通,且从水管浇灌到地面的水流呈柱状,对地面冲击较大。

软管长期拉伸压缩会造成水管脱胶,碎裂等问题。

在实际设计计算中,需进行软管的拉压的疲劳强度的校核,及齿轮传动的校核计算。

通过查机械设计的手册可以计算出所需的材料及其他要求。

在进行设计的过程中,我们查阅了上市的喷头的基本的工作原理,对其有了初步的了解。

在进行结构设计得过程中,我们查阅了相关的机械原理、机械设计方面的书籍,增长了我们的机械方面的知识及解决机械设计问题的能力。

具体构件可参见所附的proe零件图及整体装配图。

硬件电路部分设计 

A.湿度传感器方案

我们采用通DX-S2型土壤湿度传感器,通过测出被测土壤的介电常数,并根据土壤容积含水率与土壤介电常数之间的非线性关系推导出土壤的容积含水率和重量含水率。

本传感器对土壤水分变化有很高的灵敏度,因此温度、盐分、土壤性质变化因素的影响相对比较小,如果要求测量结果准确度高,应酌情对这些因素的影响进行修正。

或采取其它措施减少这些因素的干扰。

湿度传感器各项参数如下:

测量参数土壤容积/重量含水率θ

量程4~50%(绝对重量含水率)

精度误差不超过2%

响应时间响应在1秒内进入稳定

工作环境-30℃~+55℃

工作电压4.5~5.5VDC,典型值5.0VDC

工作电流50mA

输出信号0~2.5V

B.运算放大器方案

传感器输出的电压信号为毫伏级,需要通过运放将信号放大,对运算放大器要求很高。

基于此,我们考虑了可以采用以下几种方案:

方案一、利用普通低温漂运算放大器构成多级放大器。

普通低温漂运算放大器构成多级放大器会引入大量噪声。

由于A/D转换器需要很高的精度,所以几毫伏的干扰信号就会直接影响最后的测量精度。

在调试中误差较大,所以,此种方案不宜采用。

方案二、由高精度低漂移运算放大器构成差动放大器。

差动放大器具有高输入阻抗,增益高的特点,可以利用普通运放(如LM324)做成一个差动放大器。

U1-U3组成仪表放大器,U4构成电压跟随器,用于调零电路.

基于以上分析,我们采用此种放大方式,(四集成度,芯片型号LM324)

C.电机方案

由于对浇灌机械臂的转速要求不高,且要实现精确定位,而且步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。

在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。

这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使得在速度、位置等控制领域用步进电机来控制变的非常的简单。

由此,电机采用四相六线混合式步进电机,以实现对喷灌机械臂的转动控制。

在最初的电机驱动方案中,采用L298芯片+二极管吸收电路,用设计好的开关电源给L298以及步进电机供电。

电路经keil+proteus仿真后可以实现对电机的控制,仿真阶段未出现任何问题。

电路图如下:

但此电路在实际调试中,由于从l298的2、3、13、14脚输出信号变化较快,二极管导通出现问题;

电机正转调试c语言子程序如下:

#include

voiddelay1s(void)

{unsignedcharj,k;

for(j=50;j>0;j--)

for(k=100;k>0;k--);

}

main()

{

unsignedchara[8]={0x24,0x35,0x11,0x39,0x28,0x3a,0x12,0x36};

unsignedcharb;

unsignedchari=0;

while(i<=50)

{

for(b=0;b<8;b++)

{

P1=a[b];

delay1s();

i++;}}}

1、电机的转速控制:

上程序中,通过j、k的取值,可以控制延时程序延时的时间,进而控制步进电机的转动频率,进而实现对电机速度的控制。

实际应用中,可将其设置为函数间接口的变量,以实现调速。

2、电机的转动位置控制:

在while循环中,没执行一次,电机转动一个齿距角。

由于所用电机为50齿,所以每完成一次上述程序,电机转动一周。

转动角度与i的取值关系为:

可以将i设置成函数间接口的变量,通过对其赋值实现精确定位。

3、实现正反转

反转程序只需将0x24,0x35,0x11,0x39,0x28,0x3a,0x12,0x36的顺序倒过来,即依次为0x36,0x12,0x3a,0x28,0x39,0x11,0x35,0x24,依次循环。

在运行时,电机的各项性能已经满足使用需要,但仍有需改进的地方:

此电机在高频状态,转速较高时,易出现丢步、振动现象,需用细分方案来解决;另外,电机驱动电路的散热方法亦非尽善尽美,需要更好的解决方案。

D.显示部分设计:

在每次湿度传感器采集到数据时,由单片机驱动液晶显示器显示土壤湿度。

我们选用了成都市飞宇达实业有限公司出品的FYD12864-0402B型的液晶显示模块。

此模块提供硬体光标及闪烁控制电路,由地址计数器的值来指定DDRAM中的光标或闪烁位置。

该模块具有2.7~5.5V的宽工作电压范围,且具有睡眠、正常及低功耗工作模式,可满足系统各种工作电压及便携式仪器低功耗的要求。

液晶模块显示负电压,也由模块提供,从而简化了系统电源设计。

模块同时还提供LED背光显示功能。

除此之外,模块还提供了画面清除、游标显示/隐藏、游标归位、显示打开/关闭、显示字符闪烁、游标移位、显示移位、垂直画面旋转、反白显示、液晶睡眠/唤醒、关闭显示等操作指令。

下图为液晶显示程序流程图:

下图为proteus仿真图:

 

E、舵机控制方案

舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。

其工作原理是:

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。

它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。

最后,电压差的正负输出到电机驱动芯片决定电机的正反转。

当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。

单片机系统实现对舵机输出转角的控制,必须首先完成两个任务:

首先是产生基本的PWM周期信号,本设计是产生20ms的周期信号;其次是脉宽的调整,即单片机模拟PWM信号的输出,并且调整占空比。

当系统中只需要实现一个舵机的控制,采用的控制方式是改变单片机的一个定时器中断的初值,将20ms分为两次中断执行,一次短定时中断和一次长定时中断。

这样既节省了硬件电路,也减少了软件开销,控制系统工作效率和控制精度都很高。

具体的设计过程:

例如想让舵机转向左极限的角度,它的正脉冲为2ms,则负脉冲为20ms-2ms=18ms,所以开始时在控制口发送高电平,然后设置定时器在2ms后发生中断,中断发生后,在中断程序里将控制口改为低电平,并将中断时间改为18ms,再过18ms进入下一次定时中断,再将控制口改为高电平,并将定时器初值改为2ms,等待下次中断到来,如此往复实现PWM信号输出到舵机。

用修改定时器中断初值的方法形成了脉冲信号,调整时间段的宽度便可使伺服机灵活运动。

F.电源部分设计

对于此系统的供电问题,由于需要对电机供电,因此需要大电流,传统的线性电源,体积笨重,内阻大,效率低,大电流时驱动负载能力差,因此我们采用了开关电源,内阻小,适合强电流供电。

其电路图如上,通过电路的连接,我们得到了12V(2A)5V(1A)3.5V(1A)三路电源,而且调试成功。

对于此电路有一个亮点就是,电源系统中有两个开关控制电路,一个是对强电的开关控制,另外一个是对变压器副边整流后电压的开关控制以达到稳压目的,普通的稳压管,如果整流后的电压为16V而稳压管是12V则在负载电流为1A时,稳压管的功率是4W,此时稳压管发烫,而且电能浪费,而对于由UA741控制的初步稳压电路可以实现在负载电流为1A使稳压功耗不足1W.

电路原理图如下:

 

G、对单片机的改进设计

在进行实验过程中,由于处理中断较多,我们感觉到51单片机的片内资源不够,增加芯片势必增加电路板的体积。

所以我们最后学习并采用了MSP430的单片机来改进我们的系统。

MSP430F247单片机具有超低功耗、集成高性能的模拟器件、16位RISC结构的CPU、在线编程、多时钟、集成开发环境简单等特点。

片内资源丰富,有ADC,PWM,若干TIME,串行口,WATCHDOG,FLASH,比较器,模拟信号等。

另外在本系统中我们需要应用多路A/D转换功能,本单片机刚好为我们提供了8路A/D转换接口。

同时本单片机具有强大的处理功能,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7种源操作数寻址、4种目的操作数寻址)、简洁的27条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令;有较高的处理速度,在8MHz晶体驱动下指令周期为125ns。

这些特点保证了可编制出高效率的源程序。

低功耗是目前一项很令人关注的性能指标,MSP430系列单片机的电源电压采用的是1.8~3.6V电压。

因而可使其在1MHz的时钟条件下运行时,芯片的电流会在200~400uA左右,时钟关断模式的最低功耗只有0.1uA。

其次是独特的时钟系统设计。

基本时钟系统和锁频环(FLL和FLL+)时钟系统或DCO数字振荡器时钟系统。

由系统时钟系统产生CPU和各功能所需的时钟。

并且这些时钟可以在指令的控制下,打开和关闭,从而实现对总体功耗的控制。

当系统处于省电的备用状态时,用中断请求将它唤醒只用6us。

并且该单片机内的片内可擦写FLASH为我们提供了一个很方便的存储器,即使在掉电的情况下也不会改变内部的数据。

Msp430F247单片机的种种功能刚好满足了我们的需求,正是它的存在,是我们的系统更加完善。

程序清单

A、程序流程

 

B、部分模块驱动程序:

1、液晶驱动:

//************初始化液晶**************//

voidinitLCD(void)

{

Delayms(50);

WR_COM(0x30);

Delay10us(20);

WR_COM(0x30);

Delay10us(5);

WR_COM(0x0c);

Delay10us(20);

WR_COM(0x01);

Delayms(20);

WR_COM(0x06);

WR_COM(0x0c);

CLR();

}

//**********************************清屏********************//

voidCLR(void)

{Busy();

RS_0;

RW_0;

E_1;

_NOP();

P4OUT=0x01;

E_0;

}

//*********************写控制字函数****************************//

voidWR_COM(unsignedcharins)

{

Busy();

RS_0;

RW_0;

E_1;

P4OUT=ins;

E_0;

}

//*********************写数据函数****************************

voidWR_DAT(unsignedchardat)

{

Busy();

RS_1;

RW_0;

E_1;

P4OUT=dat;

E_0;

}

//*********************初始化I/O****************************

voidLCD_port_init(void)

{

P5SEL=0X00;

P4SEL=0X00;

P5DIR|=BIT0;

P5DIR|=BIT1;

P5DIR|=BIT2;

P4DIR=0XFF;

P4OUT=0X00;

initLCD();

}

2、步进电机驱动:

voiddelay1s(void)

{unsignedcharj,k;

for(j=50;j>0;j--)

for(k=100;k>0;k--);

}

main()

{

unsignedchara[8]={0x24,0x35,0x11,0x39,0x28,0x3a,0x12,0x36};

unsignedcharb;

unsignedchari=0;

while(i<=50)

{

for(b=0;b<8;b++)

{

P1=a[b];

delay1s();

i++;}}}

voidpower(floatt/*速度值,保留一位小数*/,unsignedcharm)

{

unsignedchargaodu=0;

ucharb,c,d,e,f,g;

f=m;

while(f)

{

for(c=0;c<5;c++)

{

for(b=8;b>0;b--)

{

g=b-1;

P3OUT=a[g];

power_delay(t);

}

}

f--;

gaodu=m-f;

d=gaodu/10;

e=gaodu%10;

now_hight[9]=d+0x30;

now_hight[10]=e+0x30;

write_char(now_hight,0,1);

}

}

 

voidanti_power(floatt/*速度值,保留一位小数*/,unsignedcharm)

{

unsignedchargaodu=0;

ucharb,c,d,e,f;

f=0;

while(m)

{

for(c=0;c<5;c++)

{

for(b=0;b<8;b++)

{

P3OUT=a[b];

power_delay(t);

}

}

f++;

m--;

gaodu=70-f;

d=gaodu/10;

e=gaodu%10;

now_hight[9]=d+0x30;

now_hight[10]=e+0x30;

write_char(now_hight,0,1);

}

}

voidanti_power_d(floatt/*速度值,保留一位小数*/,unsignedcharm)

{

unsignedchargaodu=0;

ucharb,c,d,e,f;

f=0;

while(m)

{

for(c=0;c<5;c++)

{

for(b=0;b<8;b++)

{

P3OUT=a[b];

power_delay(t);

}

}

f++;

m--;

gaodu=ii-f;

d=gaodu/10;

e=gaodu%10;

now_hight[9]=d+0x30;

now_hight[10]=e+0x30;

write_char(now_hight,0,1);

}

}

3、舵机驱动:

BCSCTL1=0x0;

BCSCTL2=0x88;

do

{

IFG1&=~OFIFG;

for(i=0xff;i>0;i--);

}

while((IFG1&OFIFG)!

=0);

P1DIR=0XFF;

P1SEL=0XFF;

TACTL=0x2d2;

CCTL1=OUTMOD_7;

CCR0=20000;

while

(1)

{

CCR1=2000;

delay();

CCR1=1000;

delay();

4、键盘驱动:

//初始化P1中断

voidKEY_1_init(void)

{

P1DIR=0;

P1SEL=0;

P1DIR|=BIT3;

P1DIR|=BIT5;

P1DIR|=BIT6;

P1DIR|=BIT7;

P1OUT=0X00;

P1IE=0;

P1IES=0;

P1IFG=0;

P1IE|=BIT0;

P1IES|=BIT0;

P1IE|=BIT1;

P1IES|=BIT1;

P1IE|=BIT2;

P1IES|=BIT2;

P1IE|=BIT4;

P1IES|=BIT4;

}

//初始化P2中断+P3

voidKEY_2_init(void)

{

P2DIR=0;

P2SEL=0;

P2IE=0;//禁止P2口中断

P2IES=0XFF;//现在是下降沿触发

P2IFG=0;//标志寄存器清零,无中断请求。

P2IE|=BIT0;

P2IES&=~BIT0;

P2IE|=BIT1;

P2IES&=~BIT1;

P2IE|=BIT2;

P2IES&=~BIT2;

P2IE|=BIT3;

P2IES&=~BIT3;

P2IE|=BIT4;

P2IES|=BIT4;

P2DIR|=BIT5;

P2DIR|=BIT6;

P2DIR|=BIT7;

P2_7_H;//高阻

P3SEL=0;

P3DIR=0XFF;

P6SEL=0;

P6DIR|=BIT3;

//_EINT();

}

intkeyprocess(void)

{

intnp10,np11,np12,np13;

intnres=0;

//P1.5输出低电平

P1OUT=0xd0;

np10=P1IN&BIT0;

if(np10==0)nres=7;

np11=(P1IN&BIT1)>>1;

if(np11==0)nres=1;

np12=(P1IN&BIT2)>>2;

if(np12==0)nres=4;

np13=(P1IN&BIT4)>>4;

if(np13==0)nres=11;//取消键

//P1.6输出低电平

P1OUT=0xb0;

np10=P1IN&BIT0;

if(np10==0)nres=8;

np11=(P1IN&BIT1)>>1;

if(np11==0)nres=2;

np12=(P1IN&BIT2)>>2;

if(np12==0)nres=5;

np13=(P1IN&BIT4)>>4;

if(np13==0)nres=0;

//P1.7输出低电平

P1OUT=0x70;

np10=P1IN&BIT0;

if(np10==0)nres=9;

np11=(P1IN&BIT1)>>1;

if(np11==0)nres=3;

np12=(P1IN&BIT2)>>2;

if(np12==0)nres=6;

np13=(P1IN&BIT4)>>4;

if(np13==0)nres=12;//确定键

P1OUT=0x00;//恢复以前值

for(;;)

{

//读各个管脚的状态

np10=P1IN&BIT0;

np11=(P1IN&BIT1)>>1;

np12=(P1IN&BIT2)>>2;

np13=(P1IN&BIT4)>>4;

if(np10==1&&np11==1&&np12==1&&np13==1)

{//等待松开按键

break;

}

}

returnnres;

}

intkeyscan(void)

{

intnp10,np11,np12,np13;

intnres=0;

for(;;)

{

//读取各个管脚的状态

np10=P1IN&BIT0;

np11=(P1IN&BIT1)>>1;

np12=(P1IN&BIT2)>>2;

np13=(P1IN&BIT4)>>4;

//是否有键被按下

if(np10==0||np11==0||np12==0||np13==0)

{//有键被按下

_NOP()

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 成考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1