<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32的AD輸入口存在電壓的問(wèn)題--連續(xù)轉(zhuǎn)換模式

          STM32的AD輸入口存在電壓的問(wèn)題--連續(xù)轉(zhuǎn)換模式

          作者: 時(shí)間:2016-11-17 來(lái)源:網(wǎng)絡(luò) 收藏
          找到了AD輸入口存在電壓的問(wèn)題

          今天重新整了一下程序,改變了思路,結(jié)果不但解決了數(shù)據(jù)出現(xiàn)錯(cuò)位的問(wèn)題.無(wú)意中居然把前面的問(wèn)題也解決了,原先懷疑輸入阻抗引起的結(jié)論是錯(cuò)誤的。真正的罪魁禍?zhǔn)资窍旅孢@句話:
          ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;
          使用連續(xù)轉(zhuǎn)換模式,在采用電阻分壓取信號(hào)并且該分壓電阻很大的情況下,容易出現(xiàn)信號(hào)被引腳電壓淹沒(méi)的現(xiàn)象。至于該電壓為何在連續(xù)轉(zhuǎn)換模式下產(chǎn)生,現(xiàn)在我沒(méi)進(jìn)一步研究。因?yàn)楹髞?lái)我的思路是不用連續(xù)轉(zhuǎn)換,結(jié)果什么問(wèn)題都解決了,呵呵。
          上午我將Fadc改成16M,并且Ts設(shè)成最小(1.5Cycles),當(dāng)電池拿掉后,量AD輸入口的電壓,約為0.04V,已經(jīng)比較接近零了。接上電池(標(biāo)準(zhǔn)3.0V,滿的時(shí)候?qū)嶋H為3.2V)后,分壓點(diǎn)的電壓變成1.52V,讀到CPU內(nèi)部經(jīng)運(yùn)算后的電壓為1.6V,這個(gè)數(shù)據(jù)實(shí)際上已經(jīng)很好的,因?yàn)榇藭r(shí)的輸入阻抗應(yīng)該在1.2K以下了.看來(lái)應(yīng)該重新理解一下AD的輸入阻抗了。

          本文引用地址:http://www.ex-cimer.com/article/201611/315432.htm

          故使用ADC單詞轉(zhuǎn)換模式解決這個(gè)問(wèn)題

          例如,每隔30ms讀取4個(gè)AD口的數(shù)值,官方的例程只給出ADC+DMA的方式,這里采用非DMA方式。

          先配置IO口:

          GPIO_InitTypeDef gpioInitStruct;
          gpioInitStruct.GPIO_Speed = GPIO_Speed_50MHz;

          gpioInitStruct.GPIO_Pin = GPIO_Pin_3;
          gpioInitStruct.GPIO_Mode = GPIO_Mode_AIN;
          GPIO_Init(GPIOC, &gpioInitStruct);

          gpioInitStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;
          gpioInitStruct.GPIO_Mode = GPIO_Mode_AIN;
          GPIO_Init(GPIOA, &gpioInitStruct);

          配置ADC:
          將ADC配置成非掃描方式(就是每次處理時(shí)不會(huì)掃描本組內(nèi)的所有端口),因?yàn)椴捎靡?guī)則組時(shí)只有一個(gè)寄存器保存adc結(jié)果;單次模式。

          ADC_InitTypeDef adcInitStruct;
          adcInitStruct.ADC_Mode = ADC_Mode_Independent;
          adcInitStruct.ADC_ScanConvMode = DISABLE;
          adcInitStruct.ADC_ContinuousConvMode = DISABLE;
          adcInitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
          adcInitStruct.ADC_DataAlign = ADC_DataAlign_Right;
          adcInitStruct.ADC_NbrOfChannel = 1;

          //ADC自校驗(yàn):

          timeOut = 10000;
          ADC_ResetCalibration(ADC1);
          while((ADC_GetResetCalibrationStatus(ADC1)) && (timeOut--));

          timeOut = 10000;
          ADC_StartCalibration(ADC1);
          while((ADC_GetCalibrationStatus(ADC1)) && (timeOut--));

          每次掃描時(shí)調(diào)用函數(shù):

          void sysGetAdcResult(void)
          {
          u8 i;

          for(i=0; i<4; i++)
          {
          _adcResult[i] = 0x0FFF;

          switch (i)
          {
          case 0: ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 1, ADC_SampleTime_239Cycles5); break;
          case 1: ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_239Cycles5); break;
          case 2: ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_239Cycles5); break;
          case 3: ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 1, ADC_SampleTime_239Cycles5); break;
          }
          // 必須先調(diào)用ADC_Cmd()

          ADC_Cmd(ADC1, ENABLE);
          ADC_TempSensorVrefintCmd(ENABLE);
          ADC_SoftwareStartConvCmd(ADC1, ENABLE);

          // 需要等待一段時(shí)間
          sysDelay(200);
          _adcResult[i] = ADC_GetConversionValue(ADC1);

          ADC_ClearFlag(ADC1, ADC_FLAG_EOC);
          ADC_TempSensorVrefintCmd(DISABLE);
          ADC_SoftwareStartConvCmd(ADC1, DISABLE);
          ADC_Cmd(ADC1, DISABLE);
          }
          }

          .您在上面提到的采樣時(shí)間的選擇,AD轉(zhuǎn)換周期(TCONV) = 采樣時(shí)間+ 12.5個(gè)周期。如何選擇?依據(jù)是什么?

          要看外接的等效輸入電阻及電容。103的DATASHEET上有一個(gè)公式

          R(AIN)
          還有一個(gè)圖表

          Ts (cycles)tS (μs)RAIN max (kΩ)

          1.50.111.2

          7.50.5410

          13.50.9619

          28.52.0441

          41.52.9660

          55.53.9680

          71.55.11104

          239.517.1350


          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();