基于ARM嵌入式溫度控制原型系統的設計_第1頁
基于ARM嵌入式溫度控制原型系統的設計_第2頁
基于ARM嵌入式溫度控制原型系統的設計_第3頁
基于ARM嵌入式溫度控制原型系統的設計_第4頁
基于ARM嵌入式溫度控制原型系統的設計_第5頁
已閱讀5頁,還剩8頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于ARM嵌入式溫度控制原型系統的設計1溫度控制應用的總體介紹一般的計算機的過程控制系統的主要流程是周期性地采集A/D中的模擬量,然后比較給定量和采樣值,把差值通過一些控制算法(PID控制)進行數據處理,處理結果經過D/A變換將數字信號轉換成模擬信號,然后輸出到執行機構,從而對被控對象進行控制。針對計算機控制系統的特點,本文設計的溫度閉環控制系統如下圖1-1所示:圖1-1 溫度閉環控制系統結構其主要流程是在手動狀態下對AD通道中的模擬量周期采集,采樣值經過socket上傳服務器,同時服務器等待發控制字,然后系統接收到控制字,并通過DA轉換進而在標準信號控制相應設備輸出;在自動狀態下對AD通道的

2、模擬量周期采集,把給定值和采樣值進行比較,對差值進行控制算法處理,然后得到計算結果,該結果通過DA轉換成相應的模擬量,然后由標準信號輸出,根據上述功能所要求來編寫應用程序。本設計中沒有服務器端程序的設計,客戶端的應用程序主要有main(主程序)、AD數據采集程序、DA數據接收程序、數據讀取程序,溫度控制報警和燈亮程序等幾個部分。、2 主要的應用程序實現主程序函數主要是起到一個創建子程序并監視子程序運行情況的作用,如果子進程不能運行,則該進程重新創建需要重新創建;如果要安裝信號,主進程在退出時應該向子進程傳遞發出一個終止信號,以處理一些收尾的工作。主程序關鍵函數:void main() tmp_

