📄 pic16cxxx-2-4.htm
字号:
图2.11 A/D模块图<br>
</div>
<p> <br>
下面就A/D转换的各个环节进行详细叙述。<br>
<br>
§2.14.1 A/D采样<br>
<br>
大家知道,如果要使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>
<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>
下列公式可用来计算最短采样时间(即采样所需的最短时间):<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>
大家可能注意到,参考电压VREF对采样时间并没有影响。<br>
§2.14.2 A/D 转换时钟<br>
<br>
我们把每位A/D转换所需时间定义为TAD,则完成一次8位的A/D转换所需时间为9.5TAD。A/D转换时钟源可来自芯片内的RC振荡,也可来自芯片的OSC1振荡输入,这由软件设置选择如下:<br>
1. 2TOSC<br>
2. 8TOSC<br>
3. 32TOSC<br>
4. 内部RC振荡<br>
为保证正确的A/D转换,TAD必须满足一定的条件:</p>
<p><img src="image/a195.gif" width="361" height="110" hspace="45"></p>
<p> 所以当我们设计选择芯片的型号、工作频率时,要考虑到最短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> 另外一点,当一次A/D转换完成后,如果还要进行下一次的A/D转换,则它们之间至少要有2TAD的延迟(间隔)方可。
</p>
<p>§2.14.3 设置A/D口<br>
<br>
A/D口由三个寄存器来设置控制:<br>
ADCON1:数字/模拟选择及VREF选择。<br>
TRISA:方向控制,当PORTA选为模拟口时应置为1。<br>
TRISE:方向控制,当PORTE选为模拟口时应置为1,仅PIC16C74有。<br>
请参阅这些寄存器的描述。<br>
<br>
§2.14.4 A/D转换例程<br>
<br>
这里给出2个A/D转换的例程。<br>
设: ①RA作为A/D输入端<br>
②VREF=VDD<br>
③A/D时钟采用内部RC<br>
④使用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>
当一个A/D转换过程正在进行当中,如果这时GO/DONE位被清零,则这次A/D转换就会中止,而ADRES寄存器保持原来的值不变。一次A/D转换完成或被中止后,如果想要进行下一次A/D转换,则需至少等待2TAD的延时时间,也即过2TAD时间后,采样电路恢复采样工作。
<br>
§2.14.5 睡眠中的A/D转换<br> <br> 在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>
注意,如果要在睡眠中进行A/D转换,还需在执行Sleep指令前置GO/DONE=1。<br>
如果A/D时钟不是RC振荡,那么Sleep指令将会中止本次A/D转换并关闭A/D模块,尽管ADON位仍会保持为1。<br>
当然,关闭A/D模块会使芯片的睡眠功耗处于最低。<br> <br>
§2.14.6 A/D精度和误差<br> <br> 当VDD=5V±10%且VREF=VDD时,A/D的精度是小于±1Lsb,如果VDD小于5V
或者VREF小于VDD,精度可能会降低。A/D管脚上最大的漏电流是±5μA。<br> 当芯片的振荡频率较低时,使用片内RC振荡作为A/D时钟会更好些。而当芯片振荡频率较高时,则选用Tosc作为A/D时钟较佳,且TAD最好不要短于所需的最短时间(见§2.13.2描述),但也不要长于8μS。<br>
在睡眠中进行A/D转换则有利于转换的精度,见§2.14.5的描述。<br> <br>
§2.14.7 复位对A/D的影响<br> <br> 因为复位会使所有的寄存器等于其复位值,所以复位将会关闭A/D
模块并中止正在进行的A/D转换。<br> <br>
§2.14.8 CCP模块触发A/D转换<br> <br> 在PIC16C73A/73B/74A/74B/76/77中,CCP2模块可以用来触发A/D转换,而PIC16C72/72A则是用CCP1来触发A/D转换。<br>
为了用CCP来触发A/D转换,必须使CCP模块设置成"比较输出触发特定事件"模式,即CCPxCON<3:0>=1011,并打开A/D模块(ADCON=1)。这样当触发发生时,GO/DONE=1并启动A/D转换,TMR1同时被清为零以便下一次计时触发。当然,在触发发生之前,用户应先完成A/D
转换之前所需的设置(如A/D输入端、A/D时钟选择等等)并等待足够的采样时间,参见§2.14.2描述。<br> 如果A/D模块没有开启(ADON=0),则CCP触发不会对A/D模块产生作用,但仍会使TMR1
计数器清零。<br>
请参阅§2.11 CCP模块的章节。<br> <br>
§2.14.9 A/D电路连接<br> <br> 如果输入模拟电压超出VSS或VDD0.2V
以上,将会引起A/D转换精度低于期望值。对于PIC16C70/71/71A来说,由于RA0/AN0脚和OSC1紧靠在一起,所以会产生一定影响。如果不需用到4路A/D,建议用户慎用AN0端,而用其他的A/D输入端(AN1~AN3)。<br>
有时为了清除输入量的偏差,可在A/D端上接RC滤波电路。但要注意电阻R的接入不能使负载电阻高于10KΩ,任何外部元件的接入都要保证脚上的漏电流很小。<br>
<br>
§2.14.10 A/D传递函数<br> <br>
理想的A/D转换传递函数如下:
<p align="center">图2.13 A/D传递函数曲线(暂缺)</p>
如图所示,当模拟输入电压为1Lsb(或是VREF的1/256)时发生第一个传递。<br>
<br>
§2.14.11 A/D转换流程<br> <br> 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"> </td>
<td> </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> </td>
</tr>
<tr>
<td> </td>
</tr>
</table></td>
</tr>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -