㈠ 裸跪求 :基于单片机MSP430带通数字滤波生成代码,采样频率为300HZ
基于MSP430的温度采集报警系统的毕槐如指业论文.doc
文档名称:基于MSP430的温度采集报警系统的毕业论文.doc
格式:doc 大小:3.28MB 总页数:57
展开↓
更多功能
免费预览本文档(全文)
下载敬告:
本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔... 展开↓
文档介绍:
XXXXXXXXXX 本科生毕业设计(论文)
学 院:XXXXXXXXXXXXXXX
专 业: 自动化
学 生: XXX
指导教师: XXXXXXXX
完成日期:XXXXXXXXXXXXXXX
基于MSP430单片机温度测量系统设计
总计 毕业设计(论文) 47 页 表格 6 个
插图 19 幅摘 要
温度控制仪表具有广泛的应用前景,在各种行业中都占有重要的位置,越来越多的领域应用到以单片机为控制核心,用液晶显示作为显示终端的数字化控制设备,通过单片机对被控对象进行智能控制。
本设计是从降低开发成本、扩大适用铅配范围、系统运行的稳定性、可靠性的设计目的出发,采用MSP430F149单片机为控制核心、以单线数字温度传感器DS18B20来完成温度信号的采集、温度以数宇的方式显示在LCD1602液晶上,最终实现温度的采集、显示。并重点阐述了系统的硬件构成和软件编程的设计过程。其中硬件构成有六部分:电源及复位模块、采集模块、报警模块、键盘输入模块和显示模块。
MSP430F149是一种16位内含FLASH型芯片的单片机,具有高速运算、开发设备橡迹简便、可现场编程等特点,这给控制系统的设计带来了极大的便利性。各个模块的电路原理图都由protel来完成。
关键词:MSP430F14
㈡ 怎么用MSP430来读取DS18B20的温度
我的led是用74164驱动的!我把程序段给你吧:#;typedefunsignedintuint;ucharseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//升级板段码表(共阴极正常)ucharseg1[]={0XBF,0X86,0XDB,0XCF,/*0.1.2.3.*/0XE6,0XED,0XFD,0X87,/*4.5.6.7.*/0XFF,0XEF/**8.9.*/};//升级板带小数点的段码/*****1820的数据口和方向宏定义*******/#defineDQ1P5OUT|=BIT5#defineDQ0P5OUT&=~BIT5#defineDQINP5DIR&=~BIT5#defineDQOUTP5DIR|=BIT5/****数码管数据时钟的宏定义***********/#defineDATA1P5OUT|=BIT0#defineDATA0P5OUT&=~BIT0#defineCLK1P5OUT|=BIT1#defineCLK0P5OUT&=~BIT1/*******液晶端口初始化*******/#defineoutP3DIR|=BIT0+BIT1+BIT2#definelcd_en1P3OUT|=BIT2#definelcd_en0P3OUT&=~BIT2#definelcd_rw1P3OUT|=BIT1#definelcd_rw0P3OUT&=~BIT1#definelcd_rs1P3OUT|=BIT0#definelcd_rs0P3OUT&=~BIT0unsignedchartable1[8]="08:50:16";unsignedchartable2[]="TINGTING";voiddelay(unsignedinti);unsignedcharInit_DS18B20(void);unsignedcharReadOneChar(void);voidWriteOneChar(unsignedchardat);voidReadTemperature(void);uintt;floattemp;floatTemper=0.0;unsignedinttemperature=0;/**********//*延时子程序*/拍谨//调用8个时钟周期,返回6个,循环4个//总周期个数为:8+6+4*n=14+4*n个时钟周期//默认800k时钟,所以周期为1.25us公式修正:17.5+5*n=定时时间voiddelay(unsignedintx)//延时{unsignedinti;i=x;for(;i>0;i--);}/*************显示模块部分*********/voidinit_port(void)//端口初始化{P5SEL=0;P5DIR=0;P5DIR|=BIT0+BIT1+BIT5;return;}voidclk(void)//时钟子程族举序{CLK1;delay(10);CLK0;delay(10);return;}voidled_off(void)//熄灭所有led{inti;for(i=0;i>1;DQOUT;//设定为输出DQ0;//DQ1;//可有可无的DQIN;if((P5IN&BIT5)==0){temp=temp&0x7F;}//先读的是低位,高位后渎出来else{temp=temp|0x80;}delay(8);//延时60us}returntemp;}voidWriteOneChar(unsignedcharn){unsignedchari;DQOUT;for(i=0;i>1;delay(7);//延时45us以上兆贺碧DQ1;//?}}voidReadTemp(void){chartemp_low,temp_high;//温度值temp_low=ReadOneChar();//读低位temp_high=ReadOneChar();//读高位_NOP();//temperature=(temp_high&0x0f);temperature=temp_high;temperature=35){P5OUT|=BIT4;//报警delay(50000);delay(50000);}elseP5OUT&=~BIT4;t=Temper*10;//设置的变量,以便看结果led_off();dataout(seg[t%10]);dataout(seg1[(t/10)%10]);//带小数点段码dataout(seg[t/100]);dataout(seg[10]);dataout(seg[10]);dataout(seg[10]);dataout(seg[10]);dataout(seg[10]);//delay(50000);transfer();write_ling(0x80+5);delay(40);for(a=0;a<4;a++){write_data(table1[a]);delay(100);}write_ling(0xc0+3);delay(50);for(a=0;a<9;a++){write_data(table2[a]);delay(60);}}}
㈢ 发现一个见鬼的问题,我使用的单片机是MSP430F5525,用的温度传感器为DS18B20,采集的数一直为0XFFFF
DS18B20为一线式温度传感器,单片机用一个I/O口与其通信采集数据,这是一个51单片机的仿真例程可以参考一下。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P1^4; //ds18b20与单片机连接口
unsigned char code str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40} ; //共阴数码管字码表
unsigned char code str1[]={0x0bf,0x86,0x0db,0x0cf,0x0e6,0x0ed,0x0fd,0x87,0x0ff,0x0ef}; //个位带小数点字码表
unsigned char code wei[]={0x0fe,0x0fd,0x0fb,0x0f7};
uchar data disdata[5];
uint tvalue; //温度值
uchar tflag; //温度正负标志 液粗唯
/**********ds1820程序************/
void delay_18B20(unsigned int i) //延时1微秒
{
while(i--);凳李
}
void ds1820rst() /*ds1820复位*/
{
unsigned char x=0;
DQ = 1; //DQ复位
delay_18B20(4); //延时
DQ = 0; //DQ拉低
delay_18B20(100); //精确延时大于 480us
DQ = 1; //拉高
delay_18B20(40);
}
uchar ds1820rd() /*读数据*/
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; //给脉冲信号
dat>>=1;
DQ = 1; //给脉冲信号
if(DQ) dat|=0x80;
delay_18B20(10);
}
return(dat);
}
void ds1820wr(uchar wdata) /*写数据*/
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = wdata&0x01;
delay_18B20(10);
DQ = 1;
wdata>>=1;
}
}
read_temp() /*读取温度值并转换*/
{
uchar a,b;
ds1820rst();
ds1820wr(0xcc); // 跳过读序列号
ds1820wr(0x44); // 启动温度转换
ds1820rst();
ds1820wr(0xcc); // 跳过读序列号
ds1820wr(0xbe); // 读取温度
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
{
tvalue=~tvalue+2; tflag=1; //负温度
}
tvalue=tvalue*(0.625); //温度值扩大10倍,精确到1位小数
return(tvalue);
}
/*********************************/
void ds1820disp() //温度闹培值显示
{
uchar i;
disdata[0]=tvalue/1000; //百位数
disdata[1]=tvalue%1000/100; //十位数
disdata[2]=tvalue%100/10; //个位数
disdata[3]=tvalue%10; //小数位
if(tflag==0)
{
if(disdata[0]==0x00)
{
disdata[0]=0x0a; //百位数位为0不显示
if(disdata[1]==0x00) disdata[1]=0x0a; //十位数位为0不显示
}
}
else //负温度
{
disdata[0]=0x0b; //负温度百位显示负号:-
if(disdata[1]==0x00) disdata[1]=0x0a; //十位数位为0不显示
}
for(i=0;i<150;i++)
{
P2=wei[0];
P0=str[disdata[0]];
delay_18B20(20);
P2=wei[1];
P0=str[disdata[1]];
delay_18B20(20);
P2=wei[2];
P0=str1[disdata[2]];
delay_18B20(20);
P2=wei[3];
P0=str[disdata[3]];
delay_18B20(20);
}
}
/************主程序**********/
void main()
{
ds1820rst(); //初始化显示
while(1)
{
read_temp(); //读取温度
ds1820disp(); //显示
}
}
㈣ MSP430单片机温控系统中,外部温度传感器读到的电压值如何转换为我想要的温度值,用液晶显示
一、用自带 ADC 加温度系数电阻,通常是负温度系数电阻。
首先要校准温度,用温度计测试室温,然后采集你当前的电压值, 然后升高温度测试第二组温度和电压值,不需要太精准的话 就可以算出斜率。 TEP= A*斜率+B AB的值可以用室温的值计算出来。
二、采用已经封装好的数字温度传感器,可以直接读出温度值。这个相对比较简单。做I2C协议或者1WIRE的协议就可以、
三、加热问题,一般是用GPIO控制继电器,控制电热丝加热。 单片机一般只有3.3V 电压低电流大不适合做加热。 一般用大电压,在相同的功率下,电流小。
有其他的问题再发站内信
㈤ 基于单片机msp430和温度传感器ds18b20的水温度控制系统的c语言源程序(不是测量,要有加热跟制冷)
我这是用STC做的,应该很容易移植到MPS430上的给你参考一下。
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit scl=P1^3;
sbit sda=P1^4;
sbit key1=P1^6;
sbit key2=P1^7;
sbit key3=P2^0;
sbit key4=P2^1;
sbit lcrs=P3^7;//数据/命令
sbit lcwr=P3^5;//读/写
sbit lcden=P3^4;//使能
sbit DS=P2^2;
/*sbit lcrs=P3^4;//数据/命令
sbit lcwr=P3^7;//读/写
sbit lcden=P3^5;//使能
*/
sbit jrk=P2^2;
sbit cyk=P2^3;
sbit xhk=P2^4;
bit flag=0,rsg=0,not=0,he=0,in=0;
int acon=0,bcon=0,dcon=0,econ=0,
temp=0,y=0,j=0,l=0,cfj=0,ec=0,dc=0,at;
uchar code table[]={48,49,50,51,52,53,54,55,56,57};
uchar code ta1[]={"Temperature UP"};
uchar code ta2[]={"Temperature DN"};
uchar code ta3[]={"Inflator Cycle"};
uchar code ta4[]={"Inflator Time "};
uchar code ta5[]={" Heating UP "};
uchar code ta6[]={" Inflator "};
uchar code table7[]={"Temperature"};
uchar table1[]={0,0,0,'.',0};
uchar table3[]={"AptitudeAquarium"};
uchar table4[]={0,0,0,0,0};
uchar n,c=0;
void delay(uchar);
void wen_kong();
void xh();
void rso();
void weno();
void Init_Com(void)
{
TMOD = 0x11;
PCON = 0x00;
TH1=0x61;
TL1=0x99;
EA=1;
ET1=1;
TR1=1;
}
void delay(uchar count) //delay
{
uint i;
while(count)
{
i=200;
while(i>0)
i--;
count--;
}
}
////初始化18B20/////////
bit init18b20(void)
{
uint i;
bit no;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
no=DS;
if(no==0)
{
DS=1;
i=100;
while(i>0)i--;
no=DS;
if(no==1)
not=0;
else
not=1;
}
else
not=1;
return (not);
}
bit tmpreadbit(void) //读一位
{
uint i;
bit dat;
DS=0;
i++;
DS=1;
i++;i++;
dat=DS;
i=8;while(i>0)i--;
return (dat);
}
uchar tmpread(void) //读一个字节
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里
}
return(dat);
}
void tmpwritebyte(uchar dat) //写一个字节到 ds18b20
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //write 1
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0; //write 0
i=8;
while(i>0)i--;
DS=1;
i++;i++;
}
}
}
int tmp() //DS18B20温度读取
{
float tt;
int a,b;
if(init18b20()==0)
{
WDT_CONTR=0x36; /////喂狗
EA=0;
delay(1);
tmpwritebyte(0xcc); // 跳过读ROM操作
tmpwritebyte(0x44); // 启动温度转换
delay(10);
init18b20();
delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();
b=tmpread();
temp=b;
temp<<=8; //将高字节温度数据与低字节温度数据整合
temp=temp|a;
c=b>>4;
tt=temp*0.0625;
temp=tt*10+0.5; //放大10倍输出并四舍五入
EA=1;
return temp;
}
else
not=1;
}
//////1062/////////
void ydelay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=10;b>0;b--);
}
void write_com(uchar com)
{
P0=com;
lcwr=0;
lcrs=0;
lcden=0;
ydelay(10);
lcden=1;
ydelay(10);
lcden=0;
lcwr=1;
}
void write_date(uchar date)//写数据
{
P0=date;
lcwr=0;
lcrs=1;
lcden=0;
ydelay(10);
lcden=1;
ydelay(10);
lcden=0;
lcwr=1;
}
void init1602()//初始化
{
write_com(0x38);//设置显示模式
ydelay(20);
write_com(0x0c);//开显示
ydelay(20);
write_com(0x06);//指针和光标自动加一
ydelay(20);
write_com(0x01);//清屏指令
ydelay(20);
}
///////显示程序//////
void display(int num)
{
uint i,A1,A2;
WDT_CONTR=0x35; /////喂狗
if(c!=0)
num=~num+1;
A1=num/1000;
A2=num%1000/100;
if(not==0)
{
if(c!=0)
{
c=0;
table1[0]='-';
}
else if(A1==0)
table1[0]=' ';
else
table1[0]=table[A1];
if(A1==0)
if(A2==0)
table1[1]=' ';
else
table1[1]=table[A2];
table1[2]=table[num%1000%100/10];
table1[4]=table[num%1000%100%10];
}
else
{
table1[0]='?';
table1[1]='?';
table1[2]='?';
table1[4]='?';
}
write_com(0x80);
for(i=0;i<11;i++)
{write_date(table7[i]);
delay(2);}
write_com(0x8b);
for(i=0;i<5;i++)
{write_date(table1[i]);
delay(2);}
write_com(0xc0);
for(i=0;i<16;i++)
{
if(he==1)
write_date(ta5[i]);
else if(in==1)
write_date(ta6[i]);
else
write_date(table3[i]);
}
c=0;
WDT_CONTR=0x35; /////喂狗
}
////显示2////////////////////
display2(uchar bh,int dat)
{
uchar a,A,B;
WDT_CONTR=0x35; /////喂狗
//write_com(0x01);//清屏指令
y=dat;
y=y&0x8000;
if(y!=0)
dat=~dat+1;
A=dat/1000;
B=dat%1000/100;
if((bh!=4)&&(bh!=5))
{
if(A!=0)
table4[0]=table[dat/1000];
else if((c!=0)||(y!=0))
{
c=0;y=0;
table4[0]='-';
}
else
table4[0]=' ';
if(B!=0)
table4[1]=table[B];
else
table4[1]=' ';
table4[2]=table[dat%1000%100/10];
table4[3]='.';
table4[4]=table[dat%1000%100%10];
}
else
{
table4[0]=' ';
if((c!=0)||(y!=0))
{
c=0;y=0;
table4[1]='-';
}
else
table4[1]=' ';
table4[2]=' ';
table4[3]=table[dat%1000%100/10];
table4[4]=table[dat%1000%100%10];
}
write_com(0xc4);
delay(2);
for(a=0;a<5;a++)
write_date(table4[a]);
delay(2);
write_com(0x80);
switch(bh)
{
case 1:for(a=0;a<14;a++)write_date(ta1[a]);break;
case 2:for(a=0;a<14;a++)write_date(ta2[a]);break;
case 3:for(a=0;a<14;a++)write_date(ta3[a]);break;
case 4:for(a=0;a<14;a++)write_date(ta4[a]);break;
default:break;
}
}
///////////x24c02//////////////////
void delay24()
{ ;; }
void init24c02() //初始化
{
sda=1;
delay24();
scl=1;
delay24();
}
void start() //开始信号
{
sda=1;
delay24();
scl=1;
delay24();
sda=0;
delay24();
}
void stop() //停止
{
sda=0;
delay24();
scl=1;
delay24();
sda=1;
delay24();
}
void respons() //应答
{
uchar i;
scl=1;
delay24();
while((sda==1)&&(i<250))i++;
scl=0;
delay24();
}
void write_byte(uchar date) // 写数据子函数
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay24();
sda=CY;
delay24();
scl=1;
delay24();
}
scl=0;
delay24();
sda=1;
delay24();
}
uchar read_byte() // 读数据子函数
{
uchar i,k;
scl=0;
delay24();
sda=1;
delay24();
for(i=0;i<8;i++)
{
scl=1;
delay24();
k=(k<<1)|sda;
scl=0;
delay24();
}
return k;
}
///////写数据函数///////////////////
void write_add(uchar address,uint date)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date/256);
respons();
write_byte(date%256);
respons();
stop();
}
uchar read_add(uchar address) //读数据函数
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return date;
}
void delay1ms(uchar ms)
{
uchar i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
int keyf(int *num,int up,int dn)
{
uint i;
uchar z;
for(i=0;i<600;i++)
{
display2(n,*num);
if(key1==0)
{
delay1ms(30);
if(key1==0)
{
i=0;
n++;
if(n>=9)
n=0;
while(!key1)
display2(n,*num);
break;
}
}
if(key2==0)
{
delay1ms(10);
if(key2==0)
{
i=0;
if(*num>=up)
*num=up;
else if(n!=4)
*num=*num+1;
else if(*num<100)
*num=*num+5;
else
*num=*num+10;
for(z=0;z<65;z++)
{
display2(n,*num);
if(key2!=0)
break;
}
while(!key2)
{
for(z=0;z<2;z++)
display2(n,*num);
if(*num>=up)
*num=up;
else if(n!=4)
*num=*num+1;
else if(*num<100)
*num=*num+5;
else
*num=*num+10;
}
}
}
if(key3==0)
{
delay1ms(10);
if(key3==0)
{
i=0;
if(*num<=dn)
*num=dn;
else if(n!=4)
*num=*num-1;
else if(*num<100)
*num=*num-5;
else
*num=*num-10;
for(z=0;z<65;z++)
{
display2(n,*num);
if(key3!=0)
break;
}
while(!key3)
{
for(z=0;z<2;z++)
display2(n,*num);
if(*num<=dn)
*num=dn;
else if(n!=4)
*num=*num-1;
else if(*num<100)
*num=*num-5;
else
*num=*num-10;
}
}
}
}
return(*num);
}
void keyjc()
{
uchar i=0;
if(key1==0)
{
delay1ms(10);
if(key1==0)
{
EA=0;
for(i=0;i<20;i++)
{
display(tmp());
}
if(key1==0)
{
write_com(0x01);//清屏指令
n++;
if(n>=5)
n=0;
while(!key1)
{
switch(n)
{
case 1:display2(n,acon);break;
case 0:break;
}
}
if(n==1)
{
keyf(&acon,1250,-530);
if((acon-bcon)<3)
bcon=acon-3;
}
if(n==2)
{
keyf(&bcon,1240,-550);
if((acon-bcon)<3)
acon=bcon+3;
}
write_add(1,acon);//A
delay1ms(15);
write_add(3,bcon);//B
n=0;
write_com(0x01);//清屏指令
}
EA=1;
}
}
}
key()
{
uint i;
if(key4==0)
delay1ms(50);
if(key4==0)
{
write_com(0x01);//清屏指令
for(i=0;i<500;i++)
{
if(key4==0)
{
delay1ms(15);
if(key4==0)
{
i=0;
n++;
if(n>=5)
n=0;
while(!key4)
{
switch(n)
{
case 1: display2(1,acon);break;
case 2: display2(2,bcon);break;
default: break;
}
}
}
}
switch(n)
{
case 1: display2(1,acon);break;
case 2: display2(2,bcon);break;
default: break;
}
}
n=0;
}
}
///////滤波////////
int filter()
{
int tm,buf[6];
uchar i,j;
EA=0;
for(i=0;i<6;i++)
{
buf[i]=tmp();
delay1ms(20);
WDT_CONTR=0x35; /////喂狗
}
for(j=0;j<5;j++)
for(i=0;i<5-j;i++)
if(buf[i]>buf[i+1])
{
tm=buf[i];
buf[i]=buf[i+1];
buf[i+1]=tm;
}
tm=((buf[2]+buf[3])/2);
EA=1;
return (tm);
}
void main()
{
uchar b,c;
Init_Com();
init1602();
init24c02();
b=read_add(1);
delay1ms(15);
c=read_add(2);
delay1ms(15);
acon=b*256+c;
b=read_add(3);
delay1ms(15);
c=read_add(4);
delay1ms(15);
bcon=b*256+c;
AUXR=0x01;// 禁止ALE输出
WDT_CONTR=0x35; //启动看门狗
write_com(0x01);//清屏指令
while(1)
{
at=filter();
display(at);
keyjc();
key();
wen_kong();
weno();
}
}
//////温度控制//////////////
void wen_kong()
{
if((flag==0)&&(not==0))
{
at=filter();
if(at<=bcon)
{
flag=1;
jrk=0;
xhk=0;
he=1;
}
}
}
void weno()
{
if(flag)
{
at=filter();
if(at>=acon)
{
flag=0;
jrk=1;
if(rsg)
xhk=0;
else
xhk=1;
he=0;
}
}
if(not==1)
{
flag=0;
jrk=1;
if(rsg)
xhk=0;
else
xhk=1;
he=0;
}
}
㈥ 基于单片机温度测量与控制 毕业论文
摘要
本设计的温度测量计加热控制系统以AT89S52单片机为核心部件,外加温度采集电路、键盘显示电路、加热控制电路和越限报警等电路。采用单总梁圆线型数字式的温度传感器DSI8B20,及行列式键盘和动态显示的方式,以容易控制的固态继电器作加热控制的开关器件。本作品既可以对当前温度进行实时显示又可以对温度进行控制,以使达到用户需要的温度,并使其恒定再这一温度。人性化的行列式键盘设计使设置温度简单快速,两位整数一位小数的显示方式具有更高的显示精度。建立在模糊控制理论控制上的控制算法,是控制精度完全能满足一般社会生产的要求。通过对系统软件和硬件设计的合理规划,发挥单片机自身集成众多系统及功能单元的优势,再不减少功能的前提下有效的降低了硬件的成本,系统操控更简便。
实验证明该温控系统能达到0.2℃的静态误差,0.45℃的控制精度,以及只有0.83%的超调量,因本设计具有很高的可靠性和稳定性。
关键词:单片机 恒温控制 模糊控制
引言
温度是工业控制中主要的被控参数之一,特别是在冶金、化工、建材、食品、机械、石油等工业中,具有举足重轻的作用。随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的应用。 采用单片机来对温度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。MSP430系列单片机具有处理能强、运行速度快、功耗低等优点,应用在温度测量与控制方面,控制简单方便,测量范围广,精度较高。
温度传感器将温度信息变换为模拟电压信号后,将电压信号放大到单片机可以处理的范围内,经过低通滤波,滤掉干扰信号送入单片机。在单片机中对信号进行采样,为进一步提高测量精度,采样后对信号再进行数字滤波。单片机将检测到的温度信息与设定值进行比较,如果不相符,数字调节程序根据给定值与测得值的差值按PID控制算法设计控制量,触发程序根据控制量控制执行单元。如果检测值高于设定值,则启动制冷系统,降低环境温度;如果检测值低于设定值,则启动加热系统,提高环境温度,达到控制温度的目的。
图形点阵式液晶可显示用户自定义的任意符号和图形,并可卷动显示,它作为便携式单片机系统人机交互界面的重要组成部分被广泛应用于实时检测和显示的仪器仪表中。支持汉字显示的图形点阵液晶在现代单片机应用系统中是一种十分常用的显示设备,汉字BP机、手机上的显示屏就是图形点阵液晶。它与行列式小键盘组成了现代单片机应用系统中最常用的人机交互界面。
本文设计了一种基于MSP430单片机的温度测量和控制装置,能对环境温度进行测量,并能根据温度给定值给出调节量,控制执行机构,实现调节环境温度的目的。
━、硬件设计
1:MSP430系列单片机简介及选型
单片机即微控制器,自其开发以来,取得了飞速的发展。单片机控制系统在工业、交通、医疗等领域的应用越来越广泛,在单片机未开发之前,电子产品只能由复杂的模拟电路来实搏枯现,不仅体积大,成本高,长期使用后元件老化,控制精度大大降低,单片机开发以后,控制系统变为智能化了,只需要在单片机外围接一点简单的接口电路,核心部分只是由人为的写入程序来完橡银塌成。这样产品体积变小了,成本也降低了,长期使用也不会担心精度达不到了。特别是嵌入式技术的发展,必将为单片机的发展提供更广阔的发展空间,近年来,由于超低功耗技术的开发,又出现了低功耗单片机,如MSP430系列、ZK系列等,其中的MSP430系列单片机是美国德州仪器(TI)的一种16位超低功耗单片机,该单片机
㈦ 用pt100电阻测-40~200度的温度。用msp430 2012的单片机。工作电压是3.6~2v,所以运放也要求是低压的,
430是拦配16位单片机,用简告指它不划算。建议你用C8051F300,其自身就友橡内直有温度传感器,ADC与DAC,采用MLP11脚封装(3x3mm)。
㈧ 基于Msp430f5529单片机的cpu温度计,并实时显示在液晶屏上
病毒、木马造成
大量的蠕虫病毒在系统内部迅握烂速复制,造成CPU占用资源率据高不下。解决办法:用可靠的杀毒软件彻底清理系统内存和本地硬盘,并且打开系统设置软件,察段桥漏看有无异常启动的程序。经常消正性更新升级杀毒软件和防火墙,加强防毒意识,掌握正确的防杀毒知识。
㈨ 求高手帮忙翻译以下中文
This text introce a kind of measure to control the device according to the temperature of the MSP430 a machine .Should equip the diagraph that can carry out to the temperature, and the ability carries on regulate to the environment temperature according to the initial value, carrying out the purpose of control .Control the calculate way according to the numerical PID calculate way .
The temperature is the instry control is medium mainly of is control one of the parameters, especially in instries, such as metallurgy,chemical engineering,building materials,food,machine and petroleum...etc., have the heavy light function of raise the foot .Along with the quick development of the electronics technique and the microcomputer, the tiny machine measure and controled the technique to get the quick development with the extensive application .A machine tool contain strong processing,circulate the speed quick,the 功 consumes low etc. advantage, applying to measure and control the aspect in the temperature, control in brief convenient, measure the scope widely, the accuracy is higher.
This text design a kind of measure to equip with control according to the temperature of the MSP430 a machine, can carry on the diagraph to the environment temperature, and the ability gives to certainly be worth to regulate the quantity to according to the temperature, the control carry out organization, the realization regulates the purpose of the environment temperature.
㈩ 基于MSP430温度测量系统设计
void main()
{
int i;
long int degc;
WDTCTL=WDTPW+WDTHOLD;
FLL_CTL0|=XCAP18PF; //设置晶振丛袭和禅孙电容,如果你的板子有电渗盯容.忽略
for(i=0;i<1000;i++);
SD16CTL=SD16REFON+SD16VMIDON+SD16SSEL0;
SD16CCTL0|=SD16SNGL+SD16DF;
SD16INCTL0 |= SD16INCH_6;
for(i=0;i<500;i++);
BTCTL=0;
LCD_INIT();
while(1)
{
SD16CCTL0|=SD16SC;
while((SD16CCTL0&SD16IFG)==0)
degc=(long int )ADCresult*9000)/65536-2730;
LCD_displayDecimal(degc,1);
LCD_Insertchar(dt);
LCD_Insertchar(cc);
for(i=0;i<30000;i++);
}
}