如何用COP820CJ单片机实现可变输入范围的PWM A/D转换?

分享到:
点击量: 200529

  1 COP820CJ芯片介绍

  COP820CJ是美国国家半导体公司的一款8位单片机,其主要数据有:64字节RAM,1K字节ROM,24个I/O口,时钟频率10MHz,工作电压2.5V~6.0V。主要特性有:多输入唤醒机制(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 工作原理

  2.1 基本原理

  利用COP820CJ芯片上的模拟比较器和脉冲宽度调制方式,可以构成由软件调控的可变输入范围的A/D转换器。原理图见图1。图中,L1和L2为比较器输入端,如电容电压小于输入电压,L3端输出高脉冲,反之,L3输出低脉冲,并对低脉冲减1计数。输入电压可通过L1、L2之间并联的两个背向二极管对电容C1快速充放电,使两者电位迅速接近。

  比较器允许的输入电压为0.4V~1.5V(此时电容电压与充电、放电时间之间为近似线性关系),实际输入电压范围可能要更小一些。因此,我们可以通过设定高低脉冲的参数,使电容电压始终保持在测量范围内。设电源为5V,时钟频率为10MHz,脉冲周期为24个时钟,即2.4微秒,输入电压范围是

  

 

  1.0V~3.3V。我们可设置高脉冲为先低8个时钟,再高16个时钟;设置低脉冲为先高5个时钟,再低19个时钟。这样,如果L3始终输出高脉冲,电容电压VH近似为16/24×VCC=3.30V;如果L3始终输出低电平,电容电压VL近似为5/24×VCC=1.04V。A/D转换时,L3根据比较结果输出或高或低脉冲,当脉冲数足够多时,计数器的值即代表了输入电压值,并可用下式表示:

  VIN=VL+(VH-VL)×(TON/TOTAL)其中,TON为计数器的值,TOTAL为总脉冲数。

  2.2 转换时间及分辨率

  由上可知,脉冲周期为2.4微秒,如脉冲总数选为100,进行两次计数,则转换时间近似为2.4×100×2=480微秒。如输入为高速变化信号,只需减少脉冲总数即可。如脉冲总数为100,输入电压为1.0~3.3V,则分辨率为23mV。为提高分辨率,可先对输入信号进行粗测,然后调整高低脉冲的占空比,使对应电压略超出测量结果的上下限值,这样可以获得更高的分辨率。

  3 软件设计

  3.1 流程图

  流程图见图2。

  3.2 相关信息

  控制寄存器2(CNTRL2〔CCH〕)的第三位是比较器允许位,第四位为比较器输出。X指令为交换两寄存器中的数据。SBIT(RBIT)i,n指令为将n寄存器的第i位置1(0)。IFBITi,n指令在n寄存器的第i位为1时执行下一条指令,否则跳过。DRSZn指令先将寄存器n的值减1,如结果非零,则执行下一条指令,否则跳过。

  要保证脉冲周期为24个时钟,必须**计算

  

 

  

 

  指令周期。以下指令周期的时钟数为:NOP:1个时钟;

  SBIT/RBIT/IFBIT(对B,X寄存器操作时):1个时钟;

  DRSZ/JP:3个时钟。

  3.3 汇编代码