在某些测量与控制系统中,有时需要用同频率而有固定相位差的几路信号,并要求频率能在一定范围内变化。用一般电子线路难以实现,而采用单片机可轻易实现。本多路移相信号发生器能输出几路甚至十几路同频率但相位差不同的信号,频率可在一定范围内变动而各路移相维持恒定。与一般电子线路相比,单片机方案电路简单、体积小、价廉,软件也很简单。
1. 工作原理:发生器的变换是通过取反指令 CPL 实现的。程序运行每条指令都耗时一定时间,本程序正是利用这一时间形成各路之间的相移,特别是 DJNZ 指令(N 次)的自循环构成延时主体。由于本三相信号要求各路间相位差为准确 120°,故自循环次数 N1、N2、N3 关系为 N1=N2=N3+1。

自循环次数决定输出信号频率高低:自循环次数越少、程序循环越快、输出频率越高,反之越低。当晶振为 12 MHz 时最高频率约 29 kHz;1.2 MHz 时输出最低频率约 32 kHz。当 6 MHz、要求输出 400 Hz 时 N1=N2=66H、N3=65H。

单片机 8031 采用分时工作方式(由 ALE 信号控制):前半周 P0 口(P0.0~P0.7)输出地址低八位至地址锁存器 IC2(74LS373)锁存,再至 EPROM 存储器 IC3(2716)的地址低八位(A0~A7)。因源程序很短、用地址低八位已足够,8031 高八位地址 P2 口可空出不接,IC3 高位地址线(A8~A10)均接地,简化电路。后半周 P0 口作数据线,8031 从 IC3 取指执行,IC3 由 PSEN 信号选通。
8031 的 P1 口(P1.0~P1.7)8 个脚单独具输出锁存功能且互不干扰,可作 8 路信号输出;P3 口(P3.0~P3.7)8 个脚未作他用(P3.6 WR、P3.7 RD 本电路未用)也可作输出,故总共可输出 16 路。为使输出频率在一定范围内变动,8031 采用外部时钟源驱动方式,由六反相器 IC4(74S04)中两个反相器与 R2、RP、C2 构成方波振荡器,振荡频率(时钟频率)=1/2.2(RP+R2)C2,改变 RP 即可改变时钟频率,变化范围 1.2~12 MHz。

2. 应用实例:三相信号发生器输出标准方波:A 由 P1.0 输出、B 由 P1.1 输出、C 由 P1.2 输出,各方波相位差 120°。软件仅 14 条指令,从 LOOP0 运行一遍回到 LOOP0 即完成前半周(0~180°)输出,重复一遍完成后半周,每运行两遍完成一个周期。各方波正、负半周范围 80~800 Hz,各路相位差精确等于 120°。本电路欲改变输出路数及相位差时只须改软件、电路不动,这是一般电子线路做不到的。

四路信号发生器源程序共 18 条指令,因各路相位差不等各 N 值也不等(N1、N2、N3、N4 分别为 0CH、2FH、13H、27H)。A、B、C、D 四方波由 P1.0、P1.1、P1.2、P1.3 输出,在 1.2~12 MHz 之间变化时 f 变化范围 200~2000 Hz、各路相位差保持不变。取一片干净 EPROM 2716,将机器码从 0000H 开始写入即可。该发生器无须调试,只要元件质量可靠、装焊无误,一装就成、接通电源即可工作。

