久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3217|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

stm32多路巡回?cái)?shù)據(jù)采集系統(tǒng)設(shè)計(jì) 含源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:425104 發(fā)表于 2020-2-22 10:03 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

此次設(shè)計(jì)是利用stm32開發(fā)板設(shè)計(jì)的。數(shù)據(jù)采集系統(tǒng)是模擬域與數(shù)字域之間必不可少的紐帶,它的存在具有著非常重要的作用。本文介紹的重點(diǎn)是數(shù)據(jù)采集系統(tǒng),而該系統(tǒng)硬件部分的重心在于單片機(jī)芯片。數(shù)據(jù)采集與通信控制采用了模塊化的設(shè)計(jì),數(shù)據(jù)采集與通信控制采用了單片機(jī)STM32來實(shí)現(xiàn),硬件部分是以單片機(jī)為核心,還包括A/D模數(shù)轉(zhuǎn)換模塊,顯示模塊。該系統(tǒng)從機(jī)負(fù)責(zé)數(shù)據(jù)采集并應(yīng)答主機(jī)的命令。輸入數(shù)據(jù)是由模擬信號(hào)產(chǎn)生器產(chǎn)生,實(shí)現(xiàn)對(duì)采集到的數(shù)據(jù)進(jìn)行模擬量到數(shù)字量的轉(zhuǎn)換,并用TFTLCD來顯示所采集的結(jié)果。軟件部分應(yīng)用C語(yǔ)言編寫控制軟件,對(duì)數(shù)據(jù)采集系統(tǒng)、模數(shù)轉(zhuǎn)換系統(tǒng)、數(shù)據(jù)顯示、數(shù)據(jù)通信等程序進(jìn)行了設(shè)計(jì)。

2 總體方案設(shè)計(jì)

多路巡回?cái)?shù)據(jù)采集儀設(shè)計(jì)需要將模擬量轉(zhuǎn)換為數(shù)字量,而 A/D是將模擬量轉(zhuǎn)換為數(shù)字量的器件,STM32單片機(jī)是該系統(tǒng)的基本的微處理系統(tǒng),它完成數(shù)據(jù)讀取、處理及邏輯控制、數(shù)據(jù)傳輸、數(shù)據(jù)轉(zhuǎn)換等一系列的任務(wù),然后通過控制液晶屏顯示。

數(shù)據(jù)采集系統(tǒng)不僅需要硬件設(shè)置,還需要軟件的相應(yīng)配置才能調(diào)試好硬件,使系統(tǒng)正常工作。硬件電路的調(diào)試與硬件設(shè)計(jì)和軟件配置息息相關(guān)。系統(tǒng)的硬件包括STM32核心板、液晶屏顯示、數(shù)據(jù)采集電路等。


圖1 系統(tǒng)框圖


此多路巡回?cái)?shù)據(jù)采集儀的設(shè)計(jì)采用的是紅外傳感器,煙霧傳感器,利用二個(gè)模塊分別檢測(cè)外圍環(huán)境的變化,通過最后采集的數(shù)據(jù)來反映不同環(huán)境下的數(shù)據(jù)的不同。

3 硬件設(shè)計(jì)

3.1 各個(gè)模塊的實(shí)現(xiàn)

  3.1.1 紅外對(duì)管傳感器

TCRT5000傳感器的紅外發(fā)射二極管不斷發(fā)射紅外線,當(dāng)發(fā)射出的紅外線沒有被反射回來或被反射回來但強(qiáng)度不夠大時(shí),紅外接收管一直處于關(guān)斷狀態(tài),此時(shí)模塊的輸出端為高電平,指示二極管一直處于熄滅狀態(tài);被檢測(cè)物體出現(xiàn)在檢測(cè)范圍內(nèi)時(shí),紅外線被反射回來且強(qiáng)度足夠大,紅外接收管飽和,此時(shí)模塊的輸出端為低電平,指示二極管被點(diǎn)亮。模擬輸出AO當(dāng)發(fā)射管的紅外信號(hào)經(jīng)反射被接收管接收后,接收管的電阻會(huì)發(fā)生變化,在電路上一般以電壓的變化形式體現(xiàn)出來,而經(jīng)過ADC轉(zhuǎn)換或LM324等電路整形后得到處理后的輸出結(jié)果。電阻的變化起取于接收管所接收的紅外信號(hào)強(qiáng)度,常表現(xiàn)在反射面的顏色(反射率)、形狀和反射面接收管的距離等方面。

