嵌入式技術(shù)及應(yīng)用(STM32CubeMX版)課件 任務(wù)16 制作電壓信號發(fā)生器_第1頁
嵌入式技術(shù)及應(yīng)用(STM32CubeMX版)課件 任務(wù)16 制作電壓信號發(fā)生器_第2頁
嵌入式技術(shù)及應(yīng)用(STM32CubeMX版)課件 任務(wù)16 制作電壓信號發(fā)生器_第3頁
嵌入式技術(shù)及應(yīng)用(STM32CubeMX版)課件 任務(wù)16 制作電壓信號發(fā)生器_第4頁
嵌入式技術(shù)及應(yīng)用(STM32CubeMX版)課件 任務(wù)16 制作電壓信號發(fā)生器_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

任務(wù)16制作電壓信號發(fā)生器任務(wù)要求STM32的DAC為12位的DA轉(zhuǎn)換器,用第1通道轉(zhuǎn)換外部輸入的DA轉(zhuǎn)換數(shù)據(jù),DA數(shù)據(jù)采用右對齊。串口1作異步通信口,與計算機進(jìn)行串行通信。計算機通過串口調(diào)試助手向STM32發(fā)送DA轉(zhuǎn)換數(shù)據(jù),同時接收STM32發(fā)送來的反饋信息。串口的波特率BR=115200bps,數(shù)據(jù)位8位,停止位1位。計算機的串口發(fā)送的數(shù)據(jù)以及調(diào)試助手中顯示的數(shù)據(jù)如表所示,要求用STM23CubeMX生成初始化程序,然后在Keil中編程實現(xiàn)DA轉(zhuǎn)換功能,使DAC的輸出引腳輸出對應(yīng)的電壓值,即實現(xiàn)電壓信號源的功能。任務(wù)要求串口發(fā)送的數(shù)據(jù)及回顯數(shù)據(jù)命令功能串口調(diào)試助手顯示的數(shù)據(jù)55AAVHVL5A且VHVL的值小于4096DA值合法,進(jìn)行DA轉(zhuǎn)換輸入數(shù)據(jù)為0xVHVL,即xx,輸出電壓為y.yyV55AAVHVL5A且VHVL的值大于4095DA值非法,不進(jìn)行DA轉(zhuǎn)換輸入數(shù)據(jù)為0xVHVL,即xx,輸入數(shù)據(jù)過大!其他命令非法,不進(jìn)行DA轉(zhuǎn)換輸入非法!表中,命令數(shù)據(jù)為十六進(jìn)制數(shù)。其中,55AA為數(shù)據(jù)頭,5A為數(shù)據(jù)尾,VH、VL為待轉(zhuǎn)換的DA數(shù)據(jù),VH為數(shù)據(jù)的高字節(jié)內(nèi)容,VL為數(shù)據(jù)的低字節(jié)內(nèi)容。例如,55AA07FF5A就表示輸入數(shù)據(jù)為合法的DA轉(zhuǎn)換數(shù)據(jù),DA轉(zhuǎn)換數(shù)據(jù)為0x07FF。任務(wù)要求串口發(fā)送的數(shù)據(jù)及回顯數(shù)據(jù)命令功能串口調(diào)試助手顯示的數(shù)據(jù)55AAVHVL5A且VHVL的值小于4096DA值合法,進(jìn)行DA轉(zhuǎn)換輸入數(shù)據(jù)為0xVHVL,即xx,輸出電壓為y.yyV55AAVHVL5A且VHVL的值大于4095DA值非法,不進(jìn)行DA轉(zhuǎn)換輸入數(shù)據(jù)為0xVHVL,即xx,輸入數(shù)據(jù)過大!其他命令非法,不進(jìn)行DA轉(zhuǎn)換輸入非法!xx為十六進(jìn)制數(shù)VHVL所對應(yīng)的十進(jìn)制數(shù),輸出電壓y.yy表示帶2位小數(shù)的十進(jìn)制電壓值。知識儲備

1.D/A轉(zhuǎn)換的基礎(chǔ)知識D/A轉(zhuǎn)換器的功能是將數(shù)字量轉(zhuǎn)換成與數(shù)字量成比例的模擬量,常用DAC表示。按照待轉(zhuǎn)換數(shù)字的位數(shù)可分為8位、10位、12位等幾種類型;按照輸出模擬量的類型可分為電流輸出型和電壓輸出型;按照DAC與微處理器的接口形式可分為串行DAC和并行DAC。就目前的使用情況來看,工程上偏向于選用串行DAC。(1)分辨率:輸入數(shù)字量變化1時,對應(yīng)的輸出模擬量的變化量。分辨率反映了輸出模擬量的最小變化值。設(shè)DAC的數(shù)字量的位數(shù)為n,則DAC的分辨率=滿量程電壓/(2n-1)。對于同等的滿量程電壓,DAC的位數(shù)越多,則分辨率越高。因此,分辨率也常用DAC的數(shù)字量的位數(shù)來表示。

