單片機(jī)產(chǎn)品設(shè)計(jì)與調(diào)試-基于STM32F1xx機(jī)型和HAL庫(kù)函數(shù) 課件 項(xiàng)目7 利用DAC實(shí)現(xiàn)LED亮度控制_第1頁(yè)
單片機(jī)產(chǎn)品設(shè)計(jì)與調(diào)試-基于STM32F1xx機(jī)型和HAL庫(kù)函數(shù) 課件 項(xiàng)目7 利用DAC實(shí)現(xiàn)LED亮度控制_第2頁(yè)
單片機(jī)產(chǎn)品設(shè)計(jì)與調(diào)試-基于STM32F1xx機(jī)型和HAL庫(kù)函數(shù) 課件 項(xiàng)目7 利用DAC實(shí)現(xiàn)LED亮度控制_第3頁(yè)
單片機(jī)產(chǎn)品設(shè)計(jì)與調(diào)試-基于STM32F1xx機(jī)型和HAL庫(kù)函數(shù) 課件 項(xiàng)目7 利用DAC實(shí)現(xiàn)LED亮度控制_第4頁(yè)
單片機(jī)產(chǎn)品設(shè)計(jì)與調(diào)試-基于STM32F1xx機(jī)型和HAL庫(kù)函數(shù) 課件 項(xiàng)目7 利用DAC實(shí)現(xiàn)LED亮度控制_第5頁(yè)
已閱讀5頁(yè),還剩67頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

單片機(jī)產(chǎn)品設(shè)計(jì)與制作

(stm32機(jī)型)項(xiàng)目7、利用DAC實(shí)現(xiàn)LED亮度控制任務(wù)7.1認(rèn)識(shí)STM32單片機(jī)的DAC總目錄1項(xiàng)目1、利用GPIO和位帶操作實(shí)現(xiàn)溫度報(bào)警

2項(xiàng)目2、利用SysTick實(shí)現(xiàn)溫度報(bào)警與控制

3項(xiàng)目3、利用按鍵查詢實(shí)現(xiàn)參數(shù)設(shè)定及顯示

4項(xiàng)目4、利用外部中斷實(shí)現(xiàn)工件計(jì)數(shù)顯示

5項(xiàng)目5、利用定時(shí)器實(shí)現(xiàn)直流電動(dòng)機(jī)PWM調(diào)速6項(xiàng)目6、利用計(jì)數(shù)器實(shí)現(xiàn)工件計(jì)數(shù)顯示和打包控制

7項(xiàng)目7、利用DAC實(shí)現(xiàn)LED亮度控制8項(xiàng)目8、利用ADC實(shí)現(xiàn)土壤濕度采集

項(xiàng)目總目標(biāo)項(xiàng)目總目標(biāo)具體工作任務(wù)利用STM32內(nèi)部DAC控制LED亮度。亮度值可由按鍵設(shè)定。請(qǐng)進(jìn)行方案設(shè)計(jì)、器件選型、電路和程序設(shè)計(jì),并完成軟硬件調(diào)試。子目錄7項(xiàng)目7、利用外部中斷實(shí)現(xiàn)工件計(jì)數(shù)及顯示

7.1任務(wù)7.1 認(rèn)識(shí)STM32單片機(jī)的DAC7.2任務(wù)7.2 方案及電路設(shè)計(jì)7.3任務(wù)7.3 程序設(shè)計(jì)7.4任務(wù)7.4 軟硬件深入(七)任務(wù)目標(biāo):了解STM32F103ZET6的DAC基本特性與原理,能看懂DAC結(jié)構(gòu)框圖任務(wù)7.1認(rèn)識(shí)STM32單片機(jī)的DAC分組討論自由發(fā)言,闡述對(duì)模擬量數(shù)字量的認(rèn)識(shí),查閱資料了解STM32的DAC。討論與發(fā)言舉一些例子說明自動(dòng)化系統(tǒng)中哪些是模擬量,哪些是數(shù)字量??偨Y(jié)什么是模擬量,什么是數(shù)字量?二者有何區(qū)別?什么是DAC?什么是ADC?衡量ADC和DAC性能的指標(biāo)有哪些?3、模擬信號(hào)的類型ADC和DAC設(shè)備允許的模擬信號(hào)多數(shù)為電壓、電流、電阻等。STM32F1xx的ADC是電壓輸入,允許輸入的范圍是VREF-

VIN

VREF+。STM32F1xx的DAC是電壓輸出,允許輸出的范圍也是VREF-

VOUT

