亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
STM8L的ADC之測量VDD電壓詳解 含例程
[打印本頁]
作者:
51hei小林
時間:
2016-10-10 00:55
標題:
STM8L的ADC之測量VDD電壓詳解 含例程
STM8L內部含有一個12位的ADC,擁有25個輸入通道,包括一個內部溫度傳感器,一個內部參考電壓。
STM8L使用外部參考電壓作為ADC參考電壓,由于VDD,GND一般和ADC的外部參考電壓引腳VREF+,VREF-連接在一起。所以VDD的電壓就是ADC的參考電壓,由于LDO供給MCU的電壓有一定的偏差。所以使用ADC前需要知道VDD的電壓為多少,對于十二位的ADC,VDD電壓對應的轉換出的數(shù)值為4096(2^12).
從第一張圖中可以看到,STM8L內部還有一個內部參考電壓,這個內部參考電壓的電壓值是可知的,且是精確的。由數(shù)據(jù)手冊可知,內部參考電壓為1.225V。
ADC選擇內部參考電壓作為測量通道,可以測量到內部電壓的轉化值Nadc。
此時,已經(jīng)VDD的轉化值4096,VREFINT電壓值1.225V及對應的轉化值Nadc。
這些值滿足比例關系,VDD/4096=VREFINT/Nadc
VDD/4096 =1.225/Nadc
VDD=1.225*4096/Nadc
本文使用ADC的單次轉換模式,每隔大約0.5S觸發(fā)一次ADC轉換。ADC轉換的通道需要在ADC_SQR寄存器中選擇。
ADC完成一次數(shù)據(jù)采集轉化后,會進入中斷。我們在中斷中打一個斷點,查看變量VDD_Value中的數(shù)據(jù),可以看到此時數(shù)據(jù)為2976(電壓值被擴大了1000倍),即VDD的電壓為2.976V。.與實際用萬用表測量的2.99V幾乎一樣。
/****************************************************************************************
*開發(fā)環(huán)境:IAR for stm8 v1.40.1
*硬件平臺:STM8L-DISCOVERY
*功能說明:測量VDD電壓,VDD的計算結果在ADC中斷中,通過仿真,設置斷點,可以在IAR中查看擴大1000被后的VDD電壓數(shù)據(jù)VDD_Value
*作 者:茗風
****************************************************************************************/
#include"iostm8l152c6.h"
#include"stdbool.h"
#include"stdint.h"
uint16_t VDD_Value=0;
/******************************************************************************************************
* 名 稱:void delay_10ms(uint8_t x_ms)
* 功 能:延時10ms
* 入口參數(shù):無
* 出口參數(shù):無
* 說 明:
* 范 例:無
******************************************************************************************************/
void delay_100ms(void)
{
uint8_t i,j;
for(i=0;i<255;i++)//2*255個指令周期
for(j=0;j<255;j++);//2*255個指令周期
//delay_10ms共消耗 x_ms*2*255+2*x_ms個指令周期
//255*2*255+2*255=130610us=130ms
//此延時函數(shù),延時時間為130ms
//16M/8/2=1M 一個指令周期為1us
}
/******************************************************************************************************
* 名 稱:void ADC_Init(void)
* 功 能:初始化ADC
* 入口參數(shù):無
* 出口參數(shù):無
* 說 明:ADC1的測量通道為內部參考電壓,單次轉換模式
* 范 例:無
******************************************************************************************************/
void ADC_Init(void)
{
CLK_PCKENR2_PCKEN20=1; //國際慣例,開啟ADC1外設時鐘
ADC1_TRIGR1_VREFINTON=1;//打開內部參考電壓源
ADC1_CR1_ADON=1; //wakes up the ADC from Power down mode.
ADC1_CR2_PRESC=1;//Select a sample time of 10 μs
// 0: f(ADC_CLK) = CK
// 1: f(ADC_CLK) = CK/2 //系統(tǒng)時鐘此時為默認的16M/8=2M,這里分頻后,fadc=2M/2=1M
ADC1_SQR1_DMAOFF=1; //關閉DMA,暫時不用
ADC1_CR3_SMTP2=0x06;//采樣時間為24 ADC clock cycles,也就是24*1us=24us
//000: 4 ADC clock cycles
//001: 9 ADC clock cycles
//010: 16 ADC clock cycles
//011: 24 ADC clock cycles
//100: 48 ADC clock cycles
//101: 96 ADC clock cycles
//110: 192 ADC clock cycles
//111: 384 ADC clock cycles
ADC1_SQR1_CHSEL_S28=1; //選擇內部參考電壓通道
ADC1_CR1_EOCIE=1;
}
void main(void)
{
ADC_Init();
asm("rim"); //enable interrupts
while(1)
{
delay_100ms();
ADC1_CR1_START=1;
delay_100ms();
delay_100ms();
delay_100ms();
delay_100ms();
}
}
/******************************************************************************************************
* 名 稱: ADC中斷
* 功 能: EOC事件處理函數(shù)
* 入口 參數(shù):無
* 出口 參數(shù):無
* 說 明:
* 范 例:無
******************************************************************************************************/
#pragma vector=COMP_EF2_vector
__interrupt void ADC1_ISR(void)
{
static uint16_t temp=0;
PC_ODR_ODR7 ^=0x01;//輸出低電平
ADC1_SR_EOC=0;
temp = ADC1_DRH;
temp = (temp<<8)+ADC1_DRL;
VDD_Value=(uint32_t)1225*4096/temp;//得到的數(shù)值單位為mv
asm("nop");
}
復制代碼
作者:
s414545584
時間:
2017-8-24 20:22
這么好的東西咋沒人點贊呢???怒贊,狂贊,超贊666
作者:
zengruiqiu
時間:
2018-6-20 12:02
這么好的東西咋沒人點贊呢???怒贊,狂贊,超贊666
作者:
jstele
時間:
2018-6-30 09:41
學習了
作者:
Boney
時間:
2018-11-15 15:25
學習了,正需要,mark
作者:
wdp1123
時間:
2018-11-29 11:56
好東西要學習
作者:
jxchen
時間:
2019-2-15 22:59
棒棒棒
作者:
monkeg3267
時間:
2020-5-15 15:24
教大家一起來點贊! 挺詳細的的
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1