女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

CKS32F4xx系列DAC功能

jf_pJlTbmA9 ? 來源:中科芯MCU ? 作者:中科芯MCU ? 2023-11-06 16:56 ? 次閱讀

DAC模塊作為CKS32F4xx系列的一個(gè)常用外設(shè),可以將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào),最高分辨率可達(dá)12位,且兩個(gè)獨(dú)立DAC輸出通道轉(zhuǎn)換互不影響,各個(gè)通道均能使用DMA功能,可由軟硬件觸發(fā)。因此,為了實(shí)現(xiàn)DAC輸出正弦波,擬采用一定的時(shí)間向DAC的數(shù)據(jù)寄存器寫入數(shù)據(jù),隨后進(jìn)行數(shù)模轉(zhuǎn)換輸出不同的電壓,最后在時(shí)間軸上顯示出波形。同時(shí)為了不占用CPU資源,配置DMA建立傳輸通道,以便數(shù)據(jù)快速的從內(nèi)存搬移到外設(shè)。且在DAC初始化時(shí),可以設(shè)置成定時(shí)器觸發(fā),待定時(shí)器溢出就會(huì)觸發(fā)DAC工作,所以只要修改定時(shí)器的定時(shí)時(shí)間,就可改變正弦波周期。

DAC簡述

wKgZomUDwQOAKTt6AAKAkedQy_c594.png

①:DAC將VREF+引腳作為參考電壓,在實(shí)際使用時(shí)將VSSA接地,同時(shí)把VREF+和VDDA接3.3V,DAC即可獲得0~3.3V的輸出電壓。

②:數(shù)模轉(zhuǎn)換器以VREF+作為參考電源,將DAC的數(shù)據(jù)寄存器“DORx”的數(shù)字編碼轉(zhuǎn)換成模擬信號(hào)并由右側(cè)的“DAC_OUTx”通道輸出。在CKS32有2個(gè)這樣的DAC部件,其中PA4對(duì)應(yīng)通道1,PA5對(duì)應(yīng)通道2。

③:控制邏輯可以控制數(shù)據(jù)寄存器“DORx”加入一些偽噪聲信號(hào)或配置產(chǎn)生三角波信號(hào)。

④:使用DAC時(shí),數(shù)據(jù)會(huì)被先寫入到DHRx寄存器,隨后DAC會(huì)根據(jù)觸發(fā)配置進(jìn)行處理,最后將數(shù)據(jù)傳輸至DORx。DAC的觸發(fā)源有三種,分別為:外部中斷源觸發(fā)、定時(shí)器觸發(fā)和軟件控制觸發(fā)。

對(duì)于單DAC通道x的三種數(shù)據(jù)格式

8位數(shù)據(jù)右對(duì)齊:

用戶須將數(shù)據(jù)寫入寄存器DAC_DHR8Rx[7:0]位(實(shí)際是存入寄存器DHRx[11:4]位)。

12位數(shù)據(jù)左對(duì)齊:

用戶須將數(shù)據(jù)寫入寄存器DAC_DHR12Lx[15:4]位(實(shí)際是存入寄存器DHRx[11:0]位)。

12位數(shù)據(jù)右對(duì)齊:

用戶須將數(shù)據(jù)寫入寄存器DAC_DHR12Rx[11:0]位(實(shí)際是存入寄存器DHRx[11:0]位)。

數(shù)字輸入經(jīng)過DAC被線性地轉(zhuǎn)換為模擬電壓輸出,任一DAC通道引腳上的輸出電壓滿足下面的關(guān)系:

本案例中選擇DAC的通道1,并采用12位的右對(duì)齊方式,通過查閱《CKS32F4xx參考手冊》DAC和DMA章節(jié)可知,DAC1對(duì)應(yīng)DMA1控制器通道7數(shù)據(jù)流5。

總的來說,DAC的輸出是由DORx寄存器直接控制的,而用戶寫的數(shù)據(jù)是要寫入DHRx寄存器,然后通過DHRx間接操作DORx,最終實(shí)現(xiàn)DAC的輸出。

DAC輸出正弦波配置

本文采用DAC1+TIM2+DMA1的方式,通過TIM2觸發(fā)DAC1轉(zhuǎn)換,轉(zhuǎn)換完成后通過DMA1輸出,主要步驟如下:

①由Matlab計(jì)算一個(gè)周期的正弦波數(shù)組;

②根據(jù)一個(gè)正弦波周期內(nèi)點(diǎn)數(shù)和所需正弦波頻率確定定時(shí)器觸發(fā)間隔;

③初始化DAC1輸出管腳和工作模式;

④配置觸發(fā)DAC1用的定時(shí)器2;

⑤配置DMA1自主搬運(yùn)正弦波數(shù)組。

待上述配置完成后,將PA4引腳接到示波器上,即可顯示正弦波。以下是DAC的詳細(xì)配置。

(1)正弦波數(shù)組生成

以下代碼用于生成正弦波波形表:

for(i=0;i<100;i++)
{
????Sine12bit[i]=2048*sin(1.0*i/(100-?1)*2*PI)+2048;
}

從上述函數(shù)可以看出,正弦波的幅度被控制在0~4096之間,一個(gè)周期被平均分成100份,即100個(gè)點(diǎn)代表一個(gè)周期的波形,數(shù)組Sine12bit里面是100個(gè)采樣點(diǎn)。

constuint16_tSine12bit[100]={

0x0800,0x0881,0x0901,0x0980,0x09FD,0x0A79,0x0AF2,0x0B68,0x0BDA,0x0C49,0x0CB3,0x0D19,0x0D79,0x0DD4,0x0E29,0x0E78,0x0EC0,0x0F02,0x0F3C,0x0F6F,0x0F9B,0x0FBF,0x0FDB,0x0FEF,0x0FFB,0x0FFF,0x0FFB,0x0FEF,0x0FDB,0x0FBF,0x0F9B,0x0F6F,0x0F3C,0x0F02,0x0EC0,0x0E78,0x0E29,0x0DD4,0x0D79,0x0D19,0x0CB3,0x0C49,0x0BDA,0x0B68,0x0AF2,0x0A79,0x09FD,0x0980,0x0901,0x0881,0x0800,0x077F,0x06FF,0x0680,0x0603,0x0587,0x050E,0x0498,0x0426,0x03B7,0x034D,0x02E7,0x0287,0x022C,0x01D7,0x0188,0x0140,0x00FE,0x00C4,0x0091,0x0065,0x0041,0x0025,0x0011,0x0005,0x0001,0x0005,0x0011,0x0025,0x0041,0x0065,0x0091,0x00C4,0x00FE,0x0140,0x0188,0x01D7,0x022C,0x0287,0x02E7,0x034D,0x03B7,0x0426,0x0498,0x050E,0x0587,0x0603,0x0680,0x06FF,0x077F};

(2)GPIO和DAC模式配置

該部分為輸出引腳配置和DAC通道1配置,代碼如下:

voidDAC1_GPIO_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
DAC_InitTypeDefDAC_InitStructure;
/*EnableGPIOAclock*/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);/*EnableDACclock*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);/*ConfiguretheDACPintoAnalogmode:DAC_OUT1--PA4*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_Init(GPIOA, GPIO_InitStructure);
/*ConfigureDACChannel_1*/
DAC_InitStructure.DAC_Trigger=DAC_Trigger_T2_TRGO;
DAC_InitStructure.DAC_WaveGeneration=DAC_WaveGeneration_None;DAC_InitStructure.DAC_OutputBuffer=DAC_OutputBuffer_Disable;DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;DAC_Init(DAC_Channel_1, DAC_InitStructure);
DAC_Cmd(DAC_Channel_1,ENABLE);//EnableDACChannel_1.
DAC_DMACmd(DAC_Channel_1,ENABLE);//EnableDACchannel_1DMArequest.
}

在DAC1_GPIO_Init函數(shù)中,實(shí)現(xiàn)了相應(yīng)GPIO引腳(PA4)的初始化和DAC工作模式配置。其中為了避免寄生的干擾和額外的功耗,應(yīng)將PA4引腳設(shè)置成模擬輸入模式(AIN),如此方可正常工作。

而對(duì)DAC工作模式進(jìn)行配置時(shí),可查看CKS官方提供的DAC_InitTypeDef結(jié)構(gòu)體,該結(jié)構(gòu)體中主要包含了DAC_CR寄存器的各寄存器配置。如下是DAC_InitTypeDef結(jié)構(gòu)體成員簡述:

(a)DAC_Trigger

該成員用于DAC的觸發(fā)模式配置,由上文DAC通道框圖可知,共有三種觸發(fā)模式,分別是定時(shí)器觸發(fā)(DAC_Trigger_T2/4/5/6/7/8_TRGO)、軟件觸發(fā)(DAC_Trigger_Software)和EXTI_9觸發(fā)方式(DAC_Trigger_Ext_IT9)。

(b)DAC_WaveGeneration

該成員可配置輸出偽噪聲和三角波輸出(DAC_WaveGeneration_Noise/Triangle),若使用自定義輸出,應(yīng)配置為DAC_WaveGeneration_None。

(c)DAC_OutputBuffer

該成員用于控制是否使能DAC的輸出緩沖(DAC_OutputBu?er_Enable/Disable)。若需要直接驅(qū)動(dòng)外部負(fù)載,可以使能該成員以減小輸出阻抗。

(d)DAC_LFSRUnmask_TriangleAmplitude

該成員通過控制DAC_CR的MAMP2位設(shè)置LFSR寄存器位的數(shù)據(jù),即當(dāng)使用偽噪聲或三角波輸出時(shí)要疊加到DHRx的值。若使用偽噪聲輸出時(shí)LFSR=0xAAA,這時(shí)該結(jié)構(gòu)體成員可賦值為DAC_LFSRUnmask_Bit0~DAC_LFSRUnmask_Bit11_0;若使用三角波輸出時(shí),這時(shí)該結(jié)構(gòu)體成員可賦值為DAC_TriangleAmplitude_1~DAC_TriangleAmplitude_4096,可用于設(shè)置三角波的最大幅值。

本例中,將DAC通道1配置成定時(shí)器TIM2觸發(fā),不使用波形發(fā)生器和不使用輸出緩存,不使用輸出緩存是因?yàn)镃KS32的DAC無需外部運(yùn)放就可以直接驅(qū)動(dòng)負(fù)載,三角波振幅一項(xiàng)雖然本案例沒有用到,可以配置成任意,但此項(xiàng)不可缺,最后調(diào)用DAC_Cmd、DAC_DMACmd函數(shù)使能DAC通道1和DMA的請求。

(3)定時(shí)器配置

該部分是配置觸發(fā)DAC的定時(shí)器TIM2,通過設(shè)定觸發(fā)的間隔,從而間接控制正弦波周期,TIM2的工作決定DMA與DAC的工作頻率,代碼如下:

voidTIM2_Init(void)
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
/*EnableTimer2clock.*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);/*ConfigureTimer2--ClockFrequencyis84MHz*/
TIM_TimeBaseStructure.TIM_Period=83;TIM_TimeBaseStructure.TIM_Prescaler=0x0;
TIM_TimeBaseStructure.TIM_ClockDivision=0x0;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure);/*ConfigurethetriggersourceforTimer2.*/TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_Update);
TIM_Cmd(TIM2,ENABLE);//EnableTimer2.
}

前文的DAC已選用TIM2當(dāng)觸發(fā)源,此處TIM2的定時(shí)周期被配置為83,向上計(jì)數(shù),不分頻。CKS32F4xx系列的主頻是168MHz,TIM2的時(shí)鐘是84MHz,所以TIM2的更新頻率是84M/(TIM_Period+1)/(TIM_Prescaler+1),即TIM2每隔1us觸發(fā)一次DAC事件,不需要設(shè)置中斷,當(dāng)定時(shí)器向上計(jì)數(shù)至指定值時(shí),產(chǎn)生Update事件,同時(shí)觸發(fā)DAC把DHRx寄存器的數(shù)據(jù)轉(zhuǎn)移到DORx,開始進(jìn)行轉(zhuǎn)換。由于正弦波數(shù)組是100個(gè)采樣點(diǎn),可得正弦波的輸出頻率為:

