用单片机设计动态输入范围的PWMA/D转换器.doc

用单片机设计动态输入范围的PWMA/D转换器.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用单片机设计动态输入范围的PWMA/D转换器

摘? 要:给出一个利用COP820CJ片上比较器设计的基于脉宽调制的A/D变换器的设计方案,同时给出了利用软件调整该A/D转换器的输入电压的程序和方法。? ??? 关键词:PWM;A/D变换;计数;COP820CJ??? 1 COP820CJ芯片介绍 ????COP820CJ是美国国家半导体公司生产的一款8位单片机,它内含64字节RAM和1k字节ROM,并带有24个I/O口,时钟频率为10MHz,工作电压为2.5~6.0V。 COP820 CJ具有多输入唤醒(MIWU)、低压复位保护、片上模拟比较器和低电磁辐射设计等功能,其I/O口可编程为三态、推挽输出、弱上拉输入等类型。   COP820CJ的端口分为L/I/D/G四类。其中I口为4位输入端口,D口为4位输出端口,G口有6位I/O口和2位输入口,L口为8位I/O 口。同时L口也是芯片的唤醒端口,其中L1和L2又是比较器输入口,L3又是比较器输出口。L口配有数据寄存器(LDATA[0DOH])和配置寄存器(LCONF[0D1H]),两寄存器可共同决定该端口的状态。具体关系见表1所列。 ??? COP820CJ的片上RAM、端口、寄存器均可映射到00H~FEH的数据内存空间,其中C0~CFH段主要是唤醒及用看门狗控制寄存器,D0~DFH段有8个端口类寄存器,E0~EFH段为计时器和系统寄存器。00~2FH及F0~FFH为RAM地址。其中,F0~FEH段可用作寄存器,并包括B地址寄存器[FCH]、X地址寄存器[FEH]和SP堆栈指针[FDH]三个专用寄存器。 2 COP820CJ的工作原理 2.1基本原理   利用COP820CJ的片上模拟比较器和脉冲宽度调制方式可以构成由软件调控且输入范围可变的A/D转换器。其工作原理图见图1所示。图中,L1和L2为比较器输入端,当电容电压小于输入电压时, L3端输出高电平脉冲。反之,L3输出低脉冲,并对低脉冲减1计数。电路中的输入电压可通过L1、L2之间并联的两个背向二极管对电容C1快速充放电,以使两者电位迅速接近。   比较器允许的输入电压为0.4V~VCC-1. 5V(此时电容电压与充电、放电时间之间为近似线性关系),实际输入电压范围可能要更小一些。因此,可以通过设定高低脉冲的参数使电容电压始终保持在测量范围之内。若电源为5V,时钟频率为10MHz,脉冲周期为24个,即2.4μs,输入电压范围是1.0V~3.3V。那么,可以设置高脉冲为先低8个时钟,再高16个时钟;设置低脉冲为先高5个时钟,再低19个时钟。这样,如果L3始终输出高脉冲,电容电压VH将近似为VCC×16/24=3.30V;如果L3始终输出低电平,电容电压VL则近似为VCC×5/24=1.04V。进行A/D转换时,L3可根据比较结果输出高低脉冲,当脉冲数足够多时,计数器的值即代表了输入的电压值,并可用下式表示:   其中,NTON为计数器的值,NTOTAL为总脉冲数。? 2.2转换时间及分辨率   由于脉冲周期为2.4μs,若脉冲总数为100,那么,进行两次计数的转换时间近似为2.4×100×2=480μs。当输入为高速变化的信号时,只需减少脉冲总数即可。如脉冲总数为100,输入电压为1.0~3.3V,则分辨率为23mV。为提高分辨率,可先对输入信号进行粗测,然后调整高低脉冲的占空比,以使对应电压略超出测量结果的上下限值,这样即可获得更高的分辨率。 3软件设计 ????图2所示是用COP820CJ设计的A/D转换器的工作软件流程图。其中,控制寄存器2(CNTRL2[CC])的第三位是比较器允许位,第四位为比较器输出。X指令为交换两寄存器中的数据。“SBIT(RBIT)i,n”指令为将n 寄存器的第i位置1(0)“IFBITi,n”指令在n寄存器的第i位为1时执行下一条指令,否则跳过。“DRSZn”指令的作用是先将寄存器n的值减 1,如结果非零,则执行下一条指令,否则跳过。   要保证脉冲周期为24个时钟,必须精确计算指令周期。其指令周期的时钟数分别为:

您可能关注的文档

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档