日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年03月12日(星期三)

正在發(fā)生

2019年03月12日 | 【STM32】DAC基本原理、寄存器、庫函數(shù)(DAC一般步驟)

發(fā)布者:JoyfulSunflower 來源: eefocus關(guān)鍵字:STM32  DAC  寄存器  庫函數(shù) 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

STM32F1xx官方資料:


《STM32中文參考手冊V10》-第12章  數(shù)字模擬轉(zhuǎn)換DAC


DAC的基本介紹

DAC的基本定義

Digital-to-Analog Converter的縮寫。指數(shù)/模轉(zhuǎn)換器或者數(shù)字/模擬轉(zhuǎn)換器。是指將離散的數(shù)字信號(hào)轉(zhuǎn)換為連續(xù)變量的模擬信號(hào)的器件。


典型的數(shù)字模擬轉(zhuǎn)換器將表示一定比例電壓值的數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào)。


STM32的DAC模塊是12位數(shù)字輸入,電壓輸出型的DAC。


DAC的主要特征

2個(gè)DAC轉(zhuǎn)換器:每個(gè)轉(zhuǎn)換器對應(yīng)1個(gè)輸出通道;

8位或者12位單調(diào)輸出;

12位模式下數(shù)據(jù)左對齊或者右對齊;

同步更新功能;

噪聲波形生成;

三角波形生成;

雙DAC通道同時(shí)或者分別轉(zhuǎn)換;

每個(gè)通道都有DMA功能;

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

輸入?yún)⒖茧妷篤REF+。

 


DAC的工作原理

DAC的工作框圖



DAC模塊的框圖看起來比較復(fù)雜,接下來會(huì)一點(diǎn)一點(diǎn)地對它進(jìn)行分析。


DAC引腳

在框圖的四圍是DAC的各個(gè)引腳,它們的名稱、信號(hào)類型和作用見下圖:



這里需要注意的是:STM32F103ZET6一共只有兩個(gè)DAC_OUTx引腳,分別為DAC_OUT1(PA4)、DAC_OUT2(PA5)。并且在做DAC功能的時(shí)候,引腳GPIO模式應(yīng)該是模擬輸入!??!


為什么要使用模擬輸入模式呢?因?yàn)橐坏┦鼓蹹ACx通道后,相應(yīng)的GPIO引腳(PA4或者PA5)會(huì)自動(dòng)與DAC的模擬輸出相連,設(shè)置為輸入,是為了額外額外的干擾。



DAC轉(zhuǎn)換

由框圖可以看出,DAC受DORx寄存器直接控制的,但是不能直接往DORx寄存器寫入數(shù)據(jù),而是通過DHRx間接地傳給DORx寄存器,實(shí)現(xiàn)對DAC的輸出控制。


不能直接對寄存器DAC_DORx寫入數(shù)據(jù),任何輸出到DAC通道x的數(shù)據(jù)都必須寫入DAC_DHRx寄存器(數(shù)據(jù)實(shí)際寫入DAC_DHR8Rx、DAC_DHR12Lx、DAC_DHR12Rx、DAC_DHR8RD、DAC_DHR12LD、或者DAC_DHR12RD寄存器)。


如果沒有選中硬件觸發(fā)(寄存器DAC_CR1的TENx位置0),存入寄存器DAC_DHRx的數(shù)據(jù)會(huì)在一個(gè)APB1時(shí)鐘周期后自動(dòng)傳至寄存器DAC_DORx;

如果選中硬件觸發(fā)(寄存器DAC_CR1的TENx位置1),數(shù)據(jù)傳輸在觸發(fā)發(fā)生以后3個(gè)APB1時(shí)鐘周期后完成。

一旦數(shù)據(jù)從DAC_DHRx寄存器裝入DAC_DORx寄存器,在經(jīng)過時(shí)間tSETTLING之后,輸出即有效,這段時(shí)間的長短依電源電壓和模擬輸出負(fù)載的不同會(huì)有所變化。



DAC數(shù)據(jù)格式

根據(jù)上面可知,數(shù)據(jù)寫入DAC_DHRx寄存器,然而實(shí)際上DAC_DHRx一共有6個(gè)寄存器!這是為什么呢?這就和DAC數(shù)據(jù)格式有很大的關(guān)系了。


根據(jù)選擇的配置模式,數(shù)據(jù)按照下文所述寫入指定的寄存器:


單DAC通道x,有3種情況:


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

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

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

