- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用1个IO口实现AD转换输入
使用I/O口实现A/D转换输入
文件编码:HA0128S
简介
在某些特定的场合,主要是数字电子应用,当然由一个内置A/D转换的MCU极好实现,也可以使用经济的外部器件此篇应用将以HOLTEK系列MCU为对象,介绍如何使用标准的施密特输入口或CMOS IO 口做为基本的A/D转换口使用,为对A/D转换精度要求不高的应用提供一种超低成本的A/D转换实用方案
功能说明
这种模数转换的原理就是通过对某一电容充电达到某个的电压值,然后以恒定电流进行放电,我们可以通过测量放电时间来获得当前输入信号的强弱。通过设置IO口为输出高电平可以迅速对电容进行充电,在输出口与电容之间建议串接一个100的小电阻来限流,防止大电流损坏。电容充电的表达公式如下:
Vc = Vo (1-e-t/RC)
此处Vc 是电容电压,Vo 是IO口输出电压(与MCU实际工作电压有关),将输出口置高开始对电容充电后仅需仅短时间的延时,充电电压即可达到Vo 的98%,此案中需要的时间大约为39s。完成充电过程后即可将控制口设置为输入状态,因为其输入状态为高阻态,此时电容就只能通过三极管的发射极对地以恒定的电流放电,电流大小与发射极上串拉的电阻有关。改变放电电流的大小即会改变放电斜率。
电流大小与电容电量之间的关系式如下:
I = C
此处C是dV/dt是电容上变化率单位是伏特每秒I是流过电容的电流单位为安培。如下图所示,如果流经电容的电流是恒定的,那么充电时电容电压上升的速率也是恒定的,实际上也就是说对电容的充放电等于 。
在放电时,如果电容与与一个CMOS输入端相连接,随着电容电压幅度的减小,当其幅度降低到CMOS输入的开关极限值,CMOS输入端将从高电平变为低电平。使用内部定时/计数器从放电周期开始对输入端进行监测。当输入端出现下降沿时,如果定时计数器停止计数,定时器寄存器的剩余值是与放电电流成比例的,放电电流大小是由发射极的两个电阻决定的,其中一个电阻是电位。
硬件部分
硬件电路很简单,由少的标准元件组成。红色的LED,还具有上电指示的功能。不同颜色的LED或串联几个低功耗的二极管,如IN4148,可以作为选择。这个LED的,与Q1基极到射极之间的电压相减,便得出串联电阻R2和R3上的电压,从而在Q1的发射极产生一个恒流源这将在三极管的集电极产生一个恒定的电流,该电流即为放电电流。三极管的集电极电流同基极电流的关系,是由三极管的决定的,与外部电路的精确度无关。几乎所有的NPN型三极管都可以应用到该电路中。一个I/O引脚经一个100欧姆的电阻与电容连接,当充电时,这个电阻对电容具有限流保护作用。在放电,I/O口有高输入阻抗,不会影响A/D转换的精确度。R2当R3电位计在最小值,三极管工作在饱和区,并持电流源。如果选择R2 为1.2K,提供的电流源的值大约为1mA,选取较小的电阻值以便于计算。选取R3为10K是的,当其在较大值时可减少功耗,并且可以防止外界干扰。
该例使用HT48F06E Flash I/O 单片机,事实上任何一款带有施密特触发,CMOS I/O 结构的Holtek单片机都可以使用。注意,NMOS型I/O引脚不适于该。电容放电电压的下降沿,非施密特型的CMOS输入也不适用于该应用,因为缓慢的下降沿输入在电压降到时不能产生一个明确的逻辑转换。
检查电路将会发现,电容电压从Vdd开始放电到输入引脚的之间的时间可由电压的变化量/电压的变化率求得,方程式如下:
Vth是输入引脚的值,C是电容值,I是恒定的放电电流值。但I可由发射极的电压/R2 + R3) 得出,代入上面方程式,可得出:
Ve是发射极电压值,它可由LED的电压减去三极管的Vbe得出。
软件部分
模数转化码很简单,它是由连续地对电容充放电来实现的。对电容充电是通过设置I/O为输出,并设置一个较长的固定时间周期以确保对电容满充。一个100 nF 的电容和一个100欧姆的电阻可以达到10us 的固定时间周期,它可以作为一个计算合适充电时间的标准。推荐对电容充电的合适时间应不小于10倍的RC时间常数。当I/O口由低输出变为高输入状态,放电过程即可开始同时定时计数器也开始计时。该系统使用3.58MHz的晶体振荡,如果设置定时器预分频器的值为16,将得到一个约4.47us的时钟周期。此时TMR寄存器的溢出周期为(255×4.47us)1.14ms。当该溢出周期远小于电容由满充到输入电压值的放电时间,模数转换值将会是大于8位二进制的数据。如果增加预分频器值到64,将会得到一个的时钟周期,允许模数转换值8位255以内。
结果
如下示波器图形为电容电压指数上升曲线。可见上升时间比预计值长,这可能是由于单片机CMOS输出口的电压驱动。充电周期当充电电流值比较大时,。注意,电流源将地从CMOS输
文档评论(0)