嵌入式技術及應用(STM32CubeMX版)課件 任務15 制作電壓監測器_第1頁
嵌入式技術及應用(STM32CubeMX版)課件 任務15 制作電壓監測器_第2頁
嵌入式技術及應用(STM32CubeMX版)課件 任務15 制作電壓監測器_第3頁
嵌入式技術及應用(STM32CubeMX版)課件 任務15 制作電壓監測器_第4頁
嵌入式技術及應用(STM32CubeMX版)課件 任務15 制作電壓監測器_第5頁
已閱讀5頁,還剩26頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

任務15制作電壓監測器任務要求STM32的PA0引腳作模擬輸入口,對該引腳上輸入的電壓進行采集,串口1作異步通信口使用,用來輸出當前電壓值,輸出格式為“當前電壓:X.XX伏”,其中,串口的波特率BR=115200bps,數據位8位,停止位1位。知識儲備

1.A/D轉換的基礎知識(1)常用的技術指標A/D轉換器簡稱為ADC,功能是將連續的模擬信號轉換成數字信號。分辨率:表示輸出數字量增減1所需要的輸入模擬量的變化值,它反映了ADC能夠分辨最小的量化信號的能力。設ADC的位數為n,轉換的滿量程電壓為U,則其分辨率為U/(2n-1)。例如,滿量程電壓為5V,用10位ADC轉換器,分辨率約為5mV。用12位ADC轉換器時,分辨率約為1mV。ADC的位數越多,分辨率越高。

1.A/D轉換的基礎知識轉換時間:啟動ADC進行AD轉換開始到轉換結束并得到穩定的數字量輸出為止所需要的時間。轉換時間的快慢將會影響ADC與CPU交換數據的方式。(2)A/D轉換值與輸入電壓的關系

Ux:輸入電壓UREF:滿量程電壓n:A/D轉換的位數adval:A/D轉換值

2.STM32中ADC的結構STM32片內集成有1~3個12位逐次逼近型ADC,依次為ADC1~ADC3ADC主要由ADC的電源電壓與參考電壓輸入、ADC模擬信號輸入、模擬到數字轉換器、模擬看門狗、ADC中斷電路和ADC控制等幾部分組成。

(1)ADC的電源電壓與參考電壓輸入由VDDA、VSSA、VREF+、VREF-4個引腳組成。VDDA:ADC的正電源輸入腳,VSSA為ADC的接地腳,ADC的供電電壓為2.4V~3.6V。VREF+為ADC的參考電壓的正電壓輸入腳,VREF-為ADC參考電壓的負電壓輸入腳,其中,2.4V≤VREF+≤VDDA,VREF-=VSSA。2.STM32中ADC的結構

(2)ADC輸入共18個通道外部通道16個,編號為通道0~通道15,記作ADCx_IN0~ADCx_IN15(x=1、2、3),每個外部通道都與一個外部引腳相接,用來測量外部輸入的模擬信號。內部通道有2個,只有ADC1有內部通道,編號為通道16、通道17。通道16連接至內部溫度傳感器,用來測量芯片的內部溫度通道17連接到內部參考電壓VREFIN,其電壓值為1.2V。2.STM32中ADC的結構

通道號ADC1ADC2ADC3通道號ADC1ADC2ADC3外部通道0PA0PA0PA0外部通道9PB1PB1PF3外部通道1PA1PA1PA1外部通道10PC0PC0PC0外部通道2PA2PA2PA2外部通道11PC1PC1PC1外部通道3PA3PA3PA3外部通道12PC2PC2PC2外部通道4PA4PA4PF6外部通道13PC3PC3PC3外部通道5PA5PA5PF7外部通道14PC4PC4PF4外部通道6PA6PA6PF8外部通道15PC5PC5PF5外部通道7PA7PA7PF9通道16(內部)內部溫度傳感器內部Vss內部Vss外部通道8PB0PB0PF10通道17(內部)內部參考電壓VREFINT內部Vss內部VssSTM32F103中ADC各通道的引腳分布2.STM32中ADC的結構(3)模擬至數字轉換器也叫A/D轉換器,為12位的逐次逼近型A/D轉換器。輸入信號有18個通道,分為規則通道組和注入通道組2個組,其中,規則通道組最多16個通道,注入通道組最多4個通道。(4)模擬看門狗用來監測輸入的模擬電壓,當A/D轉換結果高于設定的閥值高限值或者低于閥值低限值就產生模擬看門狗中斷。(5)ADC中斷有轉換結束中斷、注入轉換結束中斷和模擬看門中斷等3種。2.STM32中ADC的結構(5)ADC中斷特點:每個中斷都有一個中斷標志位,用來記錄對應的中斷事件是否發生,當中斷事件發生,硬件電路就自動地將對應的中斷標志位置1。每個中斷都有一個中斷使能控制位,用來使能或禁止對應的中斷。每個中斷只有在中斷使能控制位為1的條件下,中斷事件發生后才能ADC中斷。2.STM32中ADC的結構ADC轉換結束后的中斷中斷事件事件標志(狀態寄存器ADC_SR)使能控制位(控制寄存器1ADC_CR1)轉換結束EOCEOCIE注入轉換結束JEOCJEOCIE模擬看門狗事件AWDAWDIE2.STM32中ADC的結構分注入組和規則組2個組

(1)ADC的通道組3.ADC的應用特性規則通道組是常用的通道組,注入通道組是一種插入通道組。它們的關系如圖所示,類似于單片機程序中的main()函數與中斷服務函數之間的關系。規則通道相當于main()函數,注入通道相當于中斷服務函數。函數的用法說明

(1)HAL_ADC_Start()函數4.HAL庫中有關ADC的常用函數和宏原型HAL_StatusTypeDefHAL_ADC_Start(ADC_HandleTypeDef*hadc);功能使能ADC,并以查詢方式啟動規則通道組的AD轉換。參數hadc:ADC句柄,取值為hadcx,x為ADC的編號,取值為1~3。返回值HAL的狀態。例如,啟動ADC1的規則通道的AD轉換程序如下:HAL_ADC_Start(&hadc1);函數的用法說明

(2)HAL_ADC_Start_DMA()函數原型HAL_StatusTypeDefHAL_ADC_Start_DMA(ADC_HandleTypeDef*hadc,uint32_t*pData,uint32_tLength);功能使能ADC、啟動規則通道中的AD轉換并以DMA方式將AD轉換結果傳輸到數據緩沖區中。參數1hadc:ADC句柄,取值為hadcx,x為ADC的編號,取值為1~3。參數2pData:DMA傳輸時目的緩沖區的首地址。4.HAL庫中有關ADC的常用函數和宏

(2)HAL_ADC_Start_DMA()函數原型HAL_StatusTypeDefHAL_ADC_Start_DMA(ADC_HandleTypeDef*hadc,uint32_t*pData,uint32_tLength);參數3Length:DMA傳輸的數據個數。返回值HAL的狀態。說明:進行DMA傳輸時需要將DMA的傳輸大小配置成半字長度。例如,啟動ADC1,并用DMA方式將AD轉換結果傳輸到數據buf[]中,數據傳輸個數為50個,其程序如下:HAL_ADC_Start_DMA(&hadc1,buf,50);4.HAL庫中有關ADC的常用函數和宏函數的用法說明

(3)HAL_ADC_Stop()函數原型HAL_StatusTypeDefHAL_ADC_Stop(ADC_HandleTypeDef*hadc);功能停止規則通道的AD轉換,并禁止ADC。參數hadc:ADC句柄,取值為hadcx,x為ADC的編號,取值為1~3。返回值HAL的狀態。例如,停止ADC1的AD轉換,其程序如下:HAL_ADC_Stop(&hadc1);4.HAL庫中有關ADC的常用函數和宏函數的用法說明

(4)HAL_ADCEx_Calibration_Start()函數原型HAL_StatusTypeDefHAL_ADCEx_Calibration_Start(ADC_HandleTypeDef*hadc);功能啟動ADC自動校正。參數hadc:ADC句柄,取值為hadcx,x為ADC的編號,取值為1~3。返回值HAL的狀態。例如,校正ADC1的程序代碼如下:HAL_ADCEx_Calibration_Start(&hadc1);4.HAL庫中有關ADC的常用函數和宏函數的用法說明