一般采用第三種方式:12位數(shù)據(jù)右對齊比較多。


根據(jù)對DAC_DHRyyyx寄存器的操作,經(jīng)過相應(yīng)的移位后,寫入的數(shù)據(jù)被轉(zhuǎn)存到DHRx寄存器中(DHRx是內(nèi)部的數(shù)據(jù)保存寄存器x)。隨后,DHRx寄存器的內(nèi)容或被自動(dòng)地傳送到DORx寄存器,或通過軟件觸發(fā)或外部事件觸發(fā)被傳送到DORx寄存器。



雙DAC通道,有3種情況:


8位數(shù)據(jù)右對齊:用戶須將DAC通道1數(shù)據(jù)寫入寄存器DAC_DHR8RD[7:0]位(實(shí)際是存入寄存器DHR1[11:4]位),將DAC通道2數(shù)據(jù)寫入寄存器DAC_DHR8RD[15:8]位(實(shí)際是存入寄存器DHR2[11:4]位);

12位數(shù)據(jù)左對齊:用戶須將DAC通道1數(shù)據(jù)寫入寄存器DAC_DHR12LD[15:4]位(實(shí)際是存入寄存器DHR1[11:0]位),將DAC通道2數(shù)據(jù)寫入寄存器DAC_DHR12LD[31:20]位(實(shí)際是存入寄存器DHR2[11:0]位);

12位數(shù)據(jù)右對齊:用戶須將DAC通道1數(shù)據(jù)寫入寄存器DAC_DHR12RD[11:0]位(實(shí)際是存入寄存器DHR1[11:0]位),將DAC通道2數(shù)據(jù)寫入寄存器DAC_DHR12RD[27:16]位(實(shí)際是存入寄存器DHR2[11:0]位)。



選擇DAC觸發(fā)

在框圖的左上方,是指DAC轉(zhuǎn)換可以由某外部事件觸發(fā)(定時(shí)器計(jì)數(shù)器、外部中斷線)。配置控制位TSELx[2:0]可以選擇8個(gè)觸發(fā)事件之一觸發(fā)DAC轉(zhuǎn)換。具體的外部觸發(fā)的種類如下圖所示:



DAC輸出電壓

當(dāng)DAC的參考電壓位VREF+的時(shí)候,數(shù)字輸入經(jīng)過DAC被線性地轉(zhuǎn)換為模擬電壓輸出,其范圍為0到VREF+。


任一DAC通道引腳上的輸出電壓滿足下面的關(guān)系:


DAC輸出 = VREF x (DOR / 4095)。


注意:此時(shí)數(shù)據(jù)格式:應(yīng)該選擇12位數(shù)據(jù)右對齊。


使能DAC輸出緩存

DAC集成了2個(gè)輸出緩存,可以用來減少輸出阻抗,無需外部運(yùn)放即可直接驅(qū)動(dòng)外部負(fù)載。每個(gè)DAC通道輸出緩存可以通過設(shè)置DAC_CR寄存器的BOFFx位來使能或者關(guān)閉。


但是,如果STM32的DAC輸出緩存使能的話,雖然輸出能力強(qiáng)一點(diǎn),但是輸出沒有辦法減到0,所以一般都不使用這個(gè)功能。


DAC相關(guān)配置寄存器

DAC控制寄存器(DAC_CR)



作用:配置DAC通道使能、觸發(fā)使能、輸出緩存、噪聲輸出使能、三角波輸出使能。


DAC軟件觸發(fā)寄存器(DAC_SWTRIGR)



作用:配置DAC通道軟件觸發(fā)使能。


DAC通道數(shù)據(jù)保持寄存器(DAC_DHRxRx)

DAC通道1的12位右對齊數(shù)據(jù)保持寄存器(DAC_DHR12R1)



DAC通道1的12位左對齊數(shù)據(jù)保持寄存器(DAC_DHR12L1)



DAC通道1的8位右對齊數(shù)據(jù)保持寄存器(DAC_DHR8R1)



除了DAC通道1,還有DAC通道2的對應(yīng)的三個(gè)數(shù)據(jù)保持寄存器。


DAC數(shù)據(jù)輸出寄存器(DAC_DORx)

DAC通道1數(shù)據(jù)輸出寄存器(DAC_DOR1)



除了DAC通道1,還有DAC通道2的對應(yīng)的數(shù)據(jù)輸出寄存器。


DAC相關(guān)配置庫函數(shù)

1個(gè)初始化函數(shù)