1.D/A轉(zhuǎn)換的基礎(chǔ)知識(2)轉(zhuǎn)換時間:從數(shù)字量輸入至DAC開始到DAC完成轉(zhuǎn)換并輸出對應(yīng)的模擬量所需要的時間。轉(zhuǎn)換時間反映了DAC的轉(zhuǎn)換速度。(3)滿刻度誤差:數(shù)字量輸入為滿刻度(全1時),實際輸出的模擬量與理論值的偏差。

2.STM32中DAC的應(yīng)用特性STM32中集成有1個12位的電壓型的DAC,可設(shè)置為8位或者12位DAC。(1)DAC的引腳引腳功能VDDADAC的模擬部分的電源腳VSSADAC的模擬部分的地VREF+DAC的參考電壓DAC_OUTDA轉(zhuǎn)換的電壓輸出腳說明:有些DAC有VDDA、VSSA、VREF+、VREF-、DAC_OUT等5個引腳

2.STM32中DAC的應(yīng)用特性(2)DA轉(zhuǎn)換觸發(fā)方式:8種觸發(fā)方式含義SWTRIG軟件觸發(fā)TIM2_TRGOTIM2的TRGO事件觸發(fā)TIM4_TRGOTIM4的TRGO事件觸發(fā)TIM5_TRGOTIM5的TRGO事件觸發(fā)TIM6_TRGOTIM6的TRGO事件觸發(fā)TIM7_TRGOTIM7的TRGO事件觸發(fā)TIM8_TRGO對于大容量產(chǎn)品是TIM8的TRGO事件觸發(fā),對于互聯(lián)型產(chǎn)品是TIM3的TRGO事件觸發(fā)EXTI_9外部中斷線9觸發(fā)

2.STM32中DAC的應(yīng)用特性(3)轉(zhuǎn)換通道:2個,可同時進(jìn)行2路DA轉(zhuǎn)換,通道1的輸出引腳為PA4,通道2的輸出引腳為PA5。(4)寫入數(shù)據(jù)的對齊方式:對齊和右對齊2種方式。(5)DAC的輸出電壓:輸出引腳與VSSA引腳之間的電壓,輸出電壓如下:式中,VREF為DAC的參考電壓,VDAC為DA的轉(zhuǎn)換值,n為DAC的位數(shù)。例如,DAC的位數(shù)為12位,參考電壓為3.3V,若DA的轉(zhuǎn)換值為2047,則DAC的輸出電壓為:

2.STM32中DAC的應(yīng)用特性(6)輸出具緩沖功能(7)DAC具有DMA控制功能函數(shù)的用法(1)HAL_DAC_SetValue()函數(shù)3.HAL庫中有關(guān)DAC的常用函數(shù)和宏原型HAL_StatusTypeDefHAL_DAC_SetValue(DAC_HandleTypeDef*hdac,uint32_tChannel,uint32_tAlignment,uint32_tData);功能為DAC通道設(shè)置轉(zhuǎn)換值。參數(shù)1hdac:DAC句柄,取值為&hdac。其中,hdac為系統(tǒng)定義的保存DAC配置的結(jié)構(gòu)體變量。參數(shù)2Channel:DAC的通道號。該參數(shù)的取值及其含義下表所示。參數(shù)3Alignment:待轉(zhuǎn)換數(shù)據(jù)的對齊方式。該參數(shù)的取值及其含義如下表所示。參數(shù)4Data:待轉(zhuǎn)換的DAC數(shù)據(jù)。返回值HAL的狀態(tài)。Channel參數(shù)3.HAL庫中有關(guān)DAC的常用函數(shù)和宏Channel參數(shù)的取值含義DAC_CHANNEL_1選擇通道1DAC_CHANNEL_2選擇通道2Alignment參數(shù)的取值含義DAC_ALIGN_8B_R8位的右對齊數(shù)據(jù)DAC_ALIGN_12B_L12位的左對齊數(shù)據(jù)DAC_ALIGN_12B_R12位的右對齊數(shù)據(jù)Alignment參數(shù)例如,將DAC第1通道的轉(zhuǎn)換值設(shè)為2048,其中DA轉(zhuǎn)換數(shù)據(jù)為右對齊,其程序如下:

HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1,DAC_ALIGN_12B_R,2048);函數(shù)的用法(2)HAL_DAC_Start()函數(shù)3.HAL庫中有關(guān)DAC的常用函數(shù)和宏原型HAL_StatusTypeDefHAL_DAC_Start(DAC_HandleTypeDef*hdac,uint32_tChannel);功能啟動DAC指定通道的DA轉(zhuǎn)換。參數(shù)1hdac:DAC句柄,取值為&hdac。其中,hdac為系統(tǒng)定義的保存DAC配置的結(jié)構(gòu)體變量。參數(shù)2Channel:DAC的通道號。返回值HAL的狀態(tài)。例如,啟動DAC的第1通道的DA轉(zhuǎn)換,其程序如下:

