久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
STM8L的DAC詳解 含例程
[打印本頁]
作者:
51hei小林
時間:
2016-10-10 00:17
標題:
STM8L的DAC詳解 含例程
向STM8L的向DHR寄存器寫入數據,此數據被送入到DOR寄存器,最終被送到DA轉換器,DAC會輸出對應的電壓.我們使用用萬用表測量此電壓,與理論計算值對比,來學習STM8L的DAC.
下圖為STM8L152C6的DAC內部結構圖.
本例程使用的芯片型號為STM8L152C6,是中等容量,48腳的MCU,它只有一個輸出通道,輸出通道是PF0.如下圖數據手冊中的介紹
STM8L的DAC為12位DAC,寫入DHR寄存器中的數據最大為2^12=4096.下圖是數據手冊中給出的DAC輸出電壓計算公式:DACout=Vref*(DAC_DOR/4096)
①DACout是DAC輸出的電壓
②Vref是參考電壓,由于參考電壓引腳和MCU供電引腳連接在一起,所以Vref的電壓和單片機系統的供電電壓相等.實測為2.98V,這個值以實測為準.
根據這個公式,如果向DAC_DHR寫入數據為2048,那么DAC輸出電壓應該為2048/4096*2.98=1.490V
DAC連續輸出不同的電壓,可以達到輸出正弦波,三角波等各種波形,由于沒有示波器,沒法看到輸出波形,所以本例程,只是簡單的使用DAC最基本的輸出電壓的功能,使用萬用表測量輸出的電壓與計算值對比.
/*硬件連接*/
// PF0---->
/****************************************************************************************
*開發環境:IAR for stm8 v6.5.3
*硬件平臺:STM8L-DISCOVERY
*功能說明:向DHR寄存器寫入數據,DAC會輸出對應的電壓,用萬用表測量此電壓,與理論計算值
* 對比.
*作 者:茗風
****************************************************************************************/
#include"iostm8l152c6.h"
#include"stdint.h"
#define WRITE_TO_DHR(a) DAC_RDHRH=(a&0x0F00)>>8;DAC_RDHRL=(0x00FF&a)
//帶參數宏,實現向DHR寄存器,寫入一個12位的數據
/******************************************************************************************************
* 名 稱:void delay_10ms(uint8_t x_ms)
* 功 能:延時10ms
* 入口參數:無
* 出口參數:無
* 說 明:
* 范 例:無
******************************************************************************************************/
void delay_130ms(uint8_t x)
{
uint8_t i,j;
for(;x>0;x--)
{
for(i=0;i<255;i++)//2*255個指令周期
for(j=0;j<255;j++);//2*255個指令周期
// 共 x_ms*2*255+2*x_ms個指令周期
// 即 255*2*255+2*255=130610us=130ms
// 綜上 i,j雙層for循環,延時時間為130ms
}
// 16M/8/2=1M 一個指令周期為1us
}
/******************************************************************************************************
* 名 稱:void DAC12_Config(void)
* 功 能:配置DAC,禁用DMA,不使用TIM4觸發,也不用軟件觸發,寫入DHR的數據被立即送入DOR寄存器,
* 立即輸出對應電壓
* 入口參數:無
* 出口參數:無
* 說 明:STM8L152C6屬于中等容量MCU,只有一路DAC輸出,輸出引腳為PF0
* 范 例:無
******************************************************************************************************/
void DAC12_Config(void)
{
//------配置DAC輸出引腳PF0------
PF_CR1_C10 =0;//浮空輸入
PF_CR2_C20 =0;//無中斷功能
PF_DDR_DDR0 =0;//PF0輸入
//------打開DAC時鐘------
CLK_PCKENR1_PCKEN17=1;//打開DAC時鐘
//------選擇DAC觸發方式------
DAC_CR1_TSEL=0x0;//選擇TIM4觸發,由于TEN=0,所以此位設置無效
/* These bits are only used if TEN=1.
000: TIM4_TRGO (Timer 0 counter channel output) selected
111: SWTRIG (Software trigger) selected*/
//------不使用DAC的BUFFER------
DAC_CR1_BOFF=1;//DAC Channel output buffer disabled
//------配置寫入DHR寄存器中的數據是否需要觸發才能送到DOR中------
DAC_CR1_TEN=0;//此位為零時,寫入DHR寄存器中的數據被立即送到DOR中,輸出對應電壓,無需觸發
DAC_CR2_DMAEN=0;//關閉DMA功能
DAC_CR2_DMAUDRIE=0;//關閉DMA中斷功能
//DACout=Vref*(DAC_DORH/L/4096)
DAC_CR1_EN=1;//使能DAC
}
void main( void )
{
DAC12_Config();
while(1)
{
//-------------------實測值--------------理論值----------
WRITE_TO_DHR(4095);//2.98V 4095/4096*2.98=2.979V
delay_130ms(15);//由于使用萬用表側臉電壓,所以這里延時一段時間
WRITE_TO_DHR(3072);//2.23V 3072/4096*2.98=2.235V
delay_130ms(15);
WRITE_TO_DHR(2048);//1.49V 2048/4096*2.98=1.490V
delay_130ms(15);
WRITE_TO_DHR(1024);//0.74V 1024/4096*2.98=0.745V
delay_130ms(15);
WRITE_TO_DHR(512); //0.37V 512/4096*2.98=0.372V
delay_130ms(15);
WRITE_TO_DHR(256); //0.19V 256/4096*2.98=0.186V
delay_130ms(15);
}
}
復制代碼
作者:
ralphshu
時間:
2017-5-23 20:48
我想請教下,我現在用的是c8DAC有兩路但我選擇其中一路DAC2 但又對應portb4,portb5 兩個口我該怎么設置呢
作者:
jxchen
時間:
2019-1-20 21:12
感恩~~~~~~~~~~~~~~~~~
作者:
lixianshen
時間:
2019-3-11 19:15
大師你好,我用你的程序在stm8 discovery 芯片是stm8l152c6t6上運行,用萬用表和示波器看了,電壓與你測量的不同,分別是0.145、0.253、0.466、0.896、1.327、1.755和你的值對應,另外,我有stm8l152看4t6
作者:
lixianshen
時間:
2019-3-11 19:30
大師你好,我用你的程序在stm8 discovery 芯片是stm8l152c6t6上運行,dac輸出到f0腳,用萬用表和示波器看了,電壓與你測量的不同,分別是0.145、0.253、0.466、0.896、1.327、1.755和你的值對應,另外,我有stm8l152k4t6的一個例子程序運行后,dac輸出的數據也是和它說的不一樣,測的的電壓分別是0.324、0.610、0.897、1.177、1.475、1.744,對應它的設計輸出為0.5、1.0、1.5、2.、2.0、2.5、3.0伏,我每次都測量了3.3伏,基本是在2.98左右,+5.0伏在4.65左右,現在搞不清是那里問題,是不是stm8l152c6t6 dac輸出也有參考電壓,并且它的參考電壓就是1.75伏嗎?
作者:
lixianshen
時間:
2019-3-11 19:44
剛才換了個電源,用華為手機5伏4.5A充電器接上測量dac輸出電壓跟上次測的差不多,1.744伏變為1.752伏,別的都差不多,第三位稍有提高,不知道原因,請大師幫忙看看。
作者:
lixianshen
時間:
2019-3-11 21:11
我用例子程序點燈實驗輸出到pf0腳,用示波器和萬用表測量有2.98伏直流輸出,說明芯片輸出沒有問題。
作者:
lixianshen
時間:
2019-3-11 22:08
找到問題了,是dac_cr1_boff=1,dac channel output buffer disable,把它改為使能就好了。前面等號后的0改成1就好了。
作者:
王琳淋
時間:
2019-12-12 10:49
DAC_CR1_BOFF=1;//DAC Channel output buffer disabled
請問為啥不適用BOFF位呢?
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久成人精品一区二区三区
|
www精品美女久久久tv
|
成人福利网
|
欧美性区
|
欧美在线a
|
国产精品大片在线观看
|
91秦先生艺校小琴
|
亚洲国产精品久久久久
|
欧美一级电影免费
|
日韩中文一区二区三区
|
欧美精
|
欧美小视频在线观看
|
日韩一级免费电影
|
国产91在线 | 欧美
|
一级毛片观看
|
国产精品国产精品国产专区不片
|
亚洲欧洲国产视频
|
81精品国产乱码久久久久久
|
人人人干
|
日韩av在线一区
|
欧美精品在线播放
|
紧缚调教一区二区三区视频
|
日韩有码一区二区三区
|
国产 日韩 欧美 在线
|
成人国产精品久久久
|
狠狠躁天天躁夜夜躁婷婷老牛影视
|
av性色
|
成人免费日韩
|
特黄色一级毛片
|
婷婷综合
|
久久婷婷色
|
精品欧美一区二区三区久久久
|
一级欧美
|
电影午夜精品一区二区三区
|
亚洲久久一区
|
免费欧美
|
国产乱人伦精品一区二区
|
国产清纯白嫩初高生在线播放视频
|
国产成人精品免费视频大全最热
|
久久国产成人
|
日批的视频
|