VREF+。由于VREF-與VSSA接在一起,VREF-=0V,因此允許的模擬電壓輸入/輸出范圍就是0~VREF+。認(rèn)識(shí)DAC和ADC4、DAC的位數(shù)及其影響ADC和DAC電路常見有8、12、14、16、24位等。STM32F1xx的ADC和DAC都是12位的。那么DAC的位數(shù)對(duì)其性能有什么影響呢?對(duì)于1位的DAC,如果VREF=3.3V,則理想狀態(tài)下,向DAC寫“0”時(shí),引腳上輸出0V;向DAC寫“1”時(shí),引腳上輸出3.3V。輸出電壓和數(shù)字的關(guān)系為:VOUT=D×3.3。向DAC寫入數(shù)值每增加或減小1,輸出電壓跳變3.3V。對(duì)于2位的DAC,可以向DAC寫“00”、“01”、“10”、“11”四個(gè)二進(jìn)制數(shù)值,對(duì)應(yīng)十進(jìn)制為“0”、“1”、“2”、“3”。如果VREF=3.3V,則可將其設(shè)計(jì)為如下特性:向DAC寫“0”,即二進(jìn)制“00”時(shí),輸出電壓=0V;向DAC寫“1”,即二進(jìn)制“01”時(shí),輸出電壓=1.1V;向DAC寫“2”,即二進(jìn)制“10”時(shí),輸出電壓=2.2V;向DAC寫“3”,即二進(jìn)制“11”時(shí),輸出電壓=3.3V;輸出電壓和數(shù)字的關(guān)系為:VOUT=D×3.3/3。向DAC寫入數(shù)值每增加或減小1,輸出電壓跳變1.1V。認(rèn)識(shí)DAC和ADC4、DAC的位數(shù)及其影響我們將DAC輸出電壓跳變的最小值稱為電壓分辨率。電壓跳變值越小,DAC的分辨率越高。分辨率越高,DAC的電壓控制越精細(xì)。顯然2位DAC比1位DAC的分辨率更高。繼續(xù)增大位數(shù)n,會(huì)怎樣呢?表7.1.1給出了VREF+=3.3V時(shí),n=8、12、16三種情況下的數(shù)字量和電壓對(duì)應(yīng)關(guān)系。表7.1.1VREF=3.3V時(shí)不同位數(shù)DAC的數(shù)字和電壓對(duì)應(yīng)關(guān)系認(rèn)識(shí)DAC和ADC位數(shù)數(shù)字電壓轉(zhuǎn)換公式及分辨率二進(jìn)制十進(jìn)制n=80000000000×3.3/255=0V轉(zhuǎn)換公式:VOUT=D×255/3.3分辨率:3.3/255≈13mV0000000111×3.3/255≈12.941mV0000001022×3.3/255≈25.882mV………………11111110254254×3.3/255≈3.287V11111111255255×3.3/255=3.3Vn=1200000000000000×3.3/4095=0V轉(zhuǎn)換公式:VOUT=D×4095/3.3分辨率:3.3/4095≈0.8mV00000000000111×3.3/4095≈0.806mV00000000001022×3.3/4095≈1.612mV………………11111111111140954095×3.3/4095=3.3Vn=16000000000000000000×3.3/65535=0V轉(zhuǎn)換公式:VOUT=D×65535/3.3分辨率:3.3/65535≈50μV000000000000000111×3.3/65535≈50.355μV000000000000001022×3.3/4095≈100.710μV………………11111111111111116553565535×3.3/65535=3.3V認(rèn)識(shí)DAC結(jié)構(gòu)