(4)DMA配置

該部分主要完成數(shù)據(jù)的傳輸,代碼如下:

voidDMA_InitForDAC(void)
{
DMA_InitTypeDefDMA_InitStructure;
/*EnableDMA1clock.*/RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);/*ConfigureDMA1Stream5Channel_7ForDAC1*/
DMA_InitStructure.DMA_Channel=DMA_Channel_7;DMA_InitStructure.DMA_PeripheralBaseAdDMA_InitStructure.DMA_Memory0BaseAddr=(uint32_t)Sine12bit;DMA_InitStructure.DMA_DIR=DMA_DIR_MemoryToPeripheral;
DMA_InitStructure.DMA_BufferSize=100;
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority=DMA_Priority_High;DMA_InitStructure.DMA_FIFOMode=DMA_FIFOMode_Disable;DMA_InitStructure.DMA_FIFOThreshold=DMA_FIFOThreshold_HalfFull;DMA_InitStructure.DMA_MemoryBurst=DMA_MemoryBurst_Single;DMA_InitStructure.DMA_PeripheralBurst=DMA_PeripheralBurst_Single;DMA_Init(DMA1_Stream5, DMA_InitStructure);DMA_Cmd(DMA1_Stream5,ENABLE);//EnableDMA1Stream5.
}

需要注意的是,DAC->DHR12R1對(duì)應(yīng)數(shù)據(jù)寄存器的地址,正弦波數(shù)組Sine12bit對(duì)應(yīng)數(shù)據(jù)輸入地址,DMA緩存的個(gè)數(shù)是單個(gè)正弦波周期對(duì)應(yīng)的點(diǎn)數(shù),DMA需工作在循環(huán)模式,由于正弦波數(shù)組Sine12bit定義為16位,那么涉及數(shù)據(jù)傳輸?shù)淖兞慷家渲贸砂胱?6位。經(jīng)過上述的配置后,定時(shí)器TIM2每隔1us就會(huì)觸發(fā)DMA搬運(yùn)正弦波數(shù)組的一個(gè)數(shù)據(jù)到DAC通道1寄存器進(jìn)行轉(zhuǎn)換,每搬運(yùn)100個(gè)數(shù)據(jù)即一個(gè)完整周期后,DMA開始循環(huán),最終循環(huán)輸出正弦波。

(5)主函數(shù)配置

本例程主函數(shù)主要對(duì)前文所述函數(shù)依次調(diào)用,程序編譯下載至開發(fā)板,使用示波器測量PA4引腳即可查看輸出10kHz的正弦波形,代碼如下:

intmain(void)
{
DAC1_GPIO_Init();
TIM2_Init();
DMA_InitForDAC();
while(1);
}

