0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【GD32 MCU 入門教程】GD32 MCU 常見外設(shè)介紹(13)DAC 模塊介紹

聚沃科技 ? 2024-08-22 09:28 ? 次閱讀

DAC是一種把二進制數(shù)字量形式的離散信號轉(zhuǎn)換成以標準量(或參考量)為基準的模擬量的轉(zhuǎn)換器,它常用于過程控制計算機系統(tǒng)的輸出通道,與執(zhí)行器相連,實現(xiàn)對生產(chǎn)過程的自動控制。

13.1.GD32 DAC 外設(shè)原理簡介

因篇幅有限,本文無法詳細介紹GD32所有系列的DAC,下面以GD32F30x為例,先著重介紹下GD32F30x的DAC及其結(jié)構(gòu)框圖,然后介紹下各個系列DAC的差異。

GD32F30x DAC 主要特性

? 8位或12位分辨率,數(shù)據(jù)左對齊或右對齊;

? 每個通道帶有DMA功能;

? 同步更新轉(zhuǎn)換;

? 外部事件觸發(fā)轉(zhuǎn)換;

? 可配置的內(nèi)部緩沖區(qū);

? 輸入?yún)⒖茧妷?a target="_blank">VREF+;

? 噪聲波生成(LSFR噪聲模式和三角噪聲模式);

? 雙DAC并發(fā)模式。

DAC 結(jié)構(gòu)框圖介紹

輸入圖片說明

GD32F30x一共有兩個DAC,分別為DAC0和DAC1,其輸出DAC_OUT0和DAC_OUT1分別對應(yīng)PA4和PA5。由于DAC輸出為模擬量,因此在使能DAC模塊前,需要把相應(yīng)的GPIO口設(shè)置為模擬模式。DAC的輸出集成了輸出緩沖器Buff,可用來降低輸出阻抗,并在不增加外部運算放大器的情況下直接驅(qū)動外部負載。通過設(shè)置DAC_CTL寄存器的DBOFFx位,可以使能或禁止各DAC通道輸出緩沖器。

DAC的輸出可以由多種觸發(fā)源控制,觸發(fā)源的選擇由DAC_CTL寄存器的DTSELx[2:0]位控制,具體為:

000:TIMER5_TRGO

001:TIMER2_TRGO(互聯(lián)型產(chǎn)品)

TIMER7_TRGO(非互聯(lián)型產(chǎn)品)

010:TIMER6_TRGO

011:TIMER4_TRGO

100:TIMER1_TRGO

101:TIMER3_TRGO

110:EXTI9

111:SWTRIG

有兩種方式可以將噪聲波加載到DAC輸出數(shù)據(jù):LFSR噪聲波和三角波。噪聲波模式可以通過DAC_CTL寄存器的DWMx位來進行選擇。噪聲的幅值可以通過配置DAC_CTL寄存器的DAC噪聲波位寬(DWBWx)位來進行設(shè)置。

LFSR噪聲模式:為了生成可變振幅的偽噪聲,可使用LFSR(線性反饋移位寄存器)。LFSR的值與DACx_DH值相加后寫入到DAC數(shù)據(jù)輸出寄存器(DACx_DO)。LFSR中的預(yù)加載值為0xAAA,在每次觸發(fā)事件發(fā)生后,該寄存器的值會依照特定的算法完成更新。

三角波模式:在DAC的輸出信號上可以疊加一個小幅度的三角波。該三角波幅值的最小值為0,最大值為(2<

輸入圖片說明

DAC可以實現(xiàn)8位或者12位分辨率,也可以實現(xiàn)數(shù)據(jù)左對齊或者右對齊,這取決于用戶的實際需求。當(dāng)分辨率為12位時,DAC的模擬輸出電壓與數(shù)字量的關(guān)系為:

輸入圖片說明

上式中,DAC_DO為DAC數(shù)據(jù)輸出寄存器的值,VREF+為DAC的參考電壓,其范圍為2.6V~VDDA。

每個DAC通道都具有DMA功能。兩個DMA通道分別用于處理DAC通道的DMA請求。當(dāng)DAC_CTL寄存器的DDMAENx置位時,如果發(fā)生了外部觸發(fā)(而不是軟件觸發(fā)),則將產(chǎn)生DMA請求。

各系列 DAC 功能差異

GD32系列MCU有關(guān)DAC外設(shè)各系列功能差異如下表所示

輸入圖片說明

13.2.軟件配置說明

本小節(jié)講解DAC_Example歷程中DAC模塊的配置說明,主要包括外設(shè)時鐘配置、GPIO引腳配置、DAC外設(shè)配置、主函數(shù)介紹以及運行結(jié)果。本例程主要介紹GD32 MCU各系列DAC0模塊輸出模擬電壓,有關(guān)DAC其他功能例程可參考各系列固件庫例程。

外設(shè)時鐘配置

外設(shè)時鐘配置如代碼清單DAC例程時鐘配置所示,在GD32全系列MCU中需打開GPIOA和DAC0的時鐘,因為使用到PA4引腳以及DAC0模塊。

代碼清單 DAC 例程時鐘配置

void rcu_config(void) { rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_DAC); }