void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct);

作用:配置外部觸發(fā)的方式、噪聲波生成、三角波生成、輸出緩存。


1個(gè)使能函數(shù)

void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState);

作用:配置DAC某個(gè)通道使能。


3個(gè)輸出值函數(shù)

void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data);

void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data);

uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel);

作用:前兩個(gè)向各自通道以某種對齊方式放入數(shù)值,第三個(gè)獲得某個(gè)通道輸出的數(shù)值。


DAC一般步驟

實(shí)驗(yàn)?zāi)繕?biāo):利用按鍵控制STM32內(nèi)部DAC的通道1來輸出電壓,同時(shí)通過ADC1的通道1采集DAC的輸出電壓。


開啟輸出引腳、DAC時(shí)鐘,設(shè)置為模擬輸入。調(diào)用函數(shù):RCC_APBxPeriphClockCmd();

初始化DAC,設(shè)置DAC的工作模式。調(diào)用函數(shù):DAC_Init();

使能DAC轉(zhuǎn)換通道。調(diào)用函數(shù):DAC_Cmd();

設(shè)置DAC的輸出值。調(diào)用函數(shù):DAC_SetChannelxData()。

下面按照這個(gè)一般步驟來進(jìn)行一個(gè)簡單的DAC程序:


//DAC通道1輸出初始化

void Dac1_Init(void)

{

  

GPIO_InitTypeDef GPIO_InitStructure;

DAC_InitTypeDef DAC_InitType;

 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );   //使能PORTA通道時(shí)鐘

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );   //使能DAC通道時(shí)鐘 

 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; // 端口配置

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模擬輸入

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_SetBits(GPIOA,GPIO_Pin_4) ;//PA.4 輸出高


DAC_InitType.DAC_Trigger=DAC_Trigger_None; //不使用觸發(fā)功能 TEN1=0

DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形發(fā)生

DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值設(shè)置

DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ; //DAC1輸出緩存關(guān)閉 BOFF1=1

    DAC_Init(DAC_Channel_1,&DAC_InitType); //初始化DAC通道1

 

DAC_Cmd(DAC_Channel_1, ENABLE);  //使能DAC1

  

    DAC_SetChannel1Data(DAC_Align_12b_R, 0);  //12位右對齊數(shù)據(jù)格式設(shè)置DAC值

 

}

 

//設(shè)置通道1輸出電壓

//vol:0~3300,代表0~3.3V

void Dac1_Set_Vol(u16 vol)

{

float temp=vol;

temp/=1000;

temp=temp*4096/3.3;

DAC_SetChannel1Data(DAC_Align_12b_R,temp);//12位右對齊數(shù)據(jù)格式設(shè)置DAC值

}

 

 int main(void)

 {  

u16 adcx;

float temp;

  u8 t=0;  

u16 dacval=0;

u8 key;

delay_init();     //延時(shí)函數(shù)初始化   

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級(jí)分組為組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)

uart_init(115200); //串口初始化為115200

KEY_Init();   //初始化按鍵程序

  LED_Init();      //LED端口初始化

LCD_Init(); //LCD初始化

usmart_dev.init(72); //初始化USMART

  Adc_Init();   //ADC初始化

Dac1_Init(); //DAC初始化

 

POINT_COLOR=RED;//設(shè)置字體為紅色 

LCD_ShowString(60,50,200,16,16,"WarShip STM32");

LCD_ShowString(60,70,200,16,16,"DAC TEST");

LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");

LCD_ShowString(60,110,200,16,16,"2015/1/15");

LCD_ShowString(60,130,200,16,16,"WK_UP:+  KEY1:-");

//顯示提示信息       

POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色

LCD_ShowString(60,150,200,16,16,"DAC VAL:");       

LCD_ShowString(60,170,200,16,16,"DAC VOL:0.000V");       

LCD_ShowString(60,190,200,16,16,"ADC VOL:0.000V");


DAC_SetChannel1Data(DAC_Align_12b_R, 0);//初始值為0           

while(1)