來源:中科芯MCU

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

    關(guān)注

    31

    文章

    5423

    瀏覽量

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

    關(guān)注

    43

    文章

    2379

    瀏覽量

    193068
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3288

    瀏覽量

    117270
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    572

    瀏覽量

    102364
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    MCU微課堂|CKS32F4xx系列產(chǎn)品時(shí)鐘配置

    作為MCU運(yùn)行的基礎(chǔ),時(shí)鐘是單片機(jī)各個(gè)模塊工作時(shí)序的最小時(shí)間單位,推動(dòng)單片機(jī)的各指令執(zhí)行,是MCU選型的一個(gè)重要指標(biāo)。CKS32F4xx系列產(chǎn)品具有眾多的外設(shè),但并非所有的外設(shè)均需要系統(tǒng)時(shí)鐘的高頻率
    發(fā)表于 12-12 10:17 ?995次閱讀

    CKS32F4xx系列ETH通信詳解

    CKS32F4xx系列芯片自帶以太網(wǎng)模塊,該模塊包括帶專用DMA控制器的MAC 802.3(介質(zhì)訪問控制)控制器
    的頭像 發(fā)表于 11-10 11:13 ?1336次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>ETH通信詳解

    CKS32F4xx系列DSP功能介紹

    CKS32F4xx系列使用高性能的32位內(nèi)核,支持浮點(diǎn)運(yùn)算單元(FPU),同時(shí)還支持DSP指令以及存儲(chǔ)保護(hù)(MPU)用來加強(qiáng)應(yīng)用的安全性。
    的頭像 發(fā)表于 03-04 13:43 ?2049次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>DSP<b class='flag-5'>功能</b>介紹

    CKS32F4xx系列產(chǎn)品串口DMA傳輸

    在上一講,我們講過CKS32F4xx系列的6個(gè)串口都支持DMA傳輸。因此本節(jié)我們對(duì)CKS32F4xx系列的DMA進(jìn)行介紹,同時(shí)利用DMA對(duì)串口數(shù)據(jù)進(jìn)行傳輸。
    的頭像 發(fā)表于 04-10 11:18 ?1325次閱讀

    CKS32F4xx系列RNG功能設(shè)置

    ? MCU 微課堂 CKS32F4xx 系 列RNG功能 隨機(jī)數(shù)發(fā)生器簡介 ? ? CKS32F4xx系列自帶了硬件隨機(jī)數(shù)發(fā)生器(RNG),RNG處理器是一個(gè)以連續(xù)模擬噪聲為基礎(chǔ)的隨機(jī)
    的頭像 發(fā)表于 09-08 10:01 ?874次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>RNG<b class='flag-5'>功能</b>設(shè)置

    CKS32F4xx系列ADC多通道DMA電壓采集

    CKS32F4xx系列ADC多通道DMA電壓采集
    的頭像 發(fā)表于 11-06 16:53 ?1327次閱讀

    CKS32F4xx系列ADC單通道電壓采集

    CKS32F4xx系列ADC單通道電壓采集
    的頭像 發(fā)表于 11-06 16:54 ?1185次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>ADC單通道電壓采集

    CKS32F4xx系列低功耗模式STANDBY模式

    CKS32F4xx系列低功耗模式STANDBY模式
    的頭像 發(fā)表于 11-06 16:57 ?735次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>低功耗模式STANDBY模式

    CKS32F4xx系列低功耗模式SLEEP模式

    CKS32F4xx系列低功耗模式SLEEP模式
    的頭像 發(fā)表于 11-06 16:59 ?949次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>低功耗模式SLEEP模式

    CKS32F4xx系列低功耗模式STOP模式

    CKS32F4xx系列低功耗模式STOP模式
    的頭像 發(fā)表于 11-06 17:08 ?854次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>低功耗模式STOP模式

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-比較輸出

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-比較輸出
    的頭像 發(fā)表于 11-09 17:39 ?1118次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產(chǎn)品Timer的基本使用方法-比較輸出

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-定時(shí)操作

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-定時(shí)操作
    的頭像 發(fā)表于 11-09 17:41 ?815次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產(chǎn)品Timer的基本使用方法-定時(shí)操作

    MCU微課堂 | CKS32F4xx系列產(chǎn)品SPI通信

    MCU微課堂 | CKS32F4xx系列產(chǎn)品SPI通信
    的頭像 發(fā)表于 10-24 17:12 ?981次閱讀
    MCU微課堂 | <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產(chǎn)品SPI通信

    MCU微課堂 | CKS32F4xx系列產(chǎn)品GPIO口配置

    MCU微課堂 | CKS32F4xx系列產(chǎn)品GPIO口配置
    的頭像 發(fā)表于 10-24 15:14 ?1074次閱讀
    MCU微課堂 | <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產(chǎn)品GPIO口配置

    CKS32F4xx系列FSMC功能簡介

    本課講為大家講解CKS32F4xx系列產(chǎn)品的FSMC應(yīng)用實(shí)例,F(xiàn)SMC全稱是Flexible Static Memory Controller,讀作靈活的靜態(tài)存儲(chǔ)控制器,顧名思義,MCU可以通過FSMC擴(kuò)展靜態(tài)內(nèi)存
    的頭像 發(fā)表于 04-14 15:06 ?1393次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>FSMC<b class='flag-5'>功能</b>簡介