由于傳統示波器雖然功能齊全但是體積旁大,不方便攜帶,本設計針對這種缺點設計一種體積小、成本低、功耗小、便攜數字示波器,同時達到學以致用,理論和實踐相結合,進一步學習課外知識,培養綜合應用知識,鍛煉動手和實際工作的能力。示波器實現輸入頻率范圍為20HZ—1KHZ,幅度范圍為0V—+3.26V(由于時間和元件關系只能做到這一量程,換上帶有vref-和vref+的stm芯片即可做出正負電壓檢測的功能),實現波形實時顯示以及幅度測量。示波器在電子、電氣、控制等領域應用十分廣泛,隨著計算機的發展,示波器已經實現了和計算機互聯,共享數據,但現有示波器有諸多不足,體積龐大,價格昂貴,功能齊全的示波器在某些場合并不能得到充分的應用。本課題所研究的示波器定位于抵擋型,即在性能上滿足大多場合的需要,努力實現小型化,價格低廉,攜帶方便,這樣在財力有限的小用戶能夠普及,并和功能齊全高檔示波器配合使用,取長補短。本設計的硬件設計簡潔,結構明了,而且體積細小,非常方便攜帶。而且電池采用可充電大容量鎳鎘電池,可使用時間長。本設計對信號的采樣,使用實時采樣方式和有限的數據隊列儲存方式存儲,這種方法的優點是,設計相對簡單,能實時顯示所測信號的波形。缺點是,由于受AD轉換速率的限制不能測量頻率很高的信號。另外,AD只能測量范圍很小的電壓信號,單輸入信號可能更小,或者更大,所以要對信號進行程控放大和衰減。由于本設計時間和元件有限,只能做出檢測0到3.26v的示數。只要在信號輸入處加上加法電路改變量程或者把stm32f103c8t6芯片換成stm32f103vct6(帶vref+和vref-)即可。
從任務的要求分析,主要包括的內容為電壓的實時測量和采集,通過stm32f103c8t6控制,運用算法描繪成連續曲線,在4.2英寸液晶顯示屏上顯示出來。
整體設計思路:stm32的PA0~PA7與4.2英寸液晶屏的8個數據位通信,通過PB8、PB9,、PB10、PB11分別控制液晶屏的RST、CS、RS、WR、液晶屏的RD接3.3v來控制液晶屏的顯示。通過PB0輸入信號進行信號采集。PB1為暫停鍵,方便暫停波形觀測波形。PB7和PB4分別為增大網格時間間隔和減少網格時間間隔。
系統如下圖1.1:
圖1.1 系統圖
本設計使用方法:
STM32系列基于專為要求高性能、低成本、低功耗的嵌入式應用專門設計的ARM Cortex-M3內核。按性能分成兩個不同的系列:STM32F103“增強型”系列和STM32F101“基本型”系列。增強型系列時鐘頻率達到72MHz,是同類產品中性能最高的產品;基本型時鐘頻率為36MHz,以16位產品的價格得到比16位產品大幅提升的性能,是16位產品用戶的最佳選擇。兩個系列都內置32K到128K的閃存,不同的是SRAM的最大容量和外設接口的組合。時鐘頻率72MHz時,從閃存執行代碼,STM32功耗36mA,是32位市場上功耗最低的產品。
本設計所用的STM32F103C8T6集成的片上功能如下:
(1) 1.2v內核供電,1.8V/2.5V/3.3/V存儲器供電,3.3V外部I/O供電
(2) 外部存儲控制器
(3) LCD 控制器
(4) 4通道DNA并有外部請求引腳 (5) 3通道UART電子技術綜合實踐
(5) 3通道UART
(6) 2通道SPI
(7) 1通道IIC總線接口1通道IIS總線接口 (8) AC’97編解碼器接口
(9) 兼容SD主接口協議1.0版和MMC卡協議2.11兼容版 (10) 2通道USB主機1通道USB設備
(11) 4通道PWM定時器和1通道內部定時器/看門狗定時器
(12) 8通道10位ADC和觸摸屏接口
(13) 80個通用I/O和24通道外部中斷源
而本次使用的是STM32F103C8T6是已經集成好的最小系統板如下圖:
圖2.1.1 STM32F103C8T6最小系統實物圖
圖2.1.2 STM32F103C8T6最小系統電路圖
2.2 、4.2英寸TFT液晶顯示屏
尺寸:320*400;
圖2.2 4.2英寸液晶顯示屏圖片
2.3電源設計:
圖2.2 電池盒
軟件的任務包括通過初始化GPIO、RCC、ADC、 SYSTICK、EXIT、NVIC、4.2英寸液晶屏等進行初始化。然后通過AD采集的信號以隊列方式儲存起來,再輸送到液晶屏。當完成了一個屏幕的數據點采集,再從頭開始消點、采集、畫點,當然在寫程序的時候加入了一個使數據點連在一起的小算法達到顯示效果。
所編寫程序如下:(以下為主要程序,其他次要程序文件均在附錄中)
通過無數的錯誤與更正,總結如下幾點特別需要注意的要點:
2、經過很多次調試,已經搞清楚本程序編寫液晶屏顏色參數時,24位顏色參數格式為G-R-B,其中G、R、B各用一個8位數據表示。而顏色表數據也比較難找。我的微博中有轉發過有關顏色RGB混合參數的非常實用的微博。詳情請關注新浪微博@中南大學陳錦熙。
3、 以下程序為調試多天之后能最終成功的“消點-采點-畫點”的程序,也是本設計的核心程序。其中加入了讓采集點連續起來的小算法,參考自百度的資料。曾試過在每一次采集結束時通過for(mm=0;mm<400;mm++)adre[mm]=ad[mm];使ad[mm]為實時數據,adre[mm]為上一輪數據。利用adre[mm]在下一輪消點(包括連續算法的連線),但是調試過幾天發現adre[mm]=ad[mm]得到的的數據竟然是亂值。所以在調試程序時必須要靈活變通,敢于懷疑。
if(clr_flag==1) //清點
{
draw_point(allnum + move_x ,ad[allnum]+ move_y,0x0000);
if((allnum<=398)&&(ad[allnum+1]>ad[allnum]))
for(nn=ad[allnum+1]-ad[allnum];nn>0;nn--)
draw_point(allnum +1+ move_x ,ad[allnum+1]-nn+move_y,0x0000);
if((allnum<=398)&&(ad[allnum+1]0;nn--)
draw_point(allnum +1+ move_x ,ad[allnum+1]+nn+move_y,0x0000);
}
ad[allnum]=ADC_GetConversionValue(ADC1)/30; //取值畫圖
draw_point(allnum + move_x ,ad[allnum]+ move_y,0xffc000);
if((allnum>=1)&&(ad[allnum]>ad[allnum-1]))
for(nn=ad[allnum]-ad[allnum-1];nn>0;nn--)
draw_point(allnum + move_x ,ad[allnum]-nn+move_y,0xffc000);
if((allnum>=1)&&(ad[allnum]0;nn--)
draw_point(allnum + move_x ,ad[allnum]+nn+move_y,0xffc000);
allnum++;
4、做按鍵程序的時候,打算用中斷做,可是全局變量定義總是出錯。克服了這個問題之后,發現芯片用PB3做中斷按鍵時運作失敗。通過多次的調試,發現PB3總是為低電平。換了芯片之后情況一樣。所以換做PB4、PB7作為中斷按鍵。而PB1作為常開/常閉開關用來暫停波形。最后得到了應有效果。
5、關于4.2英寸液晶屏的調解程序,復雜度相當高。而且大部分指令都難以理解。連說明書都只有英文版的。所以在此我已經在本次工程的4.2寸液晶屏c文件中用中文注釋了所有命令的中文功能。便于自己理解,也可以幫助大家的學習液晶屏這一個優秀的輸出平臺。
通過這次基于STM32的微型掌上示波器的設計,我更加深入地理解和運用到了更多關于ARM尤其是STM32的特點和功能。
在之前我也用過51做溫度器、做霍爾元件測速器、振動報警器、用過stm32做水力發電葉片、風力發電葉片控制電路(比賽作品)。但這次示波器的設計斷斷續續耗計了我三個星期,是我學習到最多的一次。因為這次設計涉及到的AD、和42英寸液晶屏都是STM32的中端應用。其實這個設計如果用COSII來做的話應該能達到更豐富的效果。
STM32F103C8T6的參考正、負電壓默認連接到芯片工作電壓3.3V(實際3.26V)和地(0V)。所以示波器檢測的電壓區間只能為0~3.26V。如果要實現負電壓的檢測,則要加入加法電路。市面上的STM32F103C8T6升級版STM32F103VCT6有AD對應的的VREF+和VREF-接口,可以完美地解決這個問題。
這次沒有用PCB板做,是因為芯片用的是最小系統集成板,顯示屏用的是ili9325和液晶板的集成板,核心器件已經是高度集成化的,連接電路比較簡單,所以選用了較為簡便的洞洞板來拼接這兩個模塊。
因為沒有昂貴的函數發生器,而且去物理院借用函數發生器非常麻煩,所以我用51單片機開發板做出來了簡易函數發生器(能產生矩形波、三角波、鋸齒波、正弦波,用獨立按鍵1、2、3、4控制)。程序在附錄中。
這次的作品需要改進的地方有很多:
1、運用多路AD即可做出多蹤示波器,這個很容易實現。
2、可以做儲存數據的程序;
3、可以做成觸屏,使用界面更加友好;
4、用UCOSII做可能有更佳的效果。
總之,通過這次作品設計,我撞到了數不清的困難和到現在解不開的難題。可以有困難就去克服,克服不了就尋求網絡資源幫忙。如果實在解不開,就用另一種方法代替。雖然“寫程序用了三個小時,調試用了三天。”可是堅持下去,我得到的是鍛煉和經驗。這個設計有很多廢命令和不太合理、累贅的地方,還望大家指正!
附錄一 字庫(本程序適用)
51hei.png (6.02 KB, 下載次數: 188)
歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |