㈠ 裸跪求 :基於單片機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++);
}
}