3、data = ds18b20_fun();if(tmp_data50C結束NY恢復正常圖1-2 主程序流程圖2.1 DS18B20驅動程序設計本文設計選用的是主芯片為Samsung公司的S3C2440的mini2440開發板為硬件平臺,軟件平臺是Linux的最新內核Linux2.6.29。通過mini2440的擴展接口引出GPIO口(GPBl)為數據線DQ。由于DS18B20為單總線器件,所以它對操作的時序比較嚴格。正確地編寫復位程序、位寫程序和位讀程序,對于DS18B20驅動最終能否正常運行并且得到實時的溫度值,起到很關鍵的作用。2.2 DS18B20讀寫函數unsigned short d

4、s18b20_fun(void)int fd;int ret;float temp;unsigned short data;fd = open(/dev/TX2440-ds18b20, 0);if (fd 0)perror(open device ds18b20);exit(1);ret = read(fd,&data,4);if(ret0)printf(read ds18b20 errorn);return data;close(fd); if(strncmp(buf,$FLAG1$,7)=0)tmp_data = ds18b20_fun();tmp_temp = tmp_data * 0.

5、0625;tmp_data = tmp_temp * 10 + 0.5;if (tmp_data 1000)printf(  %2d.%d n, tmp_data/10, tmp_data%10);elseprintf(  85.0 n); 2.3 復位程序一般我們在對DS18B20進行讀寫之前時,首先應該對其復位程序的初始化,從而檢測DS18B20是否存在。復位時,我們一般要求通過MCU把數據線下拉480960 s,然后再釋放數據線,大約等待60 s左右。如果MCU接收到DS18B20發出的數據顯示是低電平,那么表示復位成功。復位函數程序如下#defi

6、ne DQ S3C2440_GPB1 #define DQ_INPUT S3C2440_GPB1_INP#define DQ_OUTPUT S3C2440_GPB1_OUTPUTvoid reset() do S3C2440_gpio_cfgpin(DQ,DQ_OUTPUT); S3C2440_gpio_setpin(DQ,1); udelay(1); S3C2440_gpio_setpin(DQ,0) ; udelay(600); S3C2440_gpio_setpin(DQ,1); udelay(60);While(S3C2440_gpio_getpin(DQ)!=0);While(S3C

7、2440_gpio_getpin(DQ)=0);2.4寫1字節子程序 發送ROM和RAM指令,需向DS18B20寫入數據。寫1字節子程序如下:void writebyte(uchar comd) uchar i ; S3C2440_gpio_cfgpin(DQ,DQ_OUTPUT)for(i=o;i1;2.5讀N字節子程序 如果溫度轉換完畢,則需要進入DS18B20的RAM中讀取第0和第1字節的二進制數據。讀1字節的子程序如下:uchar readbyte(void) uchar i ,temp=0; for(i=0;i1; S3C2440_gpio_cfgpin(DQ,DQ_OUTPUT);

8、S3C2440_gpio_setpin(DQ,0);udelay(1);S3C2440_gpio_setpin(DQ,1);S3C2440_gpio_cfgpin(DQ,DQ_INPUT);udelay(10);if(S3C2440_gpio_getpin(DQ) temp=(temp0x80);udelay(65);S3C2440_gpio_cfgpin(DQ,DQ_OUTPUT);S3C2440_gpio_setpin(DQ,1);return(temp);讀取N字節的子程序如下:void readnbyte(uchar N,Uchar *temp) uchar i; for(i=0;iN

9、;i+) *temp=readbyte(); temp+; 本文采用模塊加載的方法來調試DS18B20的驅動程序2.6 A/D數據采集程序功能與實現.一般在工業生產中不需要很高的采集頻率,當通過A/D程序采集數據時,采集通道一般設置為每隔1秒鐘采集一次,然后按照接收模式來確定采用手動或者自動模式,并把采集到的數據寫入或D/A共享內存或者 A/D共享內存中。如果通道無法采集時,一般程序會通過調用非阻塞的:eleet()函數來解決這個問題,這樣就避免了浪費系統資源和系統阻塞的問題。A/D程序流程如下圖1-3所示【15】。A/D控制算法初始化共享內存讀取A/D通道值讀socket共享內存存模式轉化寫

10、D/A共享內存寫A/D共享內存手動自動圖1-3 A/D程序流程圖函數關鍵部分實現如下:if(fd=open(”/dev/ADS7842”,O_WRONLY)= = -l)Perror(“open ADC error!n”):exit(l);while(l)fs_sel=seleet(fd+1,NULL,&fs-Write,NULL,&tv_timeout):if(fs_sel)/讀AD通道值result=write(fd,&CHA, sizeof(unsigned int);if(result0)Printf( “WriteADChannelError!n”);Retum -1; value=

11、(float)result)/4096)*5.0;Prinif(“CH%d=%fVn”,CHA,value);Read_share_SOCKET():/讀soeket共享內存GetMode(szBuf_SOCKET,mode);if(*mode)=“AA”)AD_data=gcvt(value,4,AD_data);write_share_AD(CHA,AD_data);寫AD共享內存 elseif(*mode)=“MM”)Control_ALG(res,value);/控制算法 Write_Share_DA(CHA,res);寫DA共享內存elsePrintf(“Find mode char

12、 error!n”);Continue;2.7 D/A數據采集程序功能與實現在確定自動或者手動模式后,D/A數據采集程序會決定讀取數據包的路徑:DA共享內存或者socket共享內存,D/A的程序流程圖如下圖1-4所示【15】。D/A初始化共享內存讀socket共享內存讀D/A共享內存讀socket共享內存模式轉換自動手動圖1-4 D/A程序流程圖函數關鍵部分實現如下:while(1)Read_Share_SOCKET():/讀soeket共享內存GetMode(szBuf_SOCKET,mode);if(*mode)=“AA”)Read_share_DA();/AUTO:讀DA共享內存GetD

13、ata(szBuf_DA,RecvPack);DA_data=atof(ReevPack); elseif(*mode)=”MM” )/MANUAL:讀soeket共享內存GetData(szBuf_SOCKET,RecvPack):/取DA數據包DA_data=atof(RecvPack);elsecontinue;if(fd=oPen(“ /dev/DAC712”,O_WRONLY)= =-l)Perror(“open DAC error”);exit(1):rev=write(fd,&DA_data,sizeof(DA_data);close(dafd);2.8 溫度控制報警主函數實現i

14、nt main(int argc, char *argv)int freq = 1000 ; int tmp_data ; float tmp_temp ; if(tmp_data50) tmp_data = ds18b20_fun(); tmp_temp = tmp_data * 0.0625; tmp_data = tmp_temp * 10 + 0.5; open_buzzer(); printf( nBUZZER PWM Control n ); printf( Press ESC key to Exit this programnn ); printf(  %2d

15、.%d n, tmp_data/10, tmp_data%10); else printf(  85.0 n);通過linux交叉編譯程序 ,并成功沒錯誤 如下圖1-5界面所示:圖1-5交叉編譯界面即得到可執行文件然后掛載到開發板上,執行命令# ./pwm蜂鳴器會響2.9 溫度燈控主要函數實現int main(void) int tmp_data ; float tmp_temp ; tmp_data = ds18b20_fun(); tmp_temp = tmp_data * 0.0625; tmp_data = tmp_temp * 10 + 0.5; if(tmp_data50) :system(kill -s STOP pidof led-player); m_fd = :open(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論