HAL_DAC_Start(&hdac,DAC_CHANNEL_1);函數(shù)的用法(3)HAL_DAC_Stop()函數(shù)3.HAL庫中有關(guān)DAC的常用函數(shù)和宏原型HAL_StatusTypeDefHAL_DAC_Stop(DAC_HandleTypeDef*hdac,uint32_tChannel);功能停止DAC指定通道的DA轉(zhuǎn)換。參數(shù)1hdac:DAC句柄,取值為&hdac。其中,hdac為系統(tǒng)定義的保存DAC配置的結(jié)構(gòu)體變量。參數(shù)2Channel:DAC的通道號。返回值HAL的狀態(tài)。說明:在HAL庫中HAL_DAC_Stop_DMA()函數(shù)也是一個停止DA轉(zhuǎn)換函數(shù),但其功能是,停止DMA的方式控制的DA轉(zhuǎn)換。函數(shù)的用法(4)HAL_DAC_GetValue()函數(shù)3.HAL庫中有關(guān)DAC的常用函數(shù)和宏原型uint32_tHAL_DAC_GetValue(DAC_HandleTypeDef*hdac,uint32_tChannel);功能獲取DAC通道的轉(zhuǎn)換值。參數(shù)1hdac:DAC句柄,取值為&hdac。其中,hdac為系統(tǒng)定義的保存DAC配置的結(jié)構(gòu)體變量。參數(shù)2Channel:DAC的通道號。返回值HAL的狀態(tài)。實現(xiàn)方法與步驟任務(wù)16的硬件電路:

1.搭建電路

2.生成DAC的初始化代碼步驟(1)在“D:\ex”文件夾中新建Task16子文件夾。(2)將任務(wù)10的STM32CubeMX工程文件Task10.ioc(位于“D:\ex\Task10”文件夾中)復(fù)制到Task16文件夾中,并將其改名為Task16.ioc。(3)雙擊Task16.ioc文件圖標(biāo),打開任務(wù)16的STM32CubeMX工程文件。任務(wù)16中的絕大部分初始化代碼與任務(wù)10中的初始化代碼相同,可以通過修改任務(wù)10的STM32CubeMX工程來形成任務(wù)16的STM32CubeMX工程。

(4)配置DAC2.生成DAC的初始化代碼(5)保存工程,然后生成Keil工程代碼

3.編寫信號發(fā)生器的程序步驟(1)將任務(wù)10中位于“D:\ex\Task10”文件夾中的User子文件夾復(fù)制至“D:\ex\Task16”文件夾中。User子文件夾中保存的是串行通信文件Serial.c和Serial.h。(2)打開任務(wù)16的Keil工程,并按前面介紹的方法在Keil工程中新建User組,然后將“D:\ex\Task16\User”文件夾中的Serial.c文件添加至User組中。(3)在Keil工程的include路徑中添加“D:\ex\Task16\User”文件夾,該文件夾是Serial.h頭文件所在的文件夾。(4)在main.c文件中編寫用戶應(yīng)用程序,程序代碼如下:

3.編寫信號發(fā)生器的程序12345678910111213

14…#include "stdio.h"#include "string.h"#include "Serial.h"…uint8_t ComStr[3]={0x55,0xaa};//命令的部分代碼…intmain(void){char * fp;uint16_tval;…HAL_UART_Receive_IT(&huart1,&aRxBuf,1); /*使能串口1接收中斷,并指定接收緩沖區(qū)和接收數(shù)據(jù)長度*/while(1)

3.編寫信號發(fā)生器的程序141516

171819

20212223

2425while(1){if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET) /*判斷是否是空閑中斷(IDLE)發(fā)生*/

{

/****************************************************************/

if((fp=strstr((const char *)UserRxBuf,(const char *)ComStr))!=NULL)

{//收到0x55aa

if(*(fp+4)==0x5a) //檢查是否收到了幀尾0x5a

{ //收到了幀尾0x5a

val=((uint16_t)*(fp+2))<<8|(*(fp+3));/*將接收數(shù)據(jù)拼成DA轉(zhuǎn)換值*/

if(val<4096)/*檢查DA值的范圍*/

{/*在0~4095之間,則設(shè)置DA值,并啟動DA轉(zhuǎn)換*/

3.編寫信號發(fā)生器的程序2526

27

2829303132

333435 {/*在0~4095之間,則設(shè)置DA值,并啟動DA轉(zhuǎn)換*/ printf("當(dāng)前輸入數(shù)據(jù)為0x%x,即%d,輸出電壓為%.2fV\r\n",val,val,3.3*val/4095); HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1,DAC_ALIGN_12B_R,val);/*設(shè)置DA轉(zhuǎn)換值*/

HAL_DAC_Start(&hdac,DAC_CHANNEL_1);/*啟動DA轉(zhuǎn)換*/ } else {/*過大,則提示*/ printf("當(dāng)前輸入數(shù)據(jù)為0x%x,即%d,輸入數(shù)據(jù)過大!\r\n",val,val); } }

else

3.編寫信號發(fā)生器的程序35363738394041424344454647484950

else

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論