圖3.1.1 紅外對(duì)管傳感器原理圖
3.1.2 煙霧傳感器

       MQ-2型煙霧傳感器屬于二氧化錫半導(dǎo)體氣敏材料,屬于表面離子式N型半導(dǎo)體。處于200~300攝氏度時(shí),二氧化錫吸附空氣中的氧,形成氧的負(fù)離子吸附,使半導(dǎo)體中的電子密度減少,從而使其電阻值增加。當(dāng)與煙霧接觸時(shí),如果晶粒間界處的勢(shì)壘收到煙霧的調(diào)至而變化,就會(huì)引起表面導(dǎo)電率的變化。利用這一點(diǎn)就可以獲得這種煙霧存在的信息,煙霧的濃度越大,導(dǎo)電率越大,輸出電阻越低,則輸出的模擬信號(hào)就越大。

圖3.1.2 煙霧傳感器原理圖

3.2 顯示部分

本次設(shè)計(jì)采用的為TFT型液晶屏,TFT型的液晶顯示器較為復(fù)雜,主要的構(gòu)成包括了熒光管、導(dǎo)光板、偏光板、濾光板、玻璃基板、配向膜、液晶材料、薄模式晶體管等等。首先液晶顯示器必須先利用背光源,也就是熒光燈管投射出光源,這些光源會(huì)先經(jīng)過一個(gè)偏光板然后再經(jīng)過液晶,這時(shí)液晶分子的排列方式進(jìn)而改變穿透液晶的光線角度。然后這些光線接下來還必須經(jīng)過前方的彩色的濾光膜與另一塊偏光板。因此我們只要改變刺激液晶的電壓值就可以控制最后出現(xiàn)的光線強(qiáng)度與色彩,并進(jìn)而能在液晶面板上變化出有不同深淺的顏色組合了。

本次設(shè)計(jì)還有一個(gè)就是設(shè)置屏幕的背景圖,采用的是320*240的分辨率進(jìn)行圖片采樣,利用圖片轉(zhuǎn)化軟件對(duì)選中的圖片進(jìn)行采點(diǎn),然后轉(zhuǎn)化成16進(jìn)制的數(shù)字,然后放到庫(kù)里面,需要用的時(shí)候直接調(diào)用就可以了。




圖3.2 利用Img2Lcd軟件進(jìn)行代碼生成
4 軟件設(shè)計(jì)

4.1 整體設(shè)計(jì)框圖

本軟件系統(tǒng)是基于STM32的庫(kù)函數(shù)下進(jìn)行的編程。需要對(duì)庫(kù)函數(shù)進(jìn)行調(diào)用并對(duì)相應(yīng)的函數(shù)進(jìn)行初始化。然后對(duì)采集的模擬信號(hào)進(jìn)行轉(zhuǎn)換,通過對(duì)波特率的調(diào)整,對(duì)信號(hào)進(jìn)行實(shí)時(shí)檢測(cè),然后通過均值濾波,控制液晶顯示屏顯示最終得到的結(jié)果。

其具體架構(gòu)如圖:


            
(a)主程序流程圖





4.2 ADC采樣

   4.2.1 ADC原理