(5)HAL_ADC_PollForConversion()函數原型HAL_StatusTypeDefHAL_ADC_PollForConversion(ADC_HandleTypeDef*hadc,uint32_tTimeout);功能查詢并等待AD轉換結束。參數1hadc:ADC句柄,取值為hadcx,x為ADC的編號,取值為1~3。參數2Timeout:查詢等待的最長時間,單位為ms。返回值HAL的狀態。4.HAL庫中有關ADC的常用函數和宏函數的用法說明

(6)HAL_ADC_GetValue()函數原型uint32_tHAL_ADC_GetValue(ADC_HandleTypeDef*hadc);功能獲取AD轉換的結果。參數hadc:ADC句柄,取值為hadcx,x為ADC的編號,取值為1~3。返回值AD轉換的結果。例如,獲取ADC1的轉換結果并存入變量adval中的程序如下:adval=HAL_ADC_GetValue(&hadc1);4.HAL庫中有關ADC的常用函數和宏函數的用法說明如下表所示:

(7)HAL_ADC_GetState()函數原型uint32_tHAL_ADC_GetState(ADC_HandleTypeDef*hadc);功能獲取ADC狀態寄存器的值,即ADC當前的狀態。參數hadc:ADC句柄,取值為hadcx,x為ADC的編號,取值為1~3。返回值ADC狀態寄存器的值。例如,下列語句用來檢測ADC1當前狀態:HAL_ADC_GetState(&hadc1);4.HAL庫中有關ADC的常用函數和宏宏的用法說明

(8)HAL_IS_BIT_SET(REG,BIT)宏宏HAL_IS_BIT_SET(REG,BIT)功能檢查寄存器的位是否被置位。參數1REG:所要檢測的寄存器。參數2BIT:所要檢測的位所對應的屏蔽值。返回值若寄存器的指定的位被置位,則宏的值為真,否則為假。4.HAL庫中有關ADC的常用函數和宏舉例:檢測ADC1的AD轉換是否結束。若已結束,則讀取AD轉換結果,并換算成電壓值,然后用串口輸出當前的電壓值。(8)HAL_IS_BIT_SET(REG,BIT)宏4.HAL庫中有關ADC的常用函數和宏if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC)){ADC_Value=HAL_ADC_GetValue(&hadc1);printf("當前的電壓為%.2f伏\r\n",ADC_Value*3.3/4095);}實現方法與步驟任務15的硬件電路:

1.搭建電路

(3)將串口1配置成異步通信口,波特率為115200bps,8位數據位,1位停止位。2.生成ADC的初始化代碼步驟(1)啟動STM32CubeMX,然后新建STM32CubeMX工程、配置SYS、RCC,其中,Debug模式選擇SerialWire,HSE選擇外部晶振。(2)配置時鐘

第2步:選擇模擬通道0(4)配置ADC1第1步:顯示ADC的配置窗口第3步:設置ADC參數(5)配置工程工程名設為Task11,并設置其他相關選項(6)保存工程,然后生成Keil工程代碼。2.生成ADC的初始化代碼

3.編寫電壓監測器的程序步驟(1)將任務10中位于“D:\ex\Task10”文件夾中的User子文件夾復制至“D:\ex\Task15”文件夾中。(2)打開任務15的Keil工程,并在Keil工程中新建User組,然后將“D:\ex\Task15\User”文件夾中的Serial.c文件添加至User組中。(3)在Keil工程的include路徑中添加“D:\ex\Task15\User”文件夾,該文件夾是Serial.h頭文件所在的文件夾。

(4)在main.c文件中編寫用戶應用程序,程序代碼如下:…#include "stdio.h"…intmain(void){uint16_tADC_Value; //存放當前AD值

…while(1){ HAL_ADC_Start(&hadc1); // HAL_ADC_PollForConversion(&hadc1,50);

if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC))3.編寫電壓

溫馨提示

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

評論

0/150

提交評論