{

t++;

key=KEY_Scan(0);   

if(key==WKUP_PRES)

{  

if(dacval<4000)dacval+=200;

DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//設(shè)置DAC值

}else if(key==KEY1_PRES)

{

if(dacval>200)dacval-=200;

else dacval=0;

  DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//設(shè)置DAC值

}  

if(t==10||key==KEY1_PRES||key==WKUP_PRES) //WKUP/KEY1按下了,或者定時(shí)時(shí)間到了

{   

adcx=DAC_GetDataOutputValue(DAC_Channel_1);//讀取前面設(shè)置DAC的值

LCD_ShowxNum(124,150,adcx,4,16,0);      //顯示DAC寄存器值

temp=(float)adcx*(3.3/4096); //得到DAC電壓值

adcx=temp;

  LCD_ShowxNum(124,170,temp,1,16,0);      //顯示電壓值整數(shù)部分

  temp-=adcx;

temp*=1000;

LCD_ShowxNum(140,170,temp,3,16,0X80); //顯示電壓值的小數(shù)部分

  adcx=Get_Adc_Average(ADC_Channel_1,10); //得到ADC轉(zhuǎn)換值   

temp=(float)adcx*(3.3/4096); //得到ADC電壓值

adcx=temp;

  LCD_ShowxNum(124,190,temp,1,16,0);      //顯示電壓值整數(shù)部分

  temp-=adcx;

temp*=1000;

LCD_ShowxNum(140,190,temp,3,16,0X80); //顯示電壓值的小數(shù)部分

LED0=!LED0;    

t=0;

}     

delay_ms(10);

 

}

 }


關(guān)鍵字:STM32  DAC  寄存器  庫函數(shù) 引用地址:【STM32】DAC基本原理、寄存器、庫函數(shù)(DAC一般步驟)

上一篇:【STM32】PWM DAC基本原理(實(shí)驗(yàn):PWM實(shí)現(xiàn)DAC)
下一篇:【STM32】ADC庫函數(shù)、一般步驟詳解 實(shí)例:內(nèi)部溫度傳感器

推薦閱讀

  比特大陸“暴利經(jīng)”:靠挖礦機(jī)年入百億元  本報(bào)記者 陳佳嵐 李哲 北京報(bào)道  炙手可熱的比特幣讓相關(guān)設(shè)備制造商賺得“盆滿缽滿”?! ”本┍忍卮箨懣萍加邢薰荆ㄒ韵潞喎Q“比特大陸”)是一家初創(chuàng)公司,其主要業(yè)務(wù)是向全球的“礦工”售賣ASIC(專用集成電路)礦機(jī)。近日,據(jù)投行伯恩斯坦(Bernstein)的分析師估算,比特大陸正成為比特幣“挖...
業(yè)界傳出,中國大陸兩大非蘋指標(biāo)廠華為、OPPO近期積極拉貨,為臺(tái)積電、大立光、華通淡季接單注入暖流。華為看好年度新旗艦機(jī)“P30”系列后市,初期備貨量逾1,600萬支;OPPO考量通路庫存調(diào)整進(jìn)入尾聲,近期追加上百萬支訂單。臺(tái)積電、大立光等業(yè)者向來不評論訂單動(dòng)態(tài)。法人分析,兩大非蘋手機(jī)廠擴(kuò)大拉貨,臺(tái)積電通吃華為旗下芯片廠海思,以及高通、聯(lián)發(fā)科等...
RTC常用RTC模塊:PCF8563 IIC接口DS302 SPI接口DS87887 功能多,比較貴BCD碼: 十進(jìn)制數(shù)壓縮BCD碼,一個(gè)BCD碼從0—9,需要4位二進(jìn)制存儲(chǔ)以BCD,碼存數(shù)的數(shù) 例如:0X59 表示59秒(直接是BCD值,即十進(jìn)制數(shù))定時(shí)器、PWM1.定時(shí)器的工作原理:以固定的頻率(可以編程改變這個(gè)頻率)進(jìn)行計(jì)數(shù)2.單片機(jī)定時(shí)器的預(yù)置數(shù)遞增 ARM定時(shí)器的預(yù)置數(shù)為遞減3....
焊接機(jī)器人主要包括機(jī)器人和焊接設(shè)備兩部分。機(jī)器人由機(jī)器人本體和控制柜(硬件及軟件)組成。而焊接裝備,以弧焊及點(diǎn)焊為例,則由焊接電源(包括其控制系統(tǒng))、送絲機(jī)(弧焊)、焊槍(鉗)等部分組成。對于智能機(jī)器人還應(yīng)有傳感系統(tǒng),如激光或攝像傳感器及其控制裝置等。世界各國生產(chǎn)的焊接用機(jī)器人基本上都屬于關(guān)節(jié)機(jī)器人,絕大部分有6個(gè)軸。其中,1、2、3軸可將...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved