⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pic16cxxx-2-4.htm

📁 PIC单片机C语言教程!绝对经典
💻 HTM
📖 第 1 页 / 共 2 页
字号:
                图2.11 A/D模块图<br>
            </div>
            <p> <br>
              下面就A/D转换的各个环节进行详细叙述。<br>
              <br>
              §2.14.1 A/D采样<br>
              <br>
              &nbsp;&nbsp;&nbsp;&nbsp;大家知道,如果要使A/D转换达到希望的精度,就必须使采样电路中的保持电容(Chold)充分充电,让其达到A/D输入端的电压水平。<br>
              下图是PIC16C7X A/D输入的采样电路。</p>
            <p align="center"><img src="image/a194.gif" width="581" height="245"></p>
            <p align="center">图2.12 A/D 采样电路(暂缺)</p>
            &nbsp;&nbsp;&nbsp;&nbsp; <p>从图中可看出,由于A/D输入脚亦可定义为数字脚,所以它们内部也接有反向偏压二极管,因此模拟输入必须落在VSS~VDD范围内。如果模拟量输入超出VT(0.6V),则会出现二极管偏置挂起。负载电阻RS和采样开关电阻RSS会直接影响Chold的充电时间。如图中曲线所示,RSS的阻值亦随VDD而变化,VDD越低,则RSS会越大。对于负载电阻RS而言,最大值不应超出10KΩ,这主要是因为要满足管脚上的漏电流参数。在10K的负载阻抗下,当VREF=VDD=5V时,由于漏电流产生的最大可能误差为±5mv或±1/4LSB。<br>
              &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;下列公式可用来计算最短采样时间(即采样所需的最短时间):<br>
              TSMP=放大器设置时间+Chold充电时间+温度系数校正 =5μS+TC+[(Temp-25℃)(0.05μS/℃)]<BR>
            <p>其中充电时间TC=512PF(RIC+RSS+RS)Ln(1/511)<br>
              该公式允许1/2Lsb的误差(512步逐次逼近式A/D)。<br>
              例:设 负载电阻RS=10KΩ<br>
              电源电压VDD=5V<br>
              温度=50℃<br>
              则 由VDD=5V可得出RSS=7KΩ<br>
              而 RIC=1KΩ<br>
              得出 TC=512PF(1KΩ+7KΩ+10KΩ)Ln(0.0020)<br>
              =5.724μS<br>
              所以采样时间 TSMP=5μS+5.724μS+(50℃-25℃)(0.05μS/℃)<br>
              =11.974μS<br>
              &nbsp;&nbsp;&nbsp;&nbsp;大家可能注意到,参考电压VREF对采样时间并没有影响。<br>
              §2.14.2 A/D 转换时钟<br>
              <br>
              &nbsp;&nbsp;&nbsp;&nbsp;我们把每位A/D转换所需时间定义为TAD,则完成一次8位的A/D转换所需时间为9.5TAD。A/D转换时钟源可来自芯片内的RC振荡,也可来自芯片的OSC1振荡输入,这由软件设置选择如下:<br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1. 2TOSC<br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2. 8TOSC<br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3. 32TOSC<br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4. 内部RC振荡<br>
              &nbsp;&nbsp;&nbsp;&nbsp;为保证正确的A/D转换,TAD必须满足一定的条件:</p>
            <p><img src="image/a195.gif" width="361" height="110" hspace="45"></p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;所以当我们设计选择芯片的型号、工作频率时,要考虑到最短TAD的因素,下表是PIC16C7X各种型号在各种振荡频率下的TAD值。</p>
            <p><img src="image/a197.gif" width="686" height="213"></p>
            <p align="center"><img src="image/a198.gif" width="582" height="226"></p>
            <p align="center">表2.7 TAD和芯片型号、频率关系表</p>
            <p> &nbsp;&nbsp;&nbsp;&nbsp;另外一点,当一次A/D转换完成后,如果还要进行下一次的A/D转换,则它们之间至少要有2TAD的延迟(间隔)方可。 
            </p>
            <p>§2.14.3 设置A/D口<br>
              <br>
              &nbsp;&nbsp;&nbsp;&nbsp;A/D口由三个寄存器来设置控制:<br>
              &nbsp;&nbsp;&nbsp;&nbsp;ADCON1:数字/模拟选择及VREF选择。<br>
              &nbsp;&nbsp;&nbsp;&nbsp;TRISA:方向控制,当PORTA选为模拟口时应置为1。<br>
              &nbsp;&nbsp;&nbsp;&nbsp;TRISE:方向控制,当PORTE选为模拟口时应置为1,仅PIC16C74有。<br>
              请参阅这些寄存器的描述。<br>
              <br>
              §2.14.4 A/D转换例程<br>
              <br>
              &nbsp;&nbsp;&nbsp;&nbsp;这里给出2个A/D转换的例程。<br>
              设: ①RA作为A/D输入端<br>
              &nbsp;&nbsp;&nbsp;&nbsp;②VREF=VDD<br>
              &nbsp;&nbsp;&nbsp;&nbsp;③A/D时钟采用内部RC<br>
              &nbsp;&nbsp;&nbsp;&nbsp;④使用A/D中断</p>
            <p align="center"><img src="image/a199.gif" width="521" height="309"></p>
            <p align="center"><img src="image/a200.gif" width="435" height="257"></p>
            &nbsp;&nbsp;&nbsp;&nbsp;当一个A/D转换过程正在进行当中,如果这时GO/DONE位被清零,则这次A/D转换就会中止,而ADRES寄存器保持原来的值不变。一次A/D转换完成或被中止后,如果想要进行下一次A/D转换,则需至少等待2TAD的延时时间,也即过2TAD时间后,采样电路恢复采样工作。 
            <br>
            §2.14.5 睡眠中的A/D转换<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;在PIC16C7X中,A/D模块在睡眠状态下仍可工作,但这首先需要用户选择内部RC作为A/D 
            时钟(ADCS1:ADCS0=I1)。当选择RC振荡为A/D时钟后,A/D模块要等待一个指令周期后,才开始进行A/D转换,这样就允许让用户执行一条Sleep(进入睡眠)指令。当芯片进入睡眠后,将会消除A/D转换过程中产生的开关噪声,这样可使A/D 
            转换更精确可靠。当A/D转换完成后,GO/DONE位清零,转换结果被置入ADRES寄存器。这时如果A/D中断开启,则会产生中断请求并把芯片从睡眠中唤醒,但如果A/D中断关闭,则A/D模块也会关闭,尽管ADON位仍保持为1。<br> 
            &nbsp;&nbsp;&nbsp;&nbsp;注意,如果要在睡眠中进行A/D转换,还需在执行Sleep指令前置GO/DONE=1。<br> 
            &nbsp;&nbsp;&nbsp;&nbsp;如果A/D时钟不是RC振荡,那么Sleep指令将会中止本次A/D转换并关闭A/D模块,尽管ADON位仍会保持为1。<br> 
            &nbsp;&nbsp;&nbsp;&nbsp;当然,关闭A/D模块会使芯片的睡眠功耗处于最低。<br> <br>
            §2.14.6 A/D精度和误差<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;当VDD=5V±10%且VREF=VDD时,A/D的精度是小于±1Lsb,如果VDD小于5V 
            或者VREF小于VDD,精度可能会降低。A/D管脚上最大的漏电流是±5μA。<br> &nbsp;&nbsp;&nbsp;&nbsp;当芯片的振荡频率较低时,使用片内RC振荡作为A/D时钟会更好些。而当芯片振荡频率较高时,则选用Tosc作为A/D时钟较佳,且TAD最好不要短于所需的最短时间(见§2.13.2描述),但也不要长于8μS。<br> 
            &nbsp;&nbsp;&nbsp;&nbsp;在睡眠中进行A/D转换则有利于转换的精度,见§2.14.5的描述。<br> <br>
            §2.14.7 复位对A/D的影响<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;因为复位会使所有的寄存器等于其复位值,所以复位将会关闭A/D 
            模块并中止正在进行的A/D转换。<br> <br>
            §2.14.8 CCP模块触发A/D转换<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;在PIC16C73A/73B/74A/74B/76/77中,CCP2模块可以用来触发A/D转换,而PIC16C72/72A则是用CCP1来触发A/D转换。<br> 
            &nbsp;&nbsp;&nbsp;&nbsp;为了用CCP来触发A/D转换,必须使CCP模块设置成&quot;比较输出触发特定事件&quot;模式,即CCPxCON&lt;3:0&gt;=1011,并打开A/D模块(ADCON=1)。这样当触发发生时,GO/DONE=1并启动A/D转换,TMR1同时被清为零以便下一次计时触发。当然,在触发发生之前,用户应先完成A/D 
            转换之前所需的设置(如A/D输入端、A/D时钟选择等等)并等待足够的采样时间,参见§2.14.2描述。<br> &nbsp;&nbsp;&nbsp;&nbsp;如果A/D模块没有开启(ADON=0),则CCP触发不会对A/D模块产生作用,但仍会使TMR1 
            计数器清零。<br>
            请参阅§2.11 CCP模块的章节。<br> <br>
            §2.14.9 A/D电路连接<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;如果输入模拟电压超出VSS或VDD0.2V 
            以上,将会引起A/D转换精度低于期望值。对于PIC16C70/71/71A来说,由于RA0/AN0脚和OSC1紧靠在一起,所以会产生一定影响。如果不需用到4路A/D,建议用户慎用AN0端,而用其他的A/D输入端(AN1~AN3)。<br> 
            &nbsp;&nbsp;&nbsp;&nbsp;有时为了清除输入量的偏差,可在A/D端上接RC滤波电路。但要注意电阻R的接入不能使负载电阻高于10KΩ,任何外部元件的接入都要保证脚上的漏电流很小。<br> 
            <br>
            §2.14.10 A/D传递函数<br> <br>
            理想的A/D转换传递函数如下: 
            <p align="center">图2.13 A/D传递函数曲线(暂缺)</p>
            &nbsp;&nbsp;&nbsp;&nbsp; 如图所示,当模拟输入电压为1Lsb(或是VREF的1/256)时发生第一个传递。<br> 
            <br>
            §2.14.11 A/D转换流程<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;PIC16C7X A/D转换的过程如下图所示:<br> 
            <br> <div align="center"><img src="image/a201.gif" width="592" height="842"><br>
            </div>
            <p align="right"> <a href="PIC16Cxxx-2-3.htm">上一页</a> <a href="PIC16Cxxx-2-5.htm"> 
              下一页</a></p>
            <p><a href="PIC16Cxxx-1.htm">第一章</a> <a href="PIC16Cxxx-2.htm">第二章</a> 
              <a href="PIC16Cxxx-3.htm">第三章</a> <a href="PIC16Cxxx-4.htm">第四章</a> 
              <a href="PIC16Cxxx-5.htm">第五章</a> <a href="PIC16Cxxx-6.htm">第六章</a> 
              <a href="PIC16Cxxx-7.htm">第七章</a> <a href="PIC16Cxxx-8.htm">第八章</a> 
              <a href="PIC16Cxxx-9.htm">第九章</a> <a href="PIC16Cxxx-10.htm">第十章</a></p></td>
        </tr>
      </table>
      <table width="700" border="0" cellspacing="0" cellpadding="0">
        <tr> 
          <td width="20">&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
      </table>
      <table width="700" border="0" cellspacing="0" cellpadding="0">
        <tr bgcolor="#990000"> 
          <td height="1" width="634"></td>
        </tr>
        <tr align="right"> 
          <td height="6"></td>
        </tr>
        <tr align="right"> 
          <td><font color="#990000" size="2">[ <a href="index.htm">返回</a> ]</font> 
          </td>
        </tr>
        <tr>
          <td>&nbsp;</td>
        </tr>
        <tr> 
          <td>&nbsp;</td>
        </tr>
      </table></td>
  </tr>
</table> 
 
</body> 
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -