大学毕设论文mspf5438在恒压变频供水系统中的应用设计论文.docx
《大学毕设论文mspf5438在恒压变频供水系统中的应用设计论文.docx》由会员分享,可在线阅读,更多相关《大学毕设论文mspf5438在恒压变频供水系统中的应用设计论文.docx(29页珍藏版)》请在冰豆网上搜索。
大学毕设论文mspf5438在恒压变频供水系统中的应用设计论文
项目设计
主题:
MSP430F5438单片机在自动恒压供水系统中的应用
完成时间:
2013.10.30
学生姓名:
刘天月
指导教师:
王庐山
【摘要】:
(中英文)
在自来水供水系统中,恒压供水是系统设计时考虑的一个重要环节。
本文通过MSP430系列单片机作为主控制器,组建并实现了恒压自动调节供水系统,给出了系统工作原理与结构图,阐述了各功能模块的主要功能。
该系统的成功之处在自来水公司供水控制系统中有一定的使用与推广价值。
【关键词】:
恒压供水、MSP430F5438单片机、自来水
【abstract】:
Inthetapwatersupplysystem,constantpressurewatersupplysystemisconsideredanimportantpartindesign.AsthemaincontrollerbasedonMSP430seriesSCM(Singlechipmicrocomputer),formandrealizetheconstantpressureautomaticallyadjustthewatersupplysystem,givesthesystemworkingprincipleandstructure,expoundsthemainfunctionsofeachfunction-module.Thesuccessofthesystemintapwatercompanywatersupplycontrolsystemhasacertainuseandpopularizationvalue.
【keywords】:
Constantpressurewatersupply,MSP430F5438microcontroller,Tapwater
一.引言2
二.MSP430F5438单片机简介2
三.自动恒压变频供水器设计3
1.工作原理3
2.单片机控制设计4
2.1硬件设计4
2.1.1自动恒压供水系统结构框图4
2.1.2核心板电路分析5
2.1.3IPM变频驱动水泵电路分析5
2.1.4AD采集水压电路分析5
2.1.5压力及流量检测电路分析6
2.2软件设计6
2.2.1主程序流程图7
2.2.2编程思想7
四.结束语7
五.附程序清单8
一.
引言
水是生命之源,人类生存和发展都离不开水。
在通常的城市及乡镇供水中,基本上都是靠供水站的电动机带动离心水泵,产生压力使管网中的自来水流动,把供水管网中的自来水送给用户。
但供水机泵供水的同时,也消耗大量的能量,如果能在提高供水机泵的效率、确保供水机泵的可靠稳定运行的同时,降低能耗,将具有重要经济意义。
我国供水机泵的特点是数量大、范围广、类型多,在工程规模上也有一定水平,但在技术水平、工程标准以及经济效益指标等方面与国外先进水平相比,还有一定的差距。
随着城市化建设规模的逐步扩大以及生活水平的不断提高,人们对自来水公司供水的可靠性要求越来越高,尤其是供水水压方面的要求,人们通常都希望水压能够稳定恒压。
由于人工方法不够智能,很难做到实时性调节水压,因此,在现今的供水系统中,传统的人工调节阀门的方法已经逐渐被自动化的设备所取代。
如何保证恒压供水,使供水时随用户需求量的变化,供水系统都能够实时的进行自动调节供水量保证水压的恒定,成为重要的问题。
本文通过MSP430F5438单片机调节,实时自动控制水泵电机的转速,使管网供水口的水压始终保持在预订的值上,从而达到恒压供水的目的。
二.MSP430F5438单片机简介
MSP430系列单片机是美国德州仪器公司研发的一款16位超低功耗单片机[3],因为其具有精简指令集的混合信号处理器,所以称之为混合信号处理器。
该系列单片机具有如下特点:
●处理能力强
MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7种源操作数寻址、4种目的操作数寻址)、简洁的27条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令。
这些特点保证了可编制出高效率的源程序。
●运算速度快
MSP430系列单片机能在25MHz晶体的驱动下,实现40ns的指令周期。
16位的数据宽度、40ns的指令周期以及多功能的硬件乘法器(能实现乘加运算)相配合,能实现数字信号处理的某些算法(如FFT等)。
●超低功耗
MSP430单片机之所以有超低的功耗,是因为其在降低芯片的电源电压和灵活而可控的运行时钟方面都有其独到之处。
首先,MSP430系列单片机的电源电压采用的是1.8-3.6V电压。
因而可使其在1MHz的时钟条件下运行时,芯片的电流最低会在165μA左右,RAM保持模式下的最低功耗只有0.1μA。
其次,独特的时钟系统设计。
在MSP430系列中有两个不同的时钟系统:
基本时钟系统、锁频环(FLL和FLL+)时钟系统和DCO数字振荡器时钟系统。
可以只使用一个晶体振荡器(32768Hz),也可以使用两个晶体振荡器。
由系统时钟系统产生CPU和各功能所需的时钟。
并且这些时钟可以在指令的控制下,打开和关闭,从而实现对总体功耗的控制。
由于系统运行时开启的功能模块不同,即采用不同的工作模式,芯片的功耗有着显著的不同。
在系统中共有一种活动模式(AM)和五种低功耗模式(LPM0~LPM4)。
在实时时钟模式下,可达2.5μA,在RAM保持模式下,最低可达0.1μA。
●片内资源丰富
MSP430系列单片机的各系列都集成了较丰富的片内外设。
它们分别是看门狗(WDT)、模拟比较器A、定时器A0(Timer_A0)、定时器A1(Timer_A1)、定时器B0(Timer_B0)、UART、SPI、I2C、硬件乘法器、液晶驱动器、10位/12位ADC、16位Σ-ΔADC、DMA、I/O端口、基本定时器(BasicTimer)、实时时钟(RTC)和USB控制器等若干外围模块的不同组合。
其中,看门狗可以使程序失控时迅速复位;模拟比较器进行模拟电压的比较,配合定时器,可设计出A/D转换器;16位定时器(Timer_A和Timer_B)具有捕获/比较功能,大量的捕获/比较寄存器,可用于事件计数、时序发生、PWM等;有的器件更具有可实现异步、同步及多址访问串行通信接口可方便的实现多机通信等应用;具有较多的I/O端口,P0、P1、P2端口能够接收外部上升沿或下降沿的中断输入;10/12位硬件A/D转换器有较高的转换速率,最高可达200kbps,能够满足大多数数据采集应用;能直接驱动液晶多达160段;实现两路的12位D/A转换;硬件I2C串行总线接口实现存储器串行扩展;以及为了增加数据传输速度,而采用的DMA模块。
MSP430系列单片机的这些片内外设为系统的单片解决方案提供了极大的方便。
另外,MSP430系列单片机的中断源较多,并且可以任意嵌套,使用时灵活方便。
当系统处于省电的低功耗状态时,中断唤醒只需5μs。
●方便高效的开发环境
MSP430系列有OTP型、FLASH型和ROM型三种类型的器件,这些器件的开发手段不同。
对于OTP型和ROM型的器件是使用仿真器开发成功之后烧写或掩膜芯片;对于FLASH型则有十分方便的开发调试环境,因为器件片内有JTAG调试接口,还有可电擦写的FLASH存储器,因此采用先下载程序到FLASH内,再在器件内通过软件控制程序的运行,由JTAG接口读取片内信息供设计者调试使用的方法进行开发。
这种方式只需要一台PC机和一个JTAG调试器,而不需要仿真器和编程器。
开发语言有汇编语言和C语言。
三.自动恒压变频供水器设计
1.工作原理:
变频调速恒压供水与水塔或楼顶的高位水箱供水相比,具有投资省、节约能源、水质遭二次污染的机会少等优点,越来越多的城市和生活小区已经或正打算采用变频调速恒压供水。
变频调速恒压供水系统构成(如图1):
图一:
变频调速恒压供水系统构成
Frequencyconversionvelocitymodulationconstantpressurewatersupplysystem
其工作原理是:
控制器通过检测实际水压值,比较设定水压值和实际水压值的差别,控制器按规律运算后,输出控制信号至变频器,变频器则根据控制器的输入信号调节水泵电机的供电电压和频率。
当用水量增加时,控制器控制变频器使电动机的电压和频率加大,水泵转速升高,出水量增加;当用水量减少时,控制器控制变频器使电动机的电压和频率降低,水泵转速下降,出水量减少。
通过这种控制方式,就可以使自来水管道压力保持在设定值上。
由于变频器的价格较高,变频调速恒压供水系统通常采用多台水泵并联运行,几台水泵共用一台变频器。
工作时,控制器根据用水量的大小,控制配电系统自动选择所需投入运行的水泵数量,一般方法是保持其中一台水泵处于变频器控制下,其它水泵则根据供水量的变化,在工频下全速运行或停机待命。
2.单片机控制器设计:
2.1硬件设计
核心板通过压力和流量传感器采集出水口水压和流量的变化,然后再与与设定值比较,如果和设定值有偏差就通过IPM变频模块控制电机的电压及频率,从而改变水泵的转速,达到调节水压和流量的目的。
2.1.1自动恒压供水系统结构框图
自动恒压供水系统结构框图
Automaticconstantpressurewatersupplysystemstructurediagram
2.1.2核心板电路分析
核心板电路主要包括CPU(MSP430F5438)、电源电路、时钟电路、LCD液晶显示、按键部分、串口下载电路、复位电路。
2.1.3IPM变频驱动水泵电路分析
通过MSP430F5438单片机数出脉冲改变水泵的驱动电压大小及频率,从而改变水泵的转速,实现对水压和流量的控制。
IPM驱动电路原理图如下:
IPM驱动电路原理图
IPMdrivecircuitprinciplediagram
2.1.4AD采集水压电路分析
本设计采用ADS1118转换芯片,当水压大小发声变化时,信号采集部分根据水压大小输出相应电压变化到单片机,单片机通过内部AD对信号进行运算,调节输出水压的大小。
AD转换部分原理图如下:
AD采集水压电路
ADcollectionhydrauliccircuit
2.1.5压力及流量检测电路分析
压力及流量检测传感器采集水压和流量的变化,转换成相应的电压变化和脉冲频率变化,然后送到单片机进行处理。
压力及流量检测电路如下:
压力及流量检测电路
Pressureandflowdetectioncircuit
2.2软件设计
2.2.1主程序流程图
主程序流程图
Themainprogramflowchart
2.2.2编程思想:
分析电路功能,明白各个模块电路的作用;
程序模块化调试,这是保证调理清楚的必要手段;
组合模块程序,分析各个模块的关联及影响;
整机调试,测试整体功能的实现,分析存在的问题并解决;
程序调试完成。
四.结束语
采用MsP430系列单片机作为主控制器来实现供水系统的自动恒压,自动调节水压使供水系统压力稳定,同时,使用MSP430系列单片机提高了系统的控制可靠性和抗干扰性。
在节约成本的同时,也进一步保证了系统安全稳定的运行。
该系统融合了单片机控制技术、反馈控制技术和电机调节技术等,在自来水公司供水控制系统中有一定的使用与推广价值。
五.附程序清单:
/*LCD:
PSBSelectParalleltransmitmodeby100ΩtoVCCOnPCBboard
*P3.0------RS
*P3.4------EN
*P3.5------RW
*P11.0------RST
*P8------Data
*
*/
#include"msp430x54xA.h"
//#include"BoardConfigure.h"
#include"public.h"
#defineucharunsignedchar
#defineuintunsignedint
/*******************************************************************/
/**/
/*检查LCD忙状态*/
/*lcd_busy为1时,忙,等待。
lcd-busy为0时,闲,可写指令与数据。
*/
/**/
/*******************************************************************/
voidDelay_ms(uintt)//50ms
{
intj;
for(;t>0;t--)
for(j=6245;j>0;j--);
}
voidDelay_us(uintt)//50us
{
uintj;
for(;t>0;t--)
for(j=19;j>0;j--);
}
unsignedcharLCD_Busy()
{
unsignedcharResult;
LCD_RS_L;
LCD_RW_H;
LCD_EN_H;
Delay_us(400);
LCD_DataIn;//DataSelectInput
Result=P8IN&0x80;
LCD_EN_L;
returnResult;
}
/*******************************************************************/
/**/
/*写指令到LCD*/
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。
*/
/**/
/*******************************************************************/
voidLCD_WriteCommand(unsignedcharCmd)
{
while(LCD_Busy());//Busycheck
LCD_RS_L;
LCD_RW_L;
LCD_EN_L;
Delay_us(10);
Delay_us(10);
LCD_DataOut;
P8OUT=Cmd;
//P0=Cmd;
Delay_us(10);
LCD_EN_H;
Delay_us(10);
LCD_EN_L;
}
/*******************************************************************/
/**/
/*写显示数据到LCD*/
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。
*/
/**/
/*******************************************************************/
voidLCD_WriteData(unsignedcharDat)
{
while(LCD_Busy());//Busycheck
LCD_RS_H;
LCD_RW_L;
LCD_EN_L;
LCD_DataOut;
P8OUT=Dat;
//P0=Dat;
Delay_us(10);
LCD_EN_H;
Delay_us(10);
LCD_EN_L;
}
/*******************************************************************/
/**/
/*LCD初始化设定*/
/**/
/*******************************************************************/
voidLCD_Init()
{
LCD_RST_L;//液晶复位
Delay_ms(3);
LCD_RST_H;
Delay_ms(3);
LCD_WriteCommand(0x34);//扩充指令操作
Delay_ms
(1);
LCD_WriteCommand(0x30);//基本指令操作
Delay_ms
(1);
LCD_WriteCommand(0x0C);//显示开,关光标
Delay_ms
(1);
LCD_WriteCommand(0x01);//清除LCD的显示内容
Delay_ms
(1);
}
//*********************************************************/
//**/
//*设定汉字显示位置
//eg:
LCD_Position(4,0);----表示从第四行的第0个字符开始写*/
//--------------------------即从第四行的第0个字开始写
//eg:
LCD_Position(4,1);----表示从第四行的第2个字符开始写*/
//--------------------------即从第四行的第1个字开始写
/**/
/*********************************************************/
voidLCD_Position(unsignedcharX,unsignedcharY)
{
unsignedcharPos;
if(X==1)X=0x80;
elseif(X==2)X=0x90;
elseif(X==3)X=0x88;
elseif(X==4)X=0x98;
Pos=X+Y;
LCD_WriteCommand(Pos);//显示地址
}
/*********************************************************
**
*闪烁函数*
**
*********************************************************/
voidLCD_Flash()
{
LCD_WriteCommand(0x08);//closedisplay
Delay_ms(400);
LCD_WriteCommand(0x0c);//opendisplay
Delay_ms(400);
LCD_WriteCommand(0x08);
Delay_ms(400);
LCD_WriteCommand(0x0c);
Delay_ms(400);
LCD_WriteCommand(0x08);
Delay_ms(200);
LCD_WriteCommand(0x0c);
Delay_ms(5);
LCD_WriteCommand(0x01);//cleardisplay
Delay_ms(5);
}
/**********************************************************
;显示字符表代码
**********************************************************/
voidLCD_Char_Display()
{
unsignedchars;
LCD_Clear_Screen();//清屏
LCD_WriteCommand(0x80);//设置显示位置为第一行
for(s=0;s<16;s++)
{
LCD_WriteData(0x30+s);
}
LCD_WriteCommand(0x90);//设置显示位置为第二行
for(s=0;s<16;s++)
{
LCD_WriteData(0x40+s);
}
LCD_WriteCommand(0x88);//设置显示位置为第三行
for(s=0;s<16;s++)
{
LCD_WriteData(0x50+s);
}
LCD_WriteCommand(0x98);//设置显示位置为第四行
for(s=0;s<16;s++)
{
LCD_WriteData(0x60+s);
}
}
/*********************************************************
**
*清屏函数*
**
*********************************************************/
voidLCD_Clear_Screen()
{
LCD_WriteCommand(0x34);//扩充指令操作
Delay_ms(5);
LCD_WriteCommand(0x30);//基本指令操作
Delay_ms(5);
LCD_WriteCommand(0x01);//清屏
Delay_ms(5);
}
voidLCD_GPIO_Init()
{
//Liquid12864withwordlibpindefine
P3DIR|=BIT0+BIT4+BIT5;//RS,RW,ENSelectoutput
P3OUT|=BIT0+BIT4+BIT5;
P11DIR|=BIT0;//RSTSelectoutput
P11OUT|=BIT0;
P8DIR|=0xFF;//LCD_Data,Selectoutput
}
voidInit_Clock(void)
{
unsignedinti;
WDTCTL=WDTPW+WDTHOLD;//Stopwatchdogtimer
//P11DIR=BIT0+BIT1+BIT2;//P11.1-2tooutputdirection
//P11SEL|=BIT0+BIT1+BIT2;//P11.1-2tooutputSMCLK,MCLK
P5SEL|=0x0C;//PortselectXT2
UCSCTL6&=~XT2OFF;//Ena××eXT2evenifnotused
UCSCTL3|=SELREF_2;//FLLref=REFO
UCSCTL4|=SELA_2;//辅助系统时钟来源REFO
UCSCTL4|=S