久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 27457|回復: 7
打印 上一主題 下一主題
收起左側

STM8L的ADC之測量VDD電壓詳解 含例程

  [復制鏈接]
跳轉到指定樓層
樓主
ID:140343 發表于 2016-10-10 00:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
STM8L內部含有一個12位的ADC,擁有25個輸入通道,包括一個內部溫度傳感器,一個內部參考電壓。



STM8L使用外部參考電壓作為ADC參考電壓,由于VDD,GND一般和ADC的外部參考電壓引腳VREF+,VREF-連接在一起。所以VDD的電壓就是ADC的參考電壓,由于LDO供給MCU的電壓有一定的偏差。所以使用ADC前需要知道VDD的電壓為多少,對于十二位的ADC,VDD電壓對應的轉換出的數值為4096(2^12).

從第一張圖中可以看到,STM8L內部還有一個內部參考電壓,這個內部參考電壓的電壓值是可知的,且是精確的。由數據手冊可知,內部參考電壓為1.225V。

ADC選擇內部參考電壓作為測量通道,可以測量到內部電壓的轉化值Nadc。
此時,已經VDD的轉化值4096,VREFINT電壓值1.225V及對應的轉化值Nadc。
這些值滿足比例關系,VDD/4096=VREFINT/Nadc
VDD/4096 =1.225/Nadc
VDD=1.225*4096/Nadc

本文使用ADC的單次轉換模式,每隔大約0.5S觸發一次ADC轉換。ADC轉換的通道需要在ADC_SQR寄存器中選擇。
ADC完成一次數據采集轉化后,會進入中斷。我們在中斷中打一個斷點,查看變量VDD_Value中的數據,可以看到此時數據為2976(電壓值被擴大了1000倍),即VDD的電壓為2.976V。.與實際用萬用表測量的2.99V幾乎一樣。
  1. /****************************************************************************************

  2. *開發環境:IAR for stm8 v1.40.1

  3. *硬件平臺:STM8L-DISCOVERY

  4. *功能說明:測量VDD電壓,VDD的計算結果在ADC中斷中,通過仿真,設置斷點,可以在IAR中查看擴大1000被后的VDD電壓數據VDD_Value

  5. *作    者:茗風

  6. ****************************************************************************************/

  7. #include"iostm8l152c6.h"

  8. #include"stdbool.h"

  9. #include"stdint.h"

  10. uint16_t VDD_Value=0;

  11. /******************************************************************************************************

  12. *  名    稱:void delay_10ms(uint8_t x_ms)

  13. *  功    能:延時10ms

  14. *  入口參數:無

  15. *  出口參數:無

  16. *  說    明:

  17. *  范    例:無

  18. ******************************************************************************************************/

  19. void delay_100ms(void)

  20. {

  21.   uint8_t i,j;

  22.   for(i=0;i<255;i++)//2*255個指令周期

  23.     for(j=0;j<255;j++);//2*255個指令周期

  24.   //delay_10ms共消耗 x_ms*2*255+2*x_ms個指令周期  

  25.   //255*2*255+2*255=130610us=130ms

  26.   //此延時函數,延時時間為130ms

  27.   //16M/8/2=1M 一個指令周期為1us

  28. }

  29. /******************************************************************************************************

  30. *  名    稱:void ADC_Init(void)

  31. *  功    能:初始化ADC

  32. *  入口參數:無

  33. *  出口參數:無

  34. *  說    明:ADC1的測量通道為內部參考電壓,單次轉換模式

  35. *  范    例:無

  36. ******************************************************************************************************/

  37. void ADC_Init(void)

  38. {   

  39.    CLK_PCKENR2_PCKEN20=1; //國際慣例,開啟ADC1外設時鐘

  40.    ADC1_TRIGR1_VREFINTON=1;//打開內部參考電壓源

  41.    ADC1_CR1_ADON=1;  //wakes up the ADC from Power down mode.

  42.    ADC1_CR2_PRESC=1;//Select a sample time of 10 μs

  43. //   0: f(ADC_CLK) = CK

  44. //   1: f(ADC_CLK) = CK/2  //系統時鐘此時為默認的16M/8=2M,這里分頻后,fadc=2M/2=1M

  45.   

  46.    ADC1_SQR1_DMAOFF=1;    //關閉DMA,暫時不用


  47.    ADC1_CR3_SMTP2=0x06;//采樣時間為24 ADC clock cycles,也就是24*1us=24us

  48. //000: 4 ADC clock cycles

  49. //001: 9 ADC clock cycles

  50. //010: 16 ADC clock cycles

  51. //011: 24 ADC clock cycles

  52. //100: 48 ADC clock cycles

  53. //101: 96 ADC clock cycles

  54. //110: 192 ADC clock cycles

  55. //111: 384 ADC clock cycles

  56.    

  57.    ADC1_SQR1_CHSEL_S28=1; //選擇內部參考電壓通道

  58.    

  59.    ADC1_CR1_EOCIE=1;

  60. }


  61. void main(void)

  62. {

  63.   ADC_Init();

  64.   asm("rim");               //enable interrupts

  65.   while(1)

  66.   {

  67.     delay_100ms();

  68.     ADC1_CR1_START=1;

  69.     delay_100ms();

  70.     delay_100ms();

  71.     delay_100ms();

  72.     delay_100ms();

  73.   }

  74. }

  75. /******************************************************************************************************

  76. * 名               稱: ADC中斷

  77. * 功         能: EOC事件處理函數

  78. * 入口           參數:無

  79. * 出口           參數:無

  80. * 說               明:

  81. * 范              例:無

  82. ******************************************************************************************************/

  83. #pragma vector=COMP_EF2_vector

  84. __interrupt void ADC1_ISR(void)

  85. {

  86.    static uint16_t temp=0;

  87.    PC_ODR_ODR7 ^=0x01;//輸出低電平

  88.    ADC1_SR_EOC=0;

  89.    temp = ADC1_DRH;

  90.    temp = (temp<<8)+ADC1_DRL;

  91.    VDD_Value=(uint32_t)1225*4096/temp;//得到的數值單位為mv

  92.    asm("nop");

  93. }
