基于STM32的簡易數(shù)字電壓表.doc_第1頁
基于STM32的簡易數(shù)字電壓表.doc_第2頁
基于STM32的簡易數(shù)字電壓表.doc_第3頁
基于STM32的簡易數(shù)字電壓表.doc_第4頁
基于STM32的簡易數(shù)字電壓表.doc_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

課程設(shè)計報告學(xué) 院(系):機械電子工程學(xué)院專 業(yè):測控技術(shù)與儀器學(xué) 生 姓 名:學(xué) 號:課程設(shè)計題目: 簡易數(shù)字電壓表起 迄 日 期:課程設(shè)計地點:指 導(dǎo) 教 師: 目 錄第1章 簡易數(shù)字電壓表設(shè)計方案論證11.1 簡易數(shù)字電壓表的應(yīng)用意義11.2 本次課程設(shè)計的目的11.3 簡易數(shù)字電壓表設(shè)計的要求及技術(shù)指標(biāo)11.4 設(shè)計方案論證21.5 總體設(shè)計方案框圖及分析2第2章 簡易數(shù)字電壓表各單元電路設(shè)計22.1 A/D轉(zhuǎn)換及數(shù)據(jù)處理22.2 串口通信72.3 LCD顯示電路設(shè)計7第3章 電路原理圖和PCB板的設(shè)計8第4章 系統(tǒng)軟件程序設(shè)計9第5章 設(shè)計總結(jié)16參考文獻(xiàn)17 摘要本文以ARM系列的STM32芯片為核心設(shè)計了一個簡易數(shù)字電壓表。簡易數(shù)字電壓表采用模數(shù)轉(zhuǎn)換思想來實現(xiàn),通過硬件電路和軟件程序相結(jié)合,可輸出自定義測量電壓,通過調(diào)節(jié)模數(shù)轉(zhuǎn)換電位器使在一定范圍內(nèi)可任意改變。輸出的電壓格式和精度的改變通過軟件控制,輸出電壓的大小的改變通過硬件實現(xiàn)。介紹了的生成原理、硬件電路和軟件部分的設(shè)計原理。該簡易數(shù)字電壓表具有體積小、價格低、性能穩(wěn)定、功能齊全的優(yōu)點。關(guān)鍵詞:簡易數(shù)字電壓表;STM32F103;D /A轉(zhuǎn)換; 第一章 簡易數(shù)字電壓表設(shè)計方案論證1.1 簡易數(shù)字電壓表的應(yīng)用意義數(shù)字電壓表簡稱DMV,它是采用數(shù)字化測量技術(shù)設(shè)計的電壓表。數(shù)字電壓表的優(yōu)良特性深受人們的青睞。具體有以下的應(yīng)用特點:a) 顯示清晰直觀,讀數(shù)準(zhǔn)確。b) 準(zhǔn)確度高。c) 分辨率高。d) 測量范圍寬。e) 擴(kuò)展能力強。f) 測量速度快。g) 輸入阻抗高。h) 集成度高、微功耗。h) 抗干擾能力強 1.2 本次課程設(shè)計的目的1) 了解STM32f103內(nèi)部A/D轉(zhuǎn)換性能及編程方法。2) 學(xué)會使用A/D轉(zhuǎn)換器進(jìn)行電壓信號采集。3) 了解uCosII系統(tǒng)工作原理。 1.3 簡易數(shù)字電壓表設(shè)計的要求及技術(shù)指標(biāo)設(shè)計要求:利用STM32F103內(nèi)部A/D及2.8寸TFT液晶屏,設(shè)計完成一個數(shù)字電壓表。要求:數(shù)字電壓表可測量0-5V輸入電壓,電壓值通過液晶屏顯示。工作原理及設(shè)計思路:簡易數(shù)字電壓表的設(shè)計由A/D轉(zhuǎn)換.數(shù)據(jù)處理及顯示控制等組成。利用STM32F103內(nèi)部A/D轉(zhuǎn)換器將模擬電壓轉(zhuǎn)換成數(shù)字量,經(jīng)STM32F103計算將數(shù)字量轉(zhuǎn)換成對應(yīng)的電壓值,并通過液晶屏輸出。 1.4.設(shè)計方案論證數(shù)字電壓表的基本組成部分是A/D變換器+電子計數(shù)器。通常,被測直流電壓經(jīng)A/D轉(zhuǎn)換器變?yōu)榕c之成正比的閘門時間,在此閘門時間內(nèi)計數(shù),用數(shù)字顯示被測電壓值??梢夾/D變換器是DVM的核心部件。本課設(shè)上采用的是單片A/D轉(zhuǎn)換器(含模擬電路與數(shù)字電路)集成在一片芯片上,配以LCD或LED數(shù)字器件后能顯示A/D轉(zhuǎn)換結(jié)果的集成電路。它們均屬于大規(guī)模的集成電路,能以最簡的方式構(gòu)成DVM。在此采用ICL7106A/D轉(zhuǎn)換器。但由于STM32F103內(nèi)部集成了A/D轉(zhuǎn)換器,所以不需要外圍的A/D轉(zhuǎn)換器,這就體現(xiàn)了STM32得集成特性。 1.5總體設(shè)計方案框圖及分析 LCD顯示STM32F103控制邏輯RC濾波器RC振蕩器 分頻器第二章 簡易數(shù)字電壓表各單元電路設(shè)計簡易數(shù)字電壓表的設(shè)計由A/D轉(zhuǎn)換.數(shù)據(jù)處理及顯示控制等組成。由于STM32F103集成了A/D轉(zhuǎn)換.數(shù)據(jù)處理部分,所以可以集中在一起研究,所以分成了兩部分。2.1 A/D轉(zhuǎn)換及數(shù)據(jù)處理1)基本型號介紹首先我們先研究STM32系列芯片的基本知識。由圖1可知STM32F103ZET6有144個引腳,所以我們來了解他的基本型號與代碼之間的關(guān)系。 圖1STM32系列產(chǎn)品命名規(guī)則 示例: STM32 F 103 C 8 T 6 A xxx 產(chǎn)品系列STM32 = 基于ARMs22的32位微控制器產(chǎn)品類型 F = 通用類型產(chǎn)品子系列101 = 基本型102 = USB基本型,USB 2.0全速設(shè)備103 = 增強型105或107 = 互聯(lián)型引腳數(shù)目T = 36腳 C = 48腳 R = 64 腳 V = 100腳 Z = 144腳 閃存存儲器容量 4 = 16K字節(jié)的閃存存儲器 6 = 32K字節(jié)的閃存存儲器 8 = 64K字節(jié)的閃存存儲器 B = 128K字節(jié)的閃存存儲器 C = 256K字節(jié)的閃存存儲器 D = 384K字節(jié)的閃存存儲器 E = 512K字節(jié)的閃存存儲器封裝 H = BGAT = LQFPU = VFQFPNY = WLCSP 溫度范圍 6 = 工業(yè)級溫度范圍,-40C85 C7 = 工業(yè)級溫度范圍, -40C105C內(nèi)部代碼A 或者空 (詳見產(chǎn)品數(shù)據(jù)手冊)選項xxx = 已編程的器件代號(3個數(shù)字)TR = 卷帶式包裝2) STM32系列的最小系統(tǒng)設(shè)計和獨立的A/D轉(zhuǎn)換器供電和參考電壓 最小系統(tǒng)主要包括調(diào)試接口.震蕩電路.引導(dǎo)設(shè)置.復(fù)位電路和供電系統(tǒng)。電路由穩(wěn)定的電源VDD供電。值得注意的是,如果使用ADC,VDD的范圍必須在2.4-3.6V;如果沒有使用ADC,VDD的范圍為2-3.6V。啟動模式選項:由開關(guān)SW(BOOT0)和SW(BOOT1)配置。如圖2所示 圖2復(fù)位電路:復(fù)位信號是低有效,復(fù)位源包括復(fù)位按鈕JP3和連在連接器上的調(diào)試工具。如圖3 圖3時鐘源:兩個時鐘源被用于這個微控制器。LSEX1用于嵌入式RTC的32.768kHz晶振;HSE X2用于STM32F103微控制器的8MHz晶振。如圖4所示 圖4去耦電容:去耦電容就是起到一個電池的作用,滿足驅(qū)動電路電流的變化,避免相互間的耦合干擾。 由11個100nf的陶瓷電容和一個鉭電容組成。如圖5所示 圖5獨立的A/D轉(zhuǎn)換器供電和參考電壓:為了提高轉(zhuǎn)換的精確度,ADC使用一個獨立的電源供電,過濾和屏蔽來自印刷電路板上的毛刺干擾。 ADC的電源引腳為VDDA 獨立的電源地VSSA 如果有VREF-引腳(根據(jù)封裝而定),它必須連接到VSSA。 100腳和144腳封裝: 為了確保輸入為低壓時獲得更好精度,用戶可以連接一個獨立的外部參考電壓ADC到VREF+和VREF-腳上。在VREF+的電壓范圍為2.4VVDDA。 如圖6所示 圖63) STM32系列的內(nèi)ADC轉(zhuǎn)換邏輯12位ADC是一種逐次逼近型模擬數(shù)字轉(zhuǎn)換器。它有多達(dá)18個通道,可測量16個外部和2個內(nèi)部信號源。各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。ADC的結(jié)果可以左對齊或右對齊方式存儲在16位數(shù)據(jù)寄存器中。 模擬看門狗特性允許應(yīng)用程序檢測輸入電壓是否超出用戶定義的高/低閥值。 ADC的輸入時鐘不得超過14MHz,它是由PCLK2經(jīng)分頻產(chǎn)生。ADC主要特征 12位分辨率 轉(zhuǎn)換結(jié)束、注入轉(zhuǎn)換結(jié)束和發(fā)生模擬看門狗事件時產(chǎn)生中斷 單次和連續(xù)轉(zhuǎn)換模式 從通道0到通道n的自動掃描模式 自校準(zhǔn) 帶內(nèi)嵌數(shù)據(jù)一致性的數(shù)據(jù)對齊 采樣間隔可以按通道分別編程 規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換均有外部觸發(fā)選項 間斷模式 雙重模式(帶2個或以上ADC的器件) ADC轉(zhuǎn)換時間: STM32F103xx增強型產(chǎn)品:時鐘為56MHz時為1s(時鐘為72MHz為1.17s) STM32F101xx基本型產(chǎn)品:時鐘為28MHz時為1s(時鐘為36MHz為1.55s) STM32F102xxUSB型產(chǎn)品:時鐘為48MHz時為1.2s STM32F105xx和STM32F107xx產(chǎn)品:時鐘為56MHz時為1s(時鐘為72MHz為1.17s) ADC供電要求:2.4V到3.6V ADC輸入范圍:VREF- VIN VREF+ 規(guī)則通道轉(zhuǎn)換期間有DMA請求產(chǎn)生。我們需要打開一個ADC輸入端口,使外部的模擬量被采集,這樣才能通過內(nèi)部的ADC轉(zhuǎn)換器和驅(qū)動電路來實現(xiàn)轉(zhuǎn)換成數(shù)字量。采集模擬量的電路如圖7所示 圖7 控制邏輯有三個作用:第一,識別積分器的工作狀態(tài),適時發(fā)出控制信號,使A/D 轉(zhuǎn)換正常進(jìn)行;第二,判定輸入電壓極性并控制LCD的負(fù)極性顯示。2.2 串口通信由于微控制器的控制是通過編程語言來控制的,所以需要外設(shè)的串口來實現(xiàn)編程語言的讀寫。 通用異步收發(fā)器(UART)是一種串行接口,一般微處理器中都包含這種外設(shè)接口。異步串行接口提供了一種簡單的途徑,使兩個器件無需共享同一個時鐘信號就能進(jìn)行通信。如果再加入一個合適的電平轉(zhuǎn)換器MAX232,串口就能能用在RS232和RS485等網(wǎng)絡(luò)中實現(xiàn)通信,或者與計算機的COM端口連接。串口只需兩根信號線(RX和TX)即可實現(xiàn),而且只要兩端器件都采用同樣的位格式和波特率,那么它們無需其它任何對方的信息就可以成功傳輸數(shù)據(jù)。電路圖如圖8所示 圖82.3 LCD顯示電路設(shè)計由于STM32是一種高集成芯片,所以在顯示液晶屏電路上就少了很多附帶的驅(qū)動電路,我們選用采用自帶驅(qū)動模塊的液晶屏,這樣就少了外圍驅(qū)動電路。LCD的顯示電路如圖9所示 圖9 第三章 電路原理圖與PCB板設(shè)計我們用電路板繪圖軟件protel,繪制電路原理圖并生成PCB板,在繪制完原理圖生成PCB板的布線與原件的排列方面有很多值得注意的問題,如地線與電源線必須加粗,盡量避免出現(xiàn)繞線的現(xiàn)象,因為這樣就增加了信號傳輸?shù)臅r間,盡量減少線的使用,相同器件盡量布在一起,這樣方便以后電路板的焊接等等規(guī)則。根據(jù)要求和以上的分析得到的原理圖與PCB板圖如圖10所示 第四章 系統(tǒng)軟件程序設(shè)計我們采用的是Kilc-4編寫與燒入軟件,在Kilc-4中建立項目并建立c語言文件,在文件中編寫c語言程序,編寫完畢后在軟件中的選項flash中的configure flash tools中設(shè)置參數(shù),設(shè)置成適合Cortex-M3嵌入式處理器STM32合適的參數(shù)。最后編譯檢查程序的正確與否,如果可以創(chuàng)建目標(biāo)文件則可以燒入微控制器中,否則檢查是否有錯誤或是警告,排除錯誤或是警告,最終實現(xiàn)創(chuàng)建目標(biāo),最后燒入火牛開發(fā)板,檢驗程序是否符合設(shè)計要求,看液晶顯示屏上的檢測電壓是否隨著模擬輸入電位器的旋轉(zhuǎn)改變而改變。簡易數(shù)字電壓表的控制程序為:顯示程序.c :#include #include sys.h#include usart.h#include delay.h#include led.h #include lcd.h #include adc.hint main(void) u16 adcx;float temp;float temperate; Stm32_Clock_Init(9);/系統(tǒng)時鐘設(shè)置delay_init(72);/延時初始化/uart_init(72,9600); /串口1初始化 LED_Init();LCD_Init(); Adc_Init();POINT_COLOR=RED;/設(shè)置字體為紅色 LCD_ShowString(60,50,Fire Bull STM32); LCD_ShowString(60,70,1 ); LCD_ShowString(60,110,2011/12/26);/顯示時間POINT_COLOR=BLUE;/設(shè)置字體為藍(lán)色LCD_ShowString(60,130,TEMP_VAL:); LCD_ShowString(60,150,TEMP_VOL:0.000V);while(1)adcx=Get_Temp();LCD_ShowNum(132,130,adcx,4,16);/顯示ADC的值temp=(float)adcx*(3.3/4096);temperate=temp;/保存溫度傳感器的電壓值adcx=temp;LCD_ShowNum(132,150,adcx,1,16); /顯示電壓值整數(shù)部分temp-=(u8)temp; /減掉整數(shù)部分 LCD_ShowNum(148,150,temp*1000,3,16);/顯示電壓小數(shù)部分 初始化程序.c:#include sys.h#include usart.h/Mini STM32開發(fā)板/串口1初始化 /正點原子ALIENTEK/2010/5/27/V1.3/支持適應(yīng)不同頻率下的串口波特率設(shè)置./加入了對printf的支持/增加了串口接收命令功能./加入以下代碼,支持printf函數(shù),而不需要選擇use MicroLIB #if 1#pragma import(_use_no_semihosting) /標(biāo)準(zhǔn)庫需要的支持函數(shù) struct _FILE int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is required. */ ; /* FILE is typedef d in stdio.h. */ FILE _stdout; /定義_sys_exit()以避免使用半主機模式 _sys_exit(int x) x = x; /重定義fputc函數(shù) int fputc(int ch, FILE *f) USART1-DR = (u8) ch; while(USART1-SR&0X40)=0);/循環(huán)發(fā)送,直到發(fā)送完畢 return ch;#endif /end/#ifdef EN_USART1_RX /如果使能了接收/串口1中斷服務(wù)程序/注意,讀取USARTx-SR能避免莫名其妙的錯誤 u8 USART_RX_BUF64; /接收緩沖,最大64個字節(jié)./接收狀態(tài)/bit7,接收完成標(biāo)志/bit6,接收到0x0d/bit50,接收到的有效字節(jié)數(shù)目u8 USART_RX_STA=0; /接收狀態(tài)標(biāo)記 void USART1_IRQHandler(void)u8 res; if(USART1-SR&(1DR; if(USART_RX_STA&0x80)=0)/接收未完成if(USART_RX_STA&0x40)/接收到了0x0dif(res!=0x0a)USART_RX_STA=0;/接收錯誤,重新開始else USART_RX_STA|=0x80;/接收完成了 else /還沒收到0X0Dif(res=0x0d)USART_RX_STA|=0x40;elseUSART_RX_BUFUSART_RX_STA&0X3F=res;USART_RX_STA+;if(USART_RX_STA63)USART_RX_STA=0;/接收數(shù)據(jù)錯誤,重新開始接收 #endif /初始化IO 串口1/pclk2:PCLK2時鐘頻率(Mhz)/bound:波特率/CHECK OK/091209void uart_init(u32 pclk2,u32 bound) float temp;u16 mantissa;u16 fraction; temp=(float)(pclk2*1000000)/(bound*16);/得到USARTDIVmantissa=temp; /得到整數(shù)部分fraction=(temp-mantissa)*16; /得到小數(shù)部分 mantissaAPB2ENR|=1APB2ENR|=1CRH=0X444444B4;/IO狀態(tài)設(shè)置 RCC-APB2RSTR|=1APB2RSTR&=(1BRR=mantissa; / 波特率設(shè)置 USART1-CR1|=0X200C; /1位停止,無校驗位.#ifdef EN_USART1_RX /如果使能了接收/使能接收中斷USART1-CR1|=1CR1|=15; /接收緩沖區(qū)非空中斷使能 MY_NVIC_Init(3,3,USART1_IRQChannel,2);/組2,最低優(yōu)先級 #endifADC驅(qū)動.c: #include #include adc.h#include delay.h/ADC 驅(qū)動代碼 /初始化ADC/這里我們僅以規(guī)則通道為例/我們默認(rèn)將開啟通道03 void Adc_Init(void) /先初始化IO口 RCC-APB2ENR|=1CRL&=0XFFFF0000;/PA0 1 2 3 anolog輸入/通道10/11設(shè)置 RCC-APB2ENR|=1APB2RSTR|=1APB2RSTR&=(1CFGR&=(3CFGR|=2CR1&=0XF0FFFF; /工作模式清零ADC1-CR1|=0CR1&=(1CR2&=(1CR2&=(7CR2|=7CR2|=1CR2&=(1CR2|=1SQR1&=(0XFSQR1&=0SMPR2&=0XFFFFF000;/通道0,1,2,3采樣時間清空 ADC1-SMPR2|=7SMPR2|=7SMPR2|=7SMPR2|=7SMPR1&=(7SMPR1|=7CR2|=1CR2|=1CR2&1CR2|=1CR2&1SQR3&=0XFFFFFFE0;/規(guī)則序列1 通道chADC1-SQR3|=ch; ADC1-CR2|=1SR&1DR;/返回adc值/得到ADC采樣內(nèi)部溫度傳感器的值/取10次,然后平均u16 Get_Temp(void)u16 temp_val=0;u8 t;for(t=0;t10;t+)temp_val+=Get_Adc(TEMP_CH);delay_ms(5);return temp_val/10;延時程序.c:#include #include delay.h/使用SysTick的普通計數(shù)模式對延遲進(jìn)行管理/包括delay_us,delay_ms/2010/5/27/V1.2/修正了中斷中調(diào)用出現(xiàn)死循環(huán)的錯誤/防止延時不準(zhǔn)確,采用do while結(jié)構(gòu)! static u8 fac_us=0;/us延時倍乘數(shù)static u16 fac_ms=0;/ms延時倍乘數(shù)/初始化延遲函數(shù)/SYSTICK的時鐘固定為HCLK時鐘的1/8/SYSCLK:系統(tǒng)時鐘void delay_init(u8 SYSCLK)SysTick-CTRL&=0xfffffffb;/bit2清空,選擇外部時鐘 HCLK/8fac_us=SYSCLK/8; fac_ms=(u16)fac_us*1000; /延時nms/注意nms的范圍/SysTick-LOAD為24位寄存器,所以,最大延時為:/nms=0xffffff*8*1000/SYSCLK/SYSCLK單位為Hz,nms單位為ms/對72M條件下,nmsLOAD=(u32)nms*fac_ms;/時間加載(SysTick-LOAD為24bit)SysTick-VAL =0x00; /清空計數(shù)器SysTick-CTRL=0x01 ; /開始倒數(shù) dotemp=SysTick-CTRL;wh

溫馨提示

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

評論

0/150

提交評論