由于STM32自帶ADC模塊,所以只需要對(duì)其進(jìn)行配置就可使用。12位ADC是一種逐次逼近型模擬數(shù)字轉(zhuǎn)換器。它有多達(dá)18個(gè)通道,可測(cè)量16個(gè)外部和2個(gè)內(nèi)部信號(hào)源。各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。ADC的結(jié)果可以左對(duì)齊或右對(duì)齊方式存儲(chǔ)在16位數(shù)據(jù)寄存器中。 模擬看門狗特性允許應(yīng)用程序檢測(cè)輸入電壓是否超出用戶定義的高/低閥值。 ADC的輸入時(shí)鐘不得超過14MHz,它是由PCLK2經(jīng)分頻產(chǎn)生。

本次設(shè)計(jì)采用了四路AD采樣ADC1-GPIOA1,ADC2-GPIOA2,ADC3-GPIOA3,ADC4-GPIOA4;利用四組不同的傳感器對(duì)環(huán)境的檢測(cè),當(dāng)達(dá)到對(duì)應(yīng)的閾值時(shí),控制相對(duì)應(yīng)的器件。

圖4.2.5 ADC的時(shí)序圖

5系統(tǒng)調(diào)試
首先,將電路連接好如圖正常工作,adc1為4095,
然后將紅外傳感器遮住,adc1變小為177

圖5.2調(diào)試
調(diào)試完成,正常工作。
6總結(jié)

STM32芯片具有非常強(qiáng)大的功能,還有非常全面的庫(kù)函數(shù),應(yīng)用起來非常方便。此次設(shè)計(jì)在最開始的時(shí)候我們遇到了很多的問題,不知道如何使用ADC采集但是后來通過小組的努力共同查閱資料和向?qū)嶒?yàn)室的同學(xué)請(qǐng)教對(duì)ADC有了一定的了解,順利的完成了課設(shè)。在過程中也遇到了許多的問題,比如在使用開發(fā)板時(shí)接線的時(shí)候要細(xì)心,不能夠接錯(cuò)線,在程序編寫的時(shí)候要查閱很多資料和借鑒資料,遇到問題要善于查閱資料找解決辦法等等。不過最終一一克服困難順利完成設(shè)計(jì),實(shí)現(xiàn)了多路巡回?cái)?shù)據(jù)采集設(shè)計(jì)。通過本次的設(shè)計(jì)對(duì)32有了更深刻的理解,提高了我們同學(xué)之間的團(tuán)隊(duì)合作能力與實(shí)踐能力。


單片機(jī)源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "lcd.h"
  6. #include "ds18b20.h"
  7. #include "image2lcd.h"
  8. #include "adc.h"

  9. extern const u8 gImage_image1[];//圖片數(shù)據(jù)(包含信息頭),存儲(chǔ)在image1.c里面.
  10. int main(void)
  11. {
  12.               u8 t=0;            
  13.             
  14.                             u16 adcx1,adcx2;
  15.               float temp;
  16.             
  17.                 HEADCOLOR *imginfo;            
  18.               short temperature;  
  19.               delay_init();                                //延時(shí)函數(shù)初始化               
  20.               uart_init(9600);                            //串口初始化為9600
  21.               LED_Init();                                                          //初始化與LED連接的硬件接口
  22.               LCD_Init();
  23.                               Adc_Init();                                                          //ADC初始化            
  24.   LCD_Fill(0,0,470,350,WHITE);
  25.               srand(imginfo->h*imginfo->w);
  26.               image_display(0,0,(u8*)gImage_image1);//在指定地址顯示圖片
  27.             

  28.               while(DS18B20_Init())              //DS18B20初始化            
  29.               {
  30.                             LCD_ShowString(60,190,200,16,16,"DS18B20 Error");
  31.                             delay_ms(200);
  32.                  LCD_ShowString(60,210,200,16,16,"Temp:   . C");                                         
  33.               }                           

  34.               POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色   
  35.               LCD_ShowString(60,190,200,16,16,"DS18B20 OK");
  36.               LCD_ShowString(60,210,200,16,16,"Temp:   . C");            
  37.             
  38.               POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色
  39.               LCD_ShowString(60,230,200,16,16,"ADC1:");//傾倒
  40.               LCD_ShowString(60,270,200,16,16,"ADC2:");//紅外
  41.             
  42.               POINT_COLOR=RED;//設(shè)置字體為紅色
  43.   LCD_ShowString(120,250,48,16,16,"0.000V");
  44.   LCD_ShowString(120,290,48,16,16,"0.000V");
  45.             
  46.               while(1)
  47.               {            

  48.                             adcx1=Get_Adc_Average(ADC_Channel_1,10);//ADC1煙霧傳感器                            adcx2=Get_Adc_Average(ADC_Channel_2,10);//ADC2紅外傳感器
  49.                            
  50.                             POINT_COLOR=RED;//設(shè)置字體為紅色
  51.                             LCD_ShowxNum(120,230,adcx1,4,16,0);//顯示ADC的值
  52.                             LCD_ShowxNum(120,270,adcx2,4,16,0);//顯示ADC的值
  53.                            
  54.                             //第一個(gè)ADC轉(zhuǎn)換為電壓值
  55.                             temp=(float)adcx1*(3.3/4096);
  56.                             adcx1=temp;
  57.                             LCD_ShowxNum(120,250,adcx1,1,16,0);//顯示電壓值
  58.             
  59.                             //第二個(gè)ADC轉(zhuǎn)換為電壓值
  60.                             temp=(float)adcx2*(3.3/4096);
  61.                             adcx2=temp;
  62.                             LCD_ShowxNum(120,290,adcx2,1,16,0);//顯示電壓值

  63.                            
  64.                            
  65.                             if(t%10==0)//每100ms讀取一次
  66.                             {                                                                                                                              
  67.                                           temperature=DS18B20_Get_Temp();            
  68.                                           if(temperature<0)
  69.                                           {
  70.                                                         LCD_ShowChar(60+40,210,'-',16,0);                                          //顯示負(fù)號(hào)
  71.                                                         temperature=-temperature;                                                                      //轉(zhuǎn)為正數(shù)
  72.                                           }
  73.                                           else
  74.                                                         LCD_ShowChar(60+40,210,' ',16,0);                                          //去掉負(fù)號(hào)
  75.                                             LCD_ShowNum(60+40+8,210,temperature/10,2,16);              //顯示正數(shù)部分                 
  76.                                              LCD_ShowNum(60+40+32,210,temperature%10,1,16);              //顯示小數(shù)部分                              
  77.                             }                                                         
  78.                             delay_ms(10);
  79.                             t++;
  80.               }
  81. }
復(fù)制代碼

全部資料51hei下載地址:
源程序.7z (280.16 KB, 下載次數(shù): 31)
文檔.doc (286.5 KB, 下載次數(shù): 25)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:59738 發(fā)表于 2023-11-21 10:54 | 只看該作者
感謝樓主分享  能幫我很好的開拓思路
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品人伦一区二区三区蜜桃网站 | 金莲网| 自拍偷拍精品 | 日韩精品一区二区三区免费观看 | 福利视频一区二区 | 国产91av视频在线观看 | 99精品免费在线观看 | 久久成人精品一区二区三区 | 亚洲精品视频在线 | 国产偷久久一级精品60部 | 国产精品久久久久久 | 自拍偷拍第一页 | 亚洲天堂免费在线 | 男女视频在线观看免费 | 亚洲嫩草 | 国产精品久久久久久久久久久久久 | 日韩在线成人 | 日本一区二区高清视频 | 成人免费视频网站在线观看 | 中文字幕av在线播放 | 免费午夜剧场 | 欧美.com| 天天色综 | 午夜欧美 | 中文天堂在线一区 | 亚洲国产精品成人 | 精品乱人伦一区二区三区 | 日本人和亚洲人zjzjhd | 天堂久久一区 | 欧美日韩1区2区3区 欧美久久一区 | 国产精品不卡一区 | 在线观看av不卡 | 国产不卡视频 | 在线日韩福利 | 自拍视频网站 | 美国黄色毛片 | а√中文在线8 | 中文字幕在线观看第一页 | 在线视频91 | 中文字幕一区二区视频 | 国产激情免费视频 |