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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC8單片機的AD采樣不穩,波動特別大

[復制鏈接]
回帖獎勵 20 黑幣 回復本帖可獲得 1 黑幣獎勵! 每人限 5 次
跳轉到指定樓層
樓主
ID:514692 發表于 2019-4-24 18:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
采樣的波動特別大,電壓采樣后轉換成0-500mm長度,波動的幅度可以達到5mm,這個正常嗎?程序如下:
單片機源程序如下:
  1. #define N 12
  2. void ADC_Init(void)
  3. {
  4.          //配置P10口為高阻輸入,作為ADC采樣引腳
  5.          P1M0= 0X00;                     
  6.          P1M1= 0X01;

  7.          //使用定時器掃描結果
  8.          TMOD= 0x01;                //選擇定時器T0 在工作方式1上 即16位定時器
  9.          TH0  = (65536-50000)/256;  //11.592M晶振的一個機器周期接近1us 這里5W就是0.05s
  10.          TL0  = (65536-50000)%256;
  11.          EA   = 1;                   //開啟總中斷
  12.          ET0  = 1;                   //開啟定時器T0
  13.          TR0  = 1;   
  14. }

  15. /*************************************************************************
  16.                           ADC轉換函數
  17.   輸入:ADC通道0~14數字;      
  18.   輸出:ADC轉換值
  19. **************************************************************************/
  20. unsigned int ADC_Start(unsigned charChannel)
  21. {                                                                                                                                                                                                                                      
  22.          unsignedchar DIWEI,GAOWEI;                //A/D轉換后換算的電壓值
  23.          unsignedint trans_result,ADC_Data;

  24.          ADC_RES=0;
  25.          ADC_RESL=0;

  26.          ADC_CONTR  = ADC_POWER;                //打開ADC電源
  27.          ADC_CONTR|= ADC_START;           //開始ADC轉換,轉換完成后硬件將此位清零
  28.          ADC_CONTR|= Channel;                  //ADC模擬通道選擇;可以用整數代替;如:ADC_CONTR = 10;(二進制1010)則選擇P0.2引腳;                                                                                                                              

  29.    _nop_(); //Must wait before inquiry ,
  30.    _nop_(); //設置ADC_CONTR寄存器后需加4個CPU時鐘周期的延時,才能保證值被寫入ADC_CONTR寄存器
  31.    _nop_();
  32.    _nop_();

  33.          //ADC_FLAG轉換結束標志位;當ADC完成一次轉換后,硬件自動將此位置1,并向CPU發出中斷請求;
  34.    while (!(ADC_CONTR & ADC_FLAG));     //等待轉換完成,硬件自動將此位置1;
  35.    ADC_CONTR &= ~ADC_FLAG;                                     //軟件把ADC_FLAG轉換結束標志位清零;等待下次硬件置1


  36.   GAOWEI = ADC_RES; //高8位
  37.          DIWEI= ADC_RESL; //低4位
  38.          trans_result=GAOWEI;
  39.          trans_result=(trans_result<<8)|DIWEI;
  40.          trans_result=trans_result>>4;

  41.    ADC_Data = trans_result;
  42.    return ADC_Data;
  43. }

  44. /*************************************************************************
  45.                           定時器0中斷服務函數
  46.                          中斷方式掃描ADC轉換值
  47. **************************************************************************/

  48. void ADC(void) interrupt 1 using 1
  49. {
  50.          unsignedchar i,j,k,count;
  51.          unsignedint V,V1,temp;
  52.          unsignedlong V2,V3;
  53.          unsignedint value_buf[N];
  54.          TH0= (65536-50000)/256;
  55.          TL0= (65536-50000)%256;
  56.          i++;
  57.     value_buf[ i] = ADC_Start(7);
  58. ]         if(i== (N-1))
  59. {
  60. i = 0;
  61. /***冒泡排序*/
  62. for(j=0;j<N-1;j++)
  63. {
  64. for(k=0;k<N-j;k++)
  65. {
  66. if ( value_buf[k]>value_buf[k+1] )
  67. {
  68. temp = value_buf[k];
  69. value_buf[k] =value_buf[k+1];
  70. value_buf[k+1] = temp;
  71. }
  72. }
  73. }
  74. /**********************************/

  75. for(count=1;count<N-1;count++)
  76. V +=value_buf[count];

  77. V3=(long)V*500/4095;   
  78. V2=(long)V*500/4095/10;      
  79. V1=(unsignedint)((long)V*500/4095)%10;     
  80. printf("\r\n%ld", V3);
  81. printf(",%ld", V2);
  82. printf(".%u",V1);
  83. printf(",%u", V);
  84. V=0;
  85. }




  86. /*************************************************************************
  87. 主函數
  88. **************************************************************************/
  89. void main (void)
  90. {        

  91. UART1_Init();     //UART串口初始化
  92. ADC_Init();                          //ADC初始化函數
  93. ADC_Start(7);     //ADC采集轉換函數

  94. while(1);     //主循環
  95. }
復制代碼


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

使用道具 舉報

沙發
ID:514692 發表于 2019-4-26 10:43 | 只看該作者
已找到原因,電壓基準波動太大造成的。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.99精品 | 欧美在线小视频 | 久久国内精品 | 999国产视频| 欧美一区二区三区在线播放 | 午夜a√ | 亚洲欧美日韩国产 | 国产精品夜夜春夜夜爽久久电影 | 婷婷国产一区二区三区 | 欧美日韩中文字幕在线播放 | 精品国产一区二区三区久久久四川 | 在线观看视频h | 欧美久久久久久久久 | 中文字幕亚洲精品 | 一级毛片视频在线 | 精品成人av| 国产成人精品高清久久 | 特级特黄特色的免费大片 | 精品国产99 | 欧美精品一区三区 | 激情六月天 | 国产成人精品高清久久 | 成年免费大片黄在线观看一级 | 日本免费在线 | 国产成人精品一区二 | 天堂视频一区 | 日韩精品在线视频免费观看 | 91在线色视频 | 日韩精品久久久 | 在线观看视频一区 | 午夜精品久久久久久不卡欧美一级 | 久久精品aaa | 午夜精品久久久久久久久久久久 | 91久久久久 | 天天爽网站 | 国产精品美女久久久久久久久久久 | 亚洲免费成人av | 中文字幕 在线观看 | 少妇无套高潮一二三区 | 一二区电影 | 毛片免费在线观看 |