1、DAC結(jié)構(gòu)框圖STM32F103的DAC結(jié)構(gòu)如圖7.1.2所示。STM32F103DAC內(nèi)部有兩個(gè)獨(dú)立的12位D/A轉(zhuǎn)換器,稱為DACx,x=1和2,它們是DAC的核心執(zhí)行部件,能夠?qū)ORx里存儲(chǔ)的數(shù)字量,轉(zhuǎn)換成0~VREF的模擬電壓,并輸出到DAC_OUTx引腳。DAC相關(guān)引腳除了DAC_OUTx(包括DAC_OUT1和DAC_OUT2),圖7.1.2中也標(biāo)出了其它相關(guān)引腳。它們的功能及要求如表7.1.2所示。注意DAC_OUT1固定復(fù)用PA4,DAC_OUT2則復(fù)用PA5。認(rèn)識(shí)STM32的DAC結(jié)構(gòu)DAC相關(guān)引腳除了DAC_OUTx(包括DAC_OUT1和DAC_OUT2),圖7.1.2中也標(biāo)出了其它相關(guān)引腳。它們的功能及要求如表7.1.2所示。注意DAC_OUT1固定復(fù)用PA4,DAC_OUT2則復(fù)用PA5。認(rèn)識(shí)STM32的DAC結(jié)構(gòu)名稱功能要求VDDA和VSSA供電電源正、負(fù)極2.4V≤VDDA≤VDD(最大不超過3.6V)VREF+和VREF-參考電源正、負(fù)極2.4V≤VREF+≤VDDAVREF-=VSSADAC_OUT1通道1的模擬電壓輸出復(fù)用PA4DAC_OUT2通道2的模擬電壓輸出復(fù)用PA5EXTI_9DAC外部觸發(fā)引腳復(fù)用尾號(hào)9的引腳例如PA9、PB9等,可指定4、DAC的數(shù)據(jù)寄存器DORx包括DOR1和DOR2,是數(shù)據(jù)輸出寄存器(DataOutputRegister),DORx的值決定了DACx輸出引腳上的電壓。例如DOR1=0,則DAC_OUT1引腳輸出0V;DOR1=4095,則DAC_OUT1引腳輸出電壓為VREF。DHRx是數(shù)據(jù)保持寄存器(DataHoldRegister)。編程時(shí)我們應(yīng)將數(shù)據(jù)寫到DHRx里。DAC工作時(shí),會(huì)按照一定的控制邏輯,將DHRx的值裝入DORx,之后進(jìn)行D/A轉(zhuǎn)換。認(rèn)識(shí)STM32的DAC結(jié)構(gòu)DAC的數(shù)據(jù)疊加將DHRx的數(shù)據(jù)向DORx裝載時(shí),有三種控制邏輯:不疊加:編程設(shè)置為不疊加時(shí),直接將DHRx的數(shù)據(jù)向DORx裝載,不疊加任何其它數(shù)據(jù)。疊加偽噪聲:將DHRx的數(shù)據(jù)疊加上偽噪聲后,再裝載到DORx。疊加三角波:將DHRx的數(shù)據(jù)疊加上三角波后,再裝載到DORx。疊加偽噪聲的形式,或者疊加三角波的幅度,都可以編程設(shè)定,感興趣的可閱讀《STM32F1xx參考手冊(cè)》。本項(xiàng)目主要學(xué)習(xí)不疊加模式。認(rèn)識(shí)STM32的DAC結(jié)構(gòu)認(rèn)識(shí)STM32的DAC結(jié)構(gòu)DAC控制寄存器DAC控制寄存器能夠根據(jù)程序設(shè)置,發(fā)出諸如ENx、TSELx、TENx、DMAENx、WAVENx、MAMPx等命令,控制DAC1和DAC2的工作。例如編程使能DAC1則EN1=1,只有EN1=1,DAC1才能夠工作。再例如設(shè)置DAC2使能和不疊加,則EN2=1和WAVEN2=00,這種情況下DAC控制寄存器會(huì)控制DHR2中的數(shù)據(jù)直接進(jìn)入DOR2不做任何疊加。認(rèn)識(shí)STM32的DAC結(jié)構(gòu)DAC的觸發(fā)DHR向DOR的裝載還需要觸發(fā)信號(hào)??梢跃幊淘O(shè)置為如下幾種觸發(fā)方式:外部觸發(fā)使能禁止(TENx=0)TEN就是TriggerEnable(觸發(fā)使能)。如果編程為“觸發(fā)使能禁止”,則CPU執(zhí)行該語(yǔ)句后DAC控制器會(huì)發(fā)出TENx=0信號(hào)。這種情況下,不需要任何額外的觸發(fā)信號(hào)。向DHRx寄存器寫數(shù)據(jù)后,數(shù)據(jù)會(huì)自動(dòng)裝入DORx,然后進(jìn)行D/A轉(zhuǎn)換并向?qū)?yīng)引腳輸出模擬電壓。2.如果編程設(shè)置為“觸發(fā)使能允許”,則執(zhí)行后,DAC還需要一個(gè)額外的觸發(fā)信號(hào),才能將DHRx中的數(shù)據(jù)裝入DORx??梢跃幊讨付ㄓ|發(fā)源TSELx(TriggerSelection)來(lái)自以下八種之一:SWTRIGx(SoftWareTrigger),軟件觸發(fā):DAC軟件觸發(fā)寄存器的SWTRIGx被軟件置位時(shí),觸發(fā)對(duì)應(yīng)通道的數(shù)據(jù)裝載。TIM2_TRGO、TIM4_TRGO~TIM8_TRGO,定時(shí)器TRGO事件觸發(fā):當(dāng)指定定時(shí)器(例如TIM2)發(fā)生TRGO事件時(shí)觸發(fā)數(shù)據(jù)裝載。EXTI_9,外部中斷9引腳觸發(fā):當(dāng)EXTI_9引腳上輸入有效信號(hào)時(shí)觸發(fā)數(shù)據(jù)裝載。本項(xiàng)目重點(diǎn)學(xué)習(xí)外部觸發(fā)禁止和軟件觸發(fā)兩種方式。認(rèn)識(shí)STM32的DAC結(jié)構(gòu)單DAC和雙DAC模式在STM32F1xxDAC內(nèi)部,DHR寄存器實(shí)際上有9個(gè),如圖7.1.3所示。DHR1和DHR2各有3個(gè)寄存器,它們?cè)趩蜠AC模式下工作。DHRD有3個(gè)寄存器,在雙DAC模式下工作。單DAC模式如圖(a)所示,兩個(gè)DAC獨(dú)立工作。向DHR12Rx、DHR12Lx或者DHR8Rx(x=1或2)六個(gè)寄存器中的任何一個(gè)寫數(shù)據(jù),數(shù)據(jù)將按一定規(guī)則送到DORx寄存器。雙DAC的模式如圖(b)所示,向DHR12RD、DHR12LD或者DHR8RD三個(gè)寄存器中的任意一個(gè)寫數(shù)據(jù),數(shù)據(jù)可以按照一定的規(guī)則同時(shí)或者分時(shí)送到DOR1和DOR2寄存器。本項(xiàng)目主要學(xué)習(xí)單DAC模式。圖7.1.3單DAC模式和雙DAC模式認(rèn)識(shí)STM32的DAC結(jié)構(gòu)DAC的數(shù)據(jù)對(duì)齊格式STM32F103的DAC是12位的,每個(gè)通道的DOR寄存器只需要12位數(shù)據(jù)。但是編程時(shí),向圖7.1.3中的DHR寄存器寫入的數(shù)據(jù)是32位的。數(shù)據(jù)對(duì)齊格式規(guī)定了如何將12位數(shù)據(jù)存儲(chǔ)在32位里。共有12位右對(duì)齊、12位左對(duì)齊和8位右對(duì)齊三種格式。(1)單DAC模式以通道1為例,如果希望DAC_OUT1引腳輸出2V電壓,按照12位D/A轉(zhuǎn)換公式,應(yīng)向DOR1寄存器送數(shù)據(jù)2V×4095/VREF=2V×4095/(3.3V)=2482,對(duì)應(yīng)12位二進(jìn)制數(shù)為100110110010。如果以12位右對(duì)齊格式寫數(shù)據(jù),應(yīng)將數(shù)據(jù)寫到DHR12R1寄存器,如圖7.1.4(a)所示。其規(guī)則是:將12位數(shù)據(jù)靠右(Right)放在D11~D0,D15~D12位補(bǔ)“0”,D31~D16不用。不用的位,是“1”還是“0”都不會(huì)對(duì)數(shù)值有影響,一般可以簡(jiǎn)單地認(rèn)為其值為“0”。12位右對(duì)齊這種格式,不會(huì)改變數(shù)據(jù)大小,除非數(shù)據(jù)大于4095。如果以12位左對(duì)齊格式寫數(shù)據(jù),應(yīng)將數(shù)據(jù)寫到DHR12L1寄存器,如圖(b)所示。其規(guī)則是:將12位數(shù)據(jù)靠左(Left)放在D15~D4,D3~D0位補(bǔ)“0”。相當(dāng)于將數(shù)據(jù)左移4位,數(shù)據(jù)大小變?yōu)樵瓉?lái)的16倍。如果以8位右對(duì)齊格式寫數(shù)據(jù),應(yīng)將數(shù)據(jù)寫到DHR8R1寄存器,如圖(c)所示。其規(guī)則是:將12位數(shù)據(jù)的最低4位舍棄,只留下8位,然后靠右(Right)存放,高8位補(bǔ)“0”。相當(dāng)于數(shù)據(jù)被右移了4位,此時(shí)數(shù)據(jù)大小變?yōu)樵瓉?lái)的1/16。以上以DOR1為例,DOR2也如此。表7.1.3三種數(shù)據(jù)格式下的DAC計(jì)算公式數(shù)據(jù)對(duì)齊格式轉(zhuǎn)換公式分辨率12位右對(duì)齊DDHR=VOUT×4095/VREFVREF/4095,DDHR每改變1,VOUT跳變一個(gè)12位分辨率12位左對(duì)齊DDHR=(VOUT×4095/VREF)×16=VOUT×65520/VREFVREF/4095,DDHR每改變16,VOUT跳變一個(gè)12位分辨率8位右對(duì)齊DDHR=(VOUT×4095/VREF)/16=VOUT×255/VREFVREF/255,DDHR每改變1,VOUT跳變一個(gè)8位分辨率認(rèn)識(shí)STM32的DAC結(jié)構(gòu)編程時(shí),如果指定為12位右對(duì)齊格式,仍可按照DDHR=VOUT×4095/VREF公式,計(jì)算待輸出數(shù)字量的大小。注意DDHR應(yīng)小于等于4095。如果指定為12位左對(duì)齊格式,應(yīng)將數(shù)據(jù)乘16,才可得到同樣的電壓輸出。即公式變?yōu)椋篋DHR=(VOUT×4095/VREF)×16=VOUT×65520/VREF,注意D應(yīng)小于等于65520。如果指定為8位右對(duì)齊格式,應(yīng)將數(shù)據(jù)除16,才可得到同樣的電壓輸出。即公式變?yōu)椋篋=(VOUT×4095/VREF)/16=VOUT×255/VREF,注意D應(yīng)小于等于255。12位右對(duì)齊格式下,輸出電壓的分辨率是VREF/4095。數(shù)字D每增加或減小1,輸出電壓跳變VREF/4095伏特,即一個(gè)12位分辨率電壓。認(rèn)識(shí)STM32的DAC結(jié)構(gòu)(2)雙DAC模式雙DAC模式下,使用DHRD(D:Double)寄存器,存儲(chǔ)規(guī)則如圖7.1.5所示。寫一次數(shù)據(jù),可以同時(shí)影響DOR1和DOR2兩個(gè)寄存器。圖7.1.5雙DAC的數(shù)據(jù)寄存器和數(shù)據(jù)對(duì)齊格式10、DAC的上電上電是DAC工作的前提。編程設(shè)置DAC通道x使能,執(zhí)行后DAC控制寄存器會(huì)發(fā)出ENx=1(Enable)信號(hào),這將使DAC通道x上電,編程設(shè)置DAC通道x禁止,執(zhí)行后DAC控制寄存器會(huì)發(fā)出ENx=0信號(hào),這將使DAC通道x斷電并停止工作。認(rèn)識(shí)STM32的DAC結(jié)構(gòu)

認(rèn)識(shí)STM32的DAC結(jié)構(gòu)項(xiàng)目總目標(biāo)1、理解DAC(Digital

toAnalogConverter)模/數(shù)轉(zhuǎn)換器的基本概念與術(shù)語(yǔ);2、了解STM32內(nèi)部DAC的結(jié)構(gòu)與特性。3、掌握基于STM32F103ZET6DAC的電路設(shè)計(jì)方法。4、掌握STM32基于HAL庫(kù)函數(shù)的ADC操作編程方法;5、會(huì)查找相關(guān)資料、閱讀相關(guān)文獻(xiàn)。單片機(jī)產(chǎn)品設(shè)計(jì)與制作

(stm32機(jī)型)石梅香項(xiàng)目7、利用DAC實(shí)現(xiàn)LED亮度控制任務(wù)7.2認(rèn)識(shí)STM32單片機(jī)的DAC總目錄1項(xiàng)目1、利用GPIO和位帶操作實(shí)現(xiàn)溫度報(bào)警

2項(xiàng)目2、利用SysTick實(shí)現(xiàn)溫度報(bào)警與控制

3項(xiàng)目3、利用按鍵查詢實(shí)現(xiàn)參數(shù)設(shè)定及顯示

4項(xiàng)目4、利用外部中斷實(shí)現(xiàn)工件計(jì)數(shù)顯示

5項(xiàng)目5、利用定時(shí)器實(shí)現(xiàn)直流電動(dòng)機(jī)PWM調(diào)速6項(xiàng)目6、利用計(jì)數(shù)器實(shí)現(xiàn)工件計(jì)數(shù)顯示和打包控制

7項(xiàng)目7、利用DAC實(shí)現(xiàn)LED亮度控制8項(xiàng)目8、利用ADC實(shí)現(xiàn)土壤濕度采集

項(xiàng)目總目標(biāo)項(xiàng)目總目標(biāo)具體工作任務(wù)利用STM32內(nèi)部DAC控制LED亮度。亮度值可由按鍵設(shè)定。請(qǐng)進(jìn)行方案設(shè)計(jì)、器件選型、電路和程序設(shè)計(jì),并完成軟硬件調(diào)試。子目錄7項(xiàng)目7、利用外部中斷實(shí)現(xiàn)工件計(jì)數(shù)及顯示

7.1任務(wù)7.1 認(rèn)識(shí)STM32單片機(jī)的DAC7.2任務(wù)7.2 方案及電路設(shè)計(jì)7.3任務(wù)7.3 程序設(shè)計(jì)7.4任務(wù)7.4 軟硬件深入(七)任務(wù)7.2方案及電路設(shè)計(jì)一、任務(wù)要求1、能夠查閱相關(guān)技術(shù)資料,結(jié)合電路、電子、傳感器等基礎(chǔ)知識(shí)進(jìn)行系統(tǒng)方案設(shè)計(jì)和器件選型;2、能夠針對(duì)設(shè)計(jì)任務(wù)進(jìn)行研討和表達(dá)。3、能夠讀懂利用STM32DAC的LED亮度控制電路。并能夠根據(jù)控制要求的變化對(duì)電路進(jìn)行適應(yīng)性修改。討論用PWM和DAC控制LED亮度的不同之處。討論與發(fā)言方案設(shè)計(jì)單片機(jī)產(chǎn)品設(shè)計(jì)與制作

(stm32機(jī)型)石梅香項(xiàng)目7、利用DAC實(shí)現(xiàn)LED亮度控制任務(wù)7.3程序設(shè)計(jì)與調(diào)試總目錄1項(xiàng)目1、利用GPIO和位帶操作實(shí)現(xiàn)溫度報(bào)警

2項(xiàng)目2、利用SysTick實(shí)現(xiàn)溫度報(bào)警與控制

3項(xiàng)目3、利用按鍵查詢實(shí)現(xiàn)參數(shù)設(shè)定及顯示

4項(xiàng)目4、利用外部中斷實(shí)現(xiàn)工件計(jì)數(shù)顯示

5項(xiàng)目5、利用定時(shí)器實(shí)現(xiàn)直流電動(dòng)機(jī)PWM調(diào)速6項(xiàng)目6、利用計(jì)數(shù)器實(shí)現(xiàn)工件計(jì)數(shù)顯示和打包控制

7項(xiàng)目7、利用DAC實(shí)現(xiàn)LED亮度控制8項(xiàng)目8、利用ADC實(shí)現(xiàn)土壤濕度采集

項(xiàng)目總目標(biāo)項(xiàng)目總目標(biāo)具體工作任務(wù)利用STM32內(nèi)部DAC控制LED亮度。亮度值可由按鍵設(shè)定。請(qǐng)進(jìn)行方案設(shè)計(jì)、器件選型、電路和程序設(shè)計(jì),并完成軟硬件調(diào)試。子目錄7項(xiàng)目7、利用外部中斷實(shí)現(xiàn)工件計(jì)數(shù)及顯示

7.1任務(wù)7.1 認(rèn)識(shí)STM32單片機(jī)的DAC7.2任務(wù)7.2 方案及電路設(shè)計(jì)7.3任務(wù)7.3 程序設(shè)計(jì)7.4任務(wù)7.4 軟硬件深入(七)任務(wù)7.3程序設(shè)計(jì)與調(diào)試一、任務(wù)要求1、能根據(jù)任務(wù)需求繪制程序流程圖;2、能夠讀懂程序并根據(jù)需求變化對(duì)DAC程序進(jìn)行適應(yīng)性修改分組討論要利用DAC實(shí)現(xiàn)LED亮度控制任務(wù),程序大致應(yīng)該完成哪些工作。討論與發(fā)言程序流程設(shè)計(jì)圖7.3.1單通道、查詢法程序流程程序布局程序框架如圖7.3.2所示,可從之前的工程復(fù)制而來(lái),注意:(1)HARDWARE文件夾中需要增加一個(gè)DAC文件夾,內(nèi)有dac.c和dac.h文件。(2)修改工程名為:Test_DAC。(3)Project窗口的HALLIB下應(yīng)增加stm32f1xx_dma.c、stm32f1xx_dac_ex.c、stm32f1xx_dac.c文件。(4)Project窗口的HARDWARE下應(yīng)有dac.c。(5)Options中的包含路徑中應(yīng)包含DAC文件夾。(1)第4行定義變量DAC_Handler,其類型為DAC_HandleTypeDef,用于DAC的各種操作。其具體內(nèi)容參見表7.3.1。(2)第5行定義變量DAC_OUT_Value,用于存儲(chǔ)準(zhǔn)備送到DAC數(shù)據(jù)保持寄存器DHR的數(shù)據(jù),該數(shù)據(jù)的大小決定了DAC輸出電壓。(3)第10行調(diào)用函數(shù)DAC_Init()對(duì)DAC初始化。該函數(shù)具體內(nèi)容見表7.3.1。(4)第13~20行用于測(cè)試DAC_OUT_Value送不同數(shù)值時(shí)對(duì)應(yīng)的模擬電壓輸出。其中:(5)第13~17行用于向DAC_OUT_Value送不同數(shù)值。(6)第18、20行調(diào)用庫(kù)函數(shù)HAL_DAC_SetValue()向兩個(gè)DAC通道傳送待轉(zhuǎn)換數(shù)值。主程序設(shè)計(jì)與調(diào)試DAC程序設(shè)計(jì)DAC程序設(shè)計(jì)DAC操作相關(guān)庫(kù)函數(shù)1、DAC操作變量數(shù)據(jù)類型:

DAC_HandleTypeDef

typedefstruct{DAC_TypeDef*Instance;

//待配置設(shè)備名,

DAC或DAC1,注意DAC、DAC2和DAC1都用一個(gè)名字

__IO

HAL_DAC_StateTypeDefState;

//狀態(tài)

HAL_LockTypeDef

Lock;

//鎖定

DMA_HandleTypeDef*DMA_Handle1;

//通道1DMA操作變量

DMA_HandleTypeDef*DMA_Handle2;

//通道2DMA操作變量

__IO

uint32_t

ErrorCode;

//錯(cuò)誤代碼……

……;

//其它}DAC_HandleTypeDef

;2、DAC賦值函數(shù):

HAL_DAC_SetValue(&DAC操作變量,通道號(hào),數(shù)據(jù)對(duì)齊格式,數(shù)據(jù))原型:HAL_StatusTypeDef

HAL_DAC_SetValue(DAC_HandleTypeDef

*hdac,uint32_t

Channel,

uint32_t

Alignment,

uint32_t

Data)功能:將數(shù)據(jù)Data送到hdac和Channel指定的DAC通道,數(shù)據(jù)格式是Alignment入口參數(shù):(1)hdac,指出是哪個(gè)DAC操作變量,其數(shù)據(jù)類型為

DAC_HandleTypeDef,結(jié)構(gòu)體變量(2)Channel,指出是哪個(gè)通道,其取值為:DAC_CHANNEL_1或DAC_CHANNEL_2(3)Alignment,指出數(shù)據(jù)對(duì)齊格式,其取值為:DAC_ALIGN_12B_R(12位右對(duì)齊)、DAC_ALIGN_12B_L(12位左對(duì)齊)、DAC_ALIGN_8B_R(8位右對(duì)齊)(4)Data,待傳送數(shù)據(jù),數(shù)據(jù)類型為

uint32_t返回值:類型為HAL_StatusTypeDef,返回結(jié)果有4種:HAL_OK=0x00;

HAL_ERROR=0x01;

HAL_BUSY=0x02;

HAL_TIMEOUT=0x033、DAC初始化函數(shù):

HAL_DAC_Init(&DAC操作變量)函數(shù)原型:HAL_StatusTypeDef

HAL_DAC_Init

(DAC_HandleTypeDef*hdac)功能:(1)按照變量hdac的設(shè)置,初始化DAC,其數(shù)據(jù)類型為

DAC_HandleTypeDef,結(jié)構(gòu)體變量(2)調(diào)用__weakvoidHAL_DAC_MspInit(DAC_HandleTypeDef

*hdac)

庫(kù)函數(shù)(3)返回操作結(jié)果入口參數(shù):hdac,指出如何進(jìn)行DAC初始化,其數(shù)據(jù)類型為

DAC_HandleTypeDef,結(jié)構(gòu)體變量返回值:

同函數(shù)HAL_DAC_SetValue()DAC程序設(shè)計(jì)DAC操作相關(guān)庫(kù)函數(shù)4、DAC初始化隱性調(diào)用函數(shù):HAL_DAC_MspInit(DAC_HandleTypeDef*hdac)原型:__weak

voidHAL_DAC_MspInit(DAC_HandleTypeDef*hdac)功能:針對(duì)DAC操作變量hdac,執(zhí)行本函數(shù)的內(nèi)容說明:本函數(shù)在庫(kù)中被定義為__weak(弱)型,函數(shù)內(nèi)容可根據(jù)用戶需要自定義返回值:

空5、DAC通道設(shè)置變量數(shù)據(jù)類型:DAC_ChannelConfTypeDef

typedefstruct{ uint32_t

DAC_Trigger;

//觸發(fā)方式,有以下取值:DAC_TRIGGER_NONE(不需要外部觸發(fā))、//DAC_TRIGGER_EXT_IT9(外部中斷9觸發(fā))、//DAC_TRIGGER_T2_TRGO(TIM2TRGO事件觸發(fā))、//DAC_TRIGGER_T4_TRGO(TIM4TRGO事件觸發(fā))、//DAC_TRIGGER_T5_TRGO~DAC_TRIGGER_T8_TRGO(TIM5~TIM8TRGO事件觸發(fā))uint32_t

DAC_OutputBuffer;

//DAC輸出緩沖器,有兩種取值:DAC_OUTPUTBUFFER_ENABLE(允許)、

//DAC_OUTPUTBUFFER_DISABLE(禁止)}DAC_ChannelConfTypeDef;6、DAC通道設(shè)置函數(shù):HAL_DAC_ConfigChannel(&DAC操作變量,&DAC通道設(shè)置變量,通道號(hào))函數(shù)原型:HAL_StatusTypeDefHAL_DAC_ConfigChannel(DAC_HandleTypeDef*hdac,DAC_ChannelConfTypeDef*sConfig,uint32_tChannel)功能:按照sConfig的設(shè)置,對(duì)hdac和Channel指定的DAC通道進(jìn)行設(shè)置入口參數(shù):hdac,指出是哪個(gè)DAC操作變量,數(shù)據(jù)類型為DAC_HandleTypeDef,結(jié)構(gòu)體變量sConfig:指出如何進(jìn)行通道配置,數(shù)據(jù)類型為DAC_ChannelConfTypeDef,結(jié)構(gòu)體變量Channel:指出是哪個(gè)通道,取值為DAC_CHANNEL_1或DAC_CHANNEL_2返回值:

同函數(shù)HAL_DAC_SetValue()7、DAC啟動(dòng)函數(shù):HAL_DAC_Start(&DAC操作變量,通道號(hào))函數(shù)原型:HAL_StatusTypeDefHAL_DAC_Start(DAC_HandleTypeDef*hdac,uint32_tChannel)功能:(1)給指定的DAC通道上電

(2)如果是軟件觸發(fā),則發(fā)一個(gè)觸發(fā)信號(hào),將DHR中的數(shù)據(jù)裝入DOR入口參數(shù):hdac,指出是哪個(gè)DAC操作變量,數(shù)據(jù)類型為DAC_HandleTypeDef,結(jié)構(gòu)體變量Channel:指出是哪個(gè)通道,取值為DAC_CHANNEL_1或DAC_CHANNEL_2返回值:同函數(shù)HAL_DAC_SetValue()8、DAC停止函數(shù):HAL_DAC_Stop(&DAC操作變量,通道號(hào))函數(shù)原型:HAL_StatusTypeDefHAL_DAC_Stop(DAC_HandleTypeDef*hdac,uint32_tChannel)功能:給指定的DAC通道斷電,使其停止工作入口參數(shù):hdac,指出是哪個(gè)DAC操作變量,數(shù)據(jù)類型為DAC_HandleTypeDef,結(jié)構(gòu)體變量Channel:指出是哪個(gè)通道,取值為DAC_CHANNEL_1或DAC_CHANNEL_2

返回值:同函數(shù)HAL_DAC_SetValue()DAC程序設(shè)計(jì)DAC操作相關(guān)庫(kù)函數(shù)7、DAC啟動(dòng)函數(shù):HAL_DAC_Start(&DAC操作變量,通道號(hào))函數(shù)原型:HAL_StatusTypeDefHAL_DAC_Start(DAC_HandleTypeDef*hdac,uint32_tChannel)功能:(1)給指定的DAC通道上電

(2)如果是軟件觸發(fā),則發(fā)一個(gè)觸發(fā)信號(hào),將DHR中的數(shù)據(jù)裝入DOR入口參數(shù):hdac,指出是哪個(gè)DAC操作變量,數(shù)據(jù)類型為DAC_HandleTypeDef,結(jié)構(gòu)體變量Channel:指出是哪個(gè)通道,取值為DAC_CHANNEL_1或DAC_CHANNEL_2返回值:同函數(shù)HAL_DAC_SetValue()8、DAC停止函數(shù):HAL_DAC_Stop(&DAC操作變量,通道號(hào))函數(shù)原型:HAL_StatusTypeDefHAL_DAC_Stop(DAC_HandleTypeDef*hdac,uint32_tChannel)功能:給指定的DAC通道斷電,使其停止工作入口參數(shù):hdac,指出是哪個(gè)DAC操作變量,數(shù)據(jù)類型為DAC_HandleTypeDef,結(jié)構(gòu)體變量Channel:指出是哪個(gè)通道,取值為DAC_CHANNEL_1或DAC_CHANNEL_2

返回值:同函數(shù)HAL_DAC_SetValue()軟硬件調(diào)試(1)修改程序,向變量DAC_OUT_Value送0。編譯生成后下載到開發(fā)板。(2)用萬(wàn)用表測(cè)量PA4和PA5引腳,應(yīng)該輸出0V左右的電壓。(3)修改程序,向變量DAC_OUT_Value送1000。編譯生成后下載到開發(fā)板。(4)用萬(wàn)用表測(cè)量PA4和PA5引腳,應(yīng)該輸出0.8V左右的電壓。(5)修改程序,向變量DAC_OUT_Value分別送2482、3000、4095,應(yīng)該在PA4和PA5上得到相應(yīng)的電壓。(6)按照自己的想法給DAC_OUT_Value賦值,運(yùn)行后測(cè)一下輸出電壓是否和自己計(jì)算的一樣。(7)修改程序,測(cè)試12位右對(duì)齊、12位左對(duì)齊和8位右對(duì)齊格式下的輸出。說一說它們的區(qū)別。(8)進(jìn)入在線調(diào)試模式,設(shè)斷點(diǎn)運(yùn)行,觀察在各個(gè)斷點(diǎn)處DHR和DOR寄存器內(nèi)容的變化,體會(huì)DAC的工作過程。(9)想一想如果DAC采用軟件觸發(fā),程序該怎么編寫?試一下。軟硬件調(diào)試(1)修改程序,向變量DAC_OUT_Value送0。編譯生成后下載到開發(fā)板。(2)用萬(wàn)用表測(cè)量PA4和PA5引腳,應(yīng)該輸出0V左右的電壓。(3)修改程序,向變量DAC_OUT_Value送1000。編譯生成后下載到開發(fā)板。(4)用萬(wàn)用表測(cè)量PA4和PA5引腳,應(yīng)該輸出0.8V左右的電壓。(5)修改程序,向變量DAC_OUT_Value分別送2482、3000、4095,應(yīng)該在PA4和PA5上得到相應(yīng)的電壓。(6)按照自己的想法給DAC_OUT_Value賦值,運(yùn)行后測(cè)一下輸出電壓是否和自己計(jì)算的一樣。(7)修改程序,測(cè)試12位右對(duì)齊、12位左對(duì)齊和8位右對(duì)齊格式下的輸出。說一說它們的區(qū)別。(8)進(jìn)入在線調(diào)試模式,設(shè)斷點(diǎn)運(yùn)行,觀察在各個(gè)斷點(diǎn)處DHR和DOR寄存器內(nèi)容的變化,體會(huì)DAC的工作過程。(9)想一想如果DAC采用軟件觸發(fā),程序該怎么編寫?試一下。LED亮度控制程序設(shè)計(jì)與調(diào)試要求:用外部中斷0和外部中斷3接收加鍵和減鍵輸入,改變亮度設(shè)定值。圖7.3.4

利用DAC實(shí)現(xiàn)LED亮度控制程序流程程序框架要求:用外部中斷0和外部中斷3接收加鍵和減鍵輸入,改變亮度設(shè)定值。圖7.3.5

程序框架程序設(shè)計(jì)主程序程序設(shè)計(jì)中斷程序程序調(diào)試(1)用導(dǎo)線將開發(fā)板上的PA4和PC1引腳、PA5和PC2引腳連接在一起,以便能夠觀察LED亮度變化。(2)對(duì)程序進(jìn)行編輯、編譯、生成后,下載到開發(fā)板。由于DAC_OUT_Value初始值=0,可見到兩個(gè)LED都是點(diǎn)亮的。(3)多次點(diǎn)按K_UP鍵后,可觀察到亮度開始逐漸減小直至滅掉。(4)多次點(diǎn)按K_DOWN鍵后,可觀察到亮度開始逐漸增大直至最大。(5)修改exti.c的第42和46行,使DAC_OUT_Value每次加1或減1,看看是什么效果?(6)修改exti.c的第42和46行,使DAC_OUT_Value每次加5或減5,看看是什么效果?(7)修改exti.c的第51行,使DAC_OUT_Value限幅值為4095;再修改主程序,使數(shù)據(jù)格式變?yōu)?2位右對(duì)齊,看看是什么效果?項(xiàng)目總目標(biāo)1、理解DAC(Digital

toAnalogConverter)模/數(shù)轉(zhuǎn)換器的基本概念與術(shù)語(yǔ);2、了解STM32內(nèi)部DAC的結(jié)構(gòu)與特性。3、掌握基于STM32F103ZET6DAC的電路設(shè)計(jì)方法。4、掌握STM32基于HAL庫(kù)函數(shù)的ADC操作編程方法;5、會(huì)查找相關(guān)資料、閱讀相關(guān)文獻(xiàn)。單片機(jī)產(chǎn)品設(shè)計(jì)與制作

(stm32機(jī)型)石梅香項(xiàng)目7、利用DAC實(shí)現(xiàn)LED亮度控制任務(wù)7.4

STM32軟硬件深入(七)總目錄1項(xiàng)目1、利用GPIO和位帶操作實(shí)現(xiàn)溫度報(bào)警

2項(xiàng)目2、利用SysTick實(shí)現(xiàn)溫度報(bào)警與控制

3項(xiàng)目3、利用按鍵查詢實(shí)現(xiàn)參數(shù)設(shè)定及顯示

4項(xiàng)目4、利用外部中斷實(shí)現(xiàn)工件計(jì)數(shù)顯示

5項(xiàng)目5、利用定時(shí)器實(shí)現(xiàn)直流電動(dòng)機(jī)P

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論