復制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:100312 發表于 2017-8-24 20:22 | 只看該作者
這么好的東西咋沒人點贊呢???怒贊,狂贊,超贊666
回復

使用道具 舉報

板凳
ID:355067 發表于 2018-6-20 12:02 | 只看該作者

這么好的東西咋沒人點贊呢???怒贊,狂贊,超贊666
回復

使用道具 舉報

地板
ID:237362 發表于 2018-6-30 09:41 | 只看該作者
學習了
回復

使用道具 舉報

5#
ID:106835 發表于 2018-11-15 15:25 | 只看該作者
學習了,正需要,mark
回復

使用道具 舉報

6#
ID:171207 發表于 2018-11-29 11:56 | 只看該作者

好東西要學習
回復

使用道具 舉報

7#
ID:18591 發表于 2019-2-15 22:59 | 只看該作者
棒棒棒
回復

使用道具 舉報

8#
ID:723157 發表于 2020-5-15 15:24 | 只看該作者
教大家一起來點贊!  挺詳細的的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲超碰在线观看 | 久久99久久99 | 日韩欧美中文 | 黄色网址在线免费播放 | 日韩天堂av | 精品日本中文字幕 | 成人欧美一区二区三区黑人孕妇 | 欧美a级成人淫片免费看 | 亚洲情综合五月天 | 在线永久看片免费的视频 | 亚洲午夜视频在线观看 | 久久久久久久久久久久久九 | 国产精品久久久久久久久久久久午夜片 | 国产精品久久久久久久久久久新郎 | 国产黄色网 | 超碰在线人人 | 欧美在线一区二区三区 | 中文字幕亚洲区一区二 | 欧美性生活免费 | 日本三级电影在线看 | 久久久片| 日韩欧美在线一区 | 日韩a在线观看 | 日韩免费一区二区 | 在线永久看片免费的视频 | 欧美日韩一 | 久久av一区 | 欧美一二三四成人免费视频 | 国产黄色小视频 | 日韩精品一区二区三区在线观看 | 国产毛片久久久久久久久春天 | 亚洲天堂日韩精品 | 日日干天天操 | 久久精品视频91 | 国产毛片久久久久久久久春天 | 午夜视频网站 | 精品久久99| 九色 在线 | 久久久久久色 | 91免费观看 | 亚洲免费成人 |