GPIO 引腳配置

GPIO引腳配置如代碼清單DAC例程GPIO引腳配置所示,GD32F10X、GD32F20X、GD32F30X、GD32E10X、GD32F403系列GPIO配置相同;GD32F1X0、GD32F4XX、GD32F350系列GPIO配置相同。注意,以上所呈現(xiàn)的不同,只是調(diào)用gpio初始化函數(shù)不同,配置是一樣的,都是把PA4配置為模擬模式。

代碼清單 DAC 例程 GPIO 引腳配置

void gpio_config(void) { #if defined (GD32F10X_HD)||(GD32F20X_CL)||(GD32F30X_HD)||(GD32E10X) gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_4); #elif defined (GD32F1X0) || (GD32F4XX) || defined (GD32F350) gpio_mode_set(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_4); #endif }

DAC 外設(shè)配置

DAC外設(shè)配置如代碼清單 DAC例程DAC外設(shè)配置所示。GD32全系列MCU中DAC外設(shè)配置基本相同,在本例程中,配置DAC為軟件觸發(fā),每當(dāng)使能一次軟件觸發(fā),DAC就會把DAC數(shù)據(jù)寄存器的值轉(zhuǎn)換為模擬電壓輸出。

代碼清單 DAC 例程 DAC 外設(shè)配置

void dac_config(void) { #if defined (GD32F10X_HD)||(GD32F20X_CL)||(GD32F30X_HD)||(GD32F4XX)||(GD32E10X) dac_deinit(); dac_trigger_enable(DAC0); dac_trigger_source_config(DAC0,DAC_TRIGGER_SOFTWARE); /* enable DAC */ dac_enable(DAC0); #elif defined (GD32F350) dac_deinit(); dac_trigger_enable(); dac_trigger_source_config(DAC_TRIGGER_SOFTWARE); /* enable DAC */ dac_enable(); #elif defined (GD32F1X0) dac_deinit(); dac0_trigger_enable(); dac0_trigger_source_config(DAC_TRIGGER_SOFTWARE); /* enable DAC */ dac0_enable(); #endif }

主函數(shù)說明

主函數(shù)如代碼清單 DAC例程主函數(shù)所示,該主函數(shù)主要分成四部分,RCU時鐘配置、GPIO配置、DAC外設(shè)配置和while(1)循環(huán),前三部分已在前三小節(jié)介紹,在while(1)主循環(huán)中先設(shè)置一下DAC將要輸出的模擬電壓值,然后使能軟件觸發(fā)輸出該模擬電壓,延時一段時間后,再設(shè)置新的模擬電壓值,如此循環(huán)。dac_value_set函數(shù)用于設(shè)置模擬輸出電壓值,單位為mV。delay函數(shù)是一個簡單的軟件延時函數(shù),用于實現(xiàn)延時。這兩個函數(shù)的代碼清單如代碼清單DAC例程部分函數(shù)說明所示。

代碼清單 DAC 例程主函數(shù)

int main(void) { /* peripheral clock enable */ rcu_config(); /* GPIO config */ gpio_config(); /* DAC config */ dac_config(); while(1) { #if defined (GD32F10X_HD)||(GD32F20X_CL)||(GD32F30X_HD)||(GD32F4XX)||(GD32E10X) dac_value_set(1000);//1000mV dac_software_trigger_enable(DAC0); delay(2000); dac_value_set(2000);//2000mV dac_software_trigger_enable(DAC0); delay(2000); #elif defined (GD32F350) dac_value_set(1000);//1000mV dac_software_trigger_enable(); delay(2000); dac_value_set(2000);//2000mV dac_software_trigger_enable(); delay(2000); #elif defined (GD32F1X0) dac_value_set(1000);//1000mV dac0_software_trigger_enable(); delay(2000); dac_value_set(2000);//2000mV dac0_software_trigger_enable(); delay(2000); #endif } }

代碼清單 DAC 例程部分函數(shù)說明

/*! \brief set DAC output voltage \param[in] vol: output voltage, unit: mV \param[out] none \retval none */ static void dac_value_set(uint16_t vol) { uint16_t dac_reg_value; dac_reg_value = vol*4096.0/3300; #if defined (GD32F10X_HD)||(GD32F20X_CL)||(GD32F30X_HD)||(GD32F4XX)||(GD32E10X) dac_data_set(DAC0,DAC_ALIGN_12B_R,dac_reg_value); #elif defined (GD32F350) dac_data_set(DAC_ALIGN_12B_R,dac_reg_value); #elif defined (GD32F1X0) dac0_data_set(DAC_ALIGN_12B_R,dac_reg_value); #endif } /*! \brief delay \param[in] cnt: delay count \param[out] none \retval none */ static void delay(uint16_t cnt) { while(cnt--); }

運行結(jié)果

將DAC_Example例程按照對應(yīng)的芯片工程編譯完成后,下載到對應(yīng)芯片中,用示波器查看PA4引腳波形,如下圖圖DAC輸出電壓波形圖所示,可以看到,DAC輸出的模擬電壓與我們所設(shè)置的值是一樣的。

輸入圖片說明

13.3.DAC 使用注意事項

(1) 在使能DAC模塊前,GPIO口(PA4對應(yīng)DAC0,PA5對應(yīng)DAC1)應(yīng)該配置為模擬模式;

(2) 將DAC_CTL寄存器中的DENx位置1可以給DAC上電。DAC子模塊完全啟動需要等tWAKEUP時間。

(3) 為了實現(xiàn)更好的輸出帶載能力,建議打開DAC的輸出緩沖器。

教程GD32 MCU方案商聚沃科技原創(chuàng)發(fā)布,了解更多GD32 MCU教程,關(guān)注聚沃科技官網(wǎng)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關(guān)注

    關(guān)注

    6030

    文章

    44489

    瀏覽量

    631958
  • 嵌入式
    +關(guān)注

    關(guān)注

    5059

    文章

    18973

    瀏覽量

    301995
  • dac
    dac
    +關(guān)注

    關(guān)注

    43

    文章

    2258

    瀏覽量

    190748
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4895

    瀏覽量

    97055
收藏 人收藏

    評論

    相關(guān)推薦

    GD32 MCU 入門教程GD32 MCU 常見外設(shè)介紹(12)FMC 模塊介紹

    閃存控制器(FMC),提供了片上閃存需要的所有功能。FMC 也提供了頁擦除,整片擦除,以及32 位整字或 16 位半字編程閃存等操作。 GD32 MCU 支持不同類型編程的具體說明如下表 GD32
    的頭像 發(fā)表于 08-21 09:56 ?929次閱讀
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>常見外設(shè)</b><b class='flag-5'>介紹</b>(12)FMC <b class='flag-5'>模塊</b><b class='flag-5'>介紹</b>

    GD32 MCU移植

    gd32是一款國產(chǎn)單片機。該芯片在很多方面和STM32有異曲同工之處。資料不是很多! GD32外設(shè)方面、和STM32沒有多大區(qū)別。 只是需要注意資源的引腳分配。雖然和STM32使用方式一樣、但是也存在
    發(fā)表于 03-23 13:40

    GD32MCU介紹

    其實兆芯的MCU為了兼容ST,外設(shè)的寄存器設(shè)計與ST保持一致了。比如GD32VF103或者GD32E103系列的USBFS這個外設(shè),基本等同
    發(fā)表于 11-01 06:03

    GD32 MCU原理及固件庫開發(fā)指南》+讀后感

    ,包括ADC和DAC。 第7章介紹GD32 MCU的基礎(chǔ)通信外設(shè),包括USART、I2C和SPI。 第8章
    發(fā)表于 06-06 21:52

    兆易創(chuàng)新GD32 MCU選型手冊,適用于GD32全系列MCU

    兆易創(chuàng)新GD32MCU選型手冊,適用于GD32全系列MCUGD32MCU選型手冊,適用于GD32全系列MCU
    發(fā)表于 10-19 17:26 ?49次下載

    你了解GD32 MCU的命名規(guī)則嗎

    下面為大家介紹GD32 MCU的通用命名規(guī)則,以GD32F303ZGT6為例,其中,GD32代表GD32
    的頭像 發(fā)表于 01-13 09:38 ?3373次閱讀
    你了解<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的命名規(guī)則嗎

    GD32 MCU的選項字節(jié)是什么?

    GD32 MCU的選項字節(jié)是什么,有什么功能呢?選項字節(jié)被誤篡改如何回復(fù)?
    的頭像 發(fā)表于 01-17 09:42 ?1197次閱讀
    <b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>的選項字節(jié)是什么?

    不同型號的GD32 MCU如何區(qū)分?

    大家是否碰到過以下應(yīng)用場景:同一套軟件代碼希望跑在不同型號的GD32 MCU中,但有些地方需要根據(jù)MCU型號進行調(diào)整?或者上位機或其他MCUGD3
    的頭像 發(fā)表于 01-27 09:32 ?917次閱讀
    不同型號的<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b>如何區(qū)分?

    GD32 MCU 入門教程】一、GD32 MCU 開發(fā)環(huán)境搭建(1)使用Keil開發(fā)GD32

    GD32系列為通用型MCU,所以開發(fā)環(huán)境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據(jù)個人喜好來選擇相應(yīng)的開發(fā)環(huán)境。
    的頭像 發(fā)表于 08-08 15:01 ?934次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發(fā)環(huán)境搭建(1)使用Keil開發(fā)<b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】一、GD32 MCU 開發(fā)環(huán)境搭建(2)使用 IAR 開發(fā) GD32

    GD32系列為通用型MCU,所以開發(fā)環(huán)境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據(jù)個人喜好來選擇相應(yīng)的開發(fā)環(huán)境。
    的頭像 發(fā)表于 08-08 15:40 ?536次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發(fā)環(huán)境搭建(2)使用 IAR 開發(fā) <b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】一、GD32 MCU 開發(fā)環(huán)境搭建(3)使用 Embedded Builder 開發(fā) GD32

    GD32系列為通用型MCU,所以開發(fā)環(huán)境也可以使用通用型的IDE,目前使用較多的是KEIL、IAR、 GCC和Embedded Builder,客戶可以根據(jù)個人喜好來選擇相應(yīng)的開發(fā)環(huán)境。
    的頭像 發(fā)表于 08-08 16:03 ?779次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】一、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 開發(fā)環(huán)境搭建(3)使用 Embedded Builder 開發(fā) <b class='flag-5'>GD32</b>

    GD32 MCU 入門教程】二、GD32 MCU 燒錄說明(1)ISP 燒錄

    ISP:In System Programing,在系統(tǒng)編程,通過MCU片內(nèi)的引導(dǎo)程序進行Flash編程。 GD32片內(nèi)有一個只讀信息塊,用于存放引導(dǎo)裝載程序,引導(dǎo)程序在MCU出廠前就會提前燒錄好
    的頭像 發(fā)表于 08-08 16:20 ?683次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】二、<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> 燒錄說明(1)ISP 燒錄

    GD32 MCU 入門教程GD32 MCU 常見外設(shè)介紹(14)RTC 模塊介紹

    GD32 MCU內(nèi)部提供了一個RTC(實時時鐘)模塊,通過RTC可以實現(xiàn)日歷時鐘、鬧鐘等功能。RTC也可以用于深度睡眠或待機模式的低功耗喚醒。不同系列的GD32
    的頭像 發(fā)表于 08-23 09:18 ?356次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>常見外設(shè)</b><b class='flag-5'>介紹</b>(14)RTC <b class='flag-5'>模塊</b><b class='flag-5'>介紹</b>

    GD32 MCU 入門教程GD32 MCU FPU 使用方法

    GD32 MCU FPU 使用方法
    的頭像 發(fā)表于 08-25 09:24 ?409次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> FPU 使用方法

    GD32 MCU入門教程GD32 MCU GPIO 結(jié)構(gòu)與使用注意事項

    本文是專門為基于GD32 MCU開發(fā)的工程設(shè)計人員提供,主要介紹了GPIO的功能配置、內(nèi)部結(jié)構(gòu)以及在不同場景使用時的注意事項,旨在幫助GD32 MC
    的頭像 發(fā)表于 09-07 10:34 ?520次閱讀
    【<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b><b class='flag-5'>入門教程</b>】<b class='flag-5'>GD32</b> <b class='flag-5'>MCU</b> GPIO 結(jié)構(gòu)與使用注意事項