PWM专用信号发生器何斌1.docx
《PWM专用信号发生器何斌1.docx》由会员分享,可在线阅读,更多相关《PWM专用信号发生器何斌1.docx(130页珍藏版)》请在冰豆网上搜索。
PWM专用信号发生器何斌1
一、题义分析及解决方案
1.1、课程设计名称及内容:
用STARES598PCI单板开发机,设计一款PWM信号产生器,要求能产生频率和占空比可调的PWM信号,采用按键调节频率和占空比。
设计要求:
(1)频率可调范围为1KHZ-100KHZ;
(2)预置生成的频率为20KHZ,占空比为50%;
(3)频率调节采用两个按键,分别为加和减,步进值为10KHZ;
(4)占空比调节采用两个按键,分别为加和减,步进值为10%;
(5)生成的频率信号可以由示波器观察;
(6)同时显示当前频率值和占空比的值。
1.2、题意需求分析
根据本设计给定的内容和要求,可以得出以下结论:
本设计中需要用到的主要有两种芯片,一种用来扫描处理按键,另一种则用来调节PWM信号的频率和占空比,并作为计时器使用,最后是用于显示的七段LED数码显示管和示波器。
其中最核心的是要实现频率和占空比的调节,占空比就是输出的PWM中,高电平保持的时间与该PWM的时钟周期的时间之比,故改变占空比需要通过改变时钟脉冲中高电平的脉冲宽度来实现。
频率则是周期的倒数,若要改变频率,则需改变脉冲的时钟周期。
这里我们考虑到要用到可编程计数器8253的方式0和方式1,8253中方式0时一次中断计数,方式1是可编程触发器,我们用方式的OUT0的输出低电平来触发方式1的GATE1信号的高电平,此时我们将计算出的高低电平计数初值再次循环装入,这样我们便实现了改变输入的电压高电平,即实现了占空比的调节。
由于8253的方式0只是实现一次计数,如果不重新装入初值就不会再次触发,所以要实现频率的调节只需要每次都循环装入初值就可以了。
根据题意分析可知,该实验需设置四个按键,分别用来实现加减频率和占空比,故需用到输入数据的工具和与其配套使用可以实现扫描处理按键功能的芯片,分别用来输入数据和处理按键。
最后需要的便是实现显示功能的LED数码显示管和示波器,其中LED数码显示管的前四位是用来显示频率的数值,后四位用来显示占空比的数值,示波器则用来显示脉冲波形和步进值的。
例如当设定的按键功能为增加频率时,经过按键扫描和判断后,程序中设定的频率寄存器中数值加1,示波器上步进值显示为10KHZ,LED数码显示管上前四位数值加10,后四位不变。
1.3、解决问题的思路及方法
1.3.1、硬件部分:
a.根据需求分析可知,该实验最关键的部分是要实现频率和占空比的调节,若要实现频率和占空比的调节,则分别需要改变时钟脉冲的高电平宽度和时钟周期,而能实现以上功能的芯片,只有8253最为合适,并且8253在方式2下可作为计时器使用。
故该部分功能的实现选择使用8253芯片。
b.其次需要进行实现扫描处理按键功能的芯片和数据输入工具的选择,这里有8255和8279两种芯片以及十六进制小键盘和二进制开关可以选择,在这次实验中我们选择8279芯片和十六进制小键盘,以下是对两种硬件的选择比较:
表1
8279A芯片
8255A芯片
8279芯片可以实现对键盘/显示器的自动扫描,以减轻CPU负担,具有显示稳定,程序简单,不会出现误动作等
8255芯片是可编程的并行接口芯片,不需要附加外部电路便可和大多数并行传输数据的外部设备相连,数据的各位同时传送,使用十分方便
表2
十六进制小键盘
二进制开关
键盘(Keyboard)是常用的输入设备,它是由一组开关矩阵组成,结构相对复杂,与8279A配套使用
二进制逻辑开关一位表示一个二进制数,对于本实验每一位数需要多次拨动八位开关,使实验复杂了许多
表二
c.最后选择用来显示的七段LED数码显示管和示波器即可。
1.3.2、软件部分
a.对8253进行初始化。
对8253的初始化编程包括写入控制字和写入计数初值两个步骤。
在不需要外部信号GATE上升沿触发的方式中,计数就开始了。
由于8253计数器是16位时,CPU要分两次读入。
为了保证读到稳定准确的数据,通常采用两种方法。
b.对8279进行初始化。
8279A芯片内部有一个显示RAM和一个FIFORAM,可以暂存从小键盘中读出的数据,同时可以将内存中的数据暂存到显示RAM中,简化了程序复杂度。
每次将各个位要显示的数据处理好后到换码表中找到对应值,初始化8279后将值送到数据口即实现显示的目的。
二、硬件设计
2.1、选择芯片8253A
2.1.1芯片8253A在本设计中的作用
在该次实验中8253芯片主要用来实现频率和占空比的调节,并作为计时器来使用。
2.1.28253A的功能分析
8253A是一种可编程的定时器/计数器芯片,它可用于计数、分频、定时器等的方面。
8253的主要性能为:
内有三个独立的16位计数器,最大计数范围为0~65535;工作方式可编程控制,可编程6种不同的工作方式;所有输入和输出都与TTL兼容。
计数脉冲频率为0MHZ-2.6MHZ,可以按二进制或BCD码计数,使用单一+5V电源
2.1.38253的内部结构
8253的内部结构如图一所示,由数据总线缓冲器、控制寄存器、读/写控制逻辑和计数器等部分组成。
图一
(1)、数据总线缓冲器:
三态,双向的8位缓冲器,用于将8253与系统数据总线连接。
CPU执行I/O指令时,缓冲器发送或者接收数据,用于写入8253控制字,装入计数初值或读出当前计数值。
(2)、读/写逻辑:
决定三个计数器和控制字寄存器中哪一个能进行工作,并控制内部总线上数据传送的方向。
①CS片选信号:
低电平有效(此时CPU才能对8253进行读写操作),由地址总线经I/O端口译码电路产生。
②RD读信号:
低电平有效,表示CPU正在读取所选定的计数器通道中的内容。
③WR写信号:
低电平有效,此时表示CPU正在将计数初值写入所选中的计数通道中或将控制字写入控制寄存器中。
④A1A0端口选择信号:
8253内部有3个计数器通道和一个控制寄存器端口。
A1A0=00,01,10表示分别选中计数器通道0,1,2,当A1A0=11时选中控制寄存器端口。
(3)、控制寄存器:
接收从CPU来的控制字,并由控制字的D7、D6位的编码决定该控制字写入哪个计数器的控制寄存器,控制寄存器只能写入,不能读出。
(4)、计数器0-2:
当8253用作计数器时,加在CLK引脚上脉冲的间隔可以是不相等的;当它用作定时器时,则在CLK引脚应输入精确的时钟脉冲,8253所能实现的定时时间,取决于计数脉冲的频率和计数器的初值,即:
定时时间=时钟脉冲周期Tc×预置的计数初值n。
对8253来讲,外部输入到CLK引脚上的时钟脉冲频率不能大于2MHZ,否则需分频后才能送到CLK端。
2.1.48253内部引脚功能
8253是一片具有3个独立通道的16位计数器/定时器芯片,使用单一+5V电源,24引脚双列直插式封装,如图二所示。
图二
2.1.4.1、与CPU的接口信号
(1)D0~D7——三态双向数据线。
与CPU数据总线相连,用于传递CPU与8253之间的数据信息、控制信息和状态信息;
(2)CS——片选信号(ChipSelect),输入,低电平有效;
(3)WR——写信号,输入,低电平有效,用于控制CPU对8253的写操作,可与A1,A0信号配合以决定是写入控制字还是计数初值;
(4)RD——读信号,输入,低电平有效。
用于控制CPU对8253的读操作,可与A1,A0信号配合读取某个计数器的当前计数值;
(5)A0,A1——地址输入线。
用于8253内部寻址的4个端口,即3个计数器和一个控制字寄存器。
一般与CPU低位的地址线相连。
2.1.4.2、与外部设备的接口信号
(1)CLK0(CLK1,CLK2)——时钟脉冲输入端,用于输入定时脉冲或计数脉冲信号。
CLK可以是系统时钟脉冲,也可以是由其他脉冲源提供。
8253规定加在CLK引脚的输入时钟周期不得小于380ns;
(2)GATE0(GATE1,GATE2)——门控输入端,用于外部控制计数器的启动或停止计数的操作。
当GATE为高电平时,允许计数器工作,当GATE为低电平时,禁止计数器工作;
(3)OUT0(OUT1,OUT2)——计数输出端。
在不同工作方式中,当计数器计数到0时,OUT引脚上必输出相应的信号。
2.1.58253的工作方式
方式0——计数结束中断方式(InterruptonTerminalCount)
方式1——可编程的单稳态触发器(ProgrammableOneShort)
方式2-----比率发生器、分频器(RateGenerator)方式2用门控信达到同步计数的目的。
方式3----方波发生器(SquareWaveGenerator)方式3的工作过程同方式2,只是输出的脉宽不同。
方式4——软件触发选通方式(SoftwareTriggeredStrobe)用方式4工作时,GATE门控信号只是用来允许或不允许定时操作的,定时的执行过程由装入的初值决定。
方式5——硬件触发选通方式(HardwareTriggeredStrobe)方式5为硬件触发选通方式,完全由GATE端引入的触发信号控制定时和计数。
2.1.68253芯片可编程外围信号状态表
表3
2.1.7所选用8253的工作方式
本实验要求产生频率初值,并且根据步进值来调节频率和占空比,这样我们想到了8253的工作方式0,每次都装入初值。
而要调节占空比的时候要考虑到高电平的输入,这样在周期固定的情况下就必须使用方式1,可编程触发器,即可编程单稳态触发器,此时GATE具有控制装入的功能。
下面我就介绍一下这两种工作方式的原理以及时序图。
(1)首先是方式0----计数结束产生中断
在这种工作方式下,当GATE为1时,写入控制字和计数值后,需要一个CLK脉冲周期计数初值才能被送到计数器减一部件。
OUT是在写入控制字后变成低电平,直到计数器减到0才变成高电平。
OUT端输出信号可以作为中断请求信号。
计数器在外部时钟作用下,每个时钟周期减一。
当GATE为0时,每次写入数值可以获得一个负脉冲,计数停止。
图1.5.1正常计数
图1.5.2GATE信号的作用
图1.5.3方式2时计数过程中改变计数值
(2)、方式1---可编程触发器
在这种工作方式下,写入控制字和计数初值后,计数开始是以GATE的上升沿触发。
之后,OUT输出低电平,次低电平一直维持到计数器减到0。
这样就可以从OUT输出一个负脉冲,该负脉冲由GATE上升沿之后的下一个CLK脉冲的下降沿开始,负脉冲的宽带为计数值乘时钟脉冲时间长度。
若想再次获得同样宽度的负脉冲,只要GATE上升沿再触发一次即可。
可见,这种方式下,装入计数值后可以多次触发。
图1.5.4正常计数
图1.5.5GATE信号的作用
图1.5.6改变初值
2.1.88253的控制字与初始化编程
D7D6D5D4D3D2D1D0
计数器
读写格式
工作方式
数制
D7、D6:
00-----选择通道001-----选择通道1
10-----选择通道11-----无效
D5、D4:
00-----计数器锁存01-----只读写计数器低字节
10-----只读写计数器高字节
11-----先读写计数器低字节,再读写计数器高字节
D3、D2、D1:
000------方式0001------方式1
*10------方式2*11------方式3
100------方式4101------方式5
D0:
1-----BCD码计数0------二进制计数
2.1.98253A的技术参数
表4
参数名称
符号
测试条件
最大规范值
最小规范值
输入低电平电压
VIL
0.8V
-0.5V
输入高电平电压
VIA
Vcc+0.5V
2.2V
输出低电平电压
VOL
Vin=Vcc-0V
0.45V
输出高电平电压
VOH
Vout=Vcc-0.45V
2.4V
输入负载电流
IIL
+/-10V
输出浮动漏电流
IOFL
+/-10V
电源电流
Icc
140V
8253A主要参数分析:
输入低电压的范围是-0.5V~0.8V,输出低电压的范围0.45V~2.4V,输入高电压的范围是2.2V~Vcc+0.5V。
而测试条件均为Vin=Vcc-0V,Vout=Vcc-0.45V。
2.2、选择8279芯片
2.2.1芯片8279A在本次设计中的作用
在本设计中8279A芯片主要用来控制键盘输入和LED显示。
2.2.28279A的功能分析
8279可以实现对LED灯的控制显示。
2.2.38279A主要特性
8279A芯片是一种通用的可编程序的键盘/显示接口器件,单个芯片就能完成键盘输入和LED显示控制两种功能。
可与任何8位机接口。
8279A芯片包括键盘输入和显示输出两个部分。
若采用8279作为键盘/显示器接口,则可以实现对键盘、显示器自动扫描,8279主要是管理键盘输入和显示器输出的。
8279可编程键盘显示器接口芯片具有动态显示驱动电路简单、不占用CPU的时间、可自动进行键盘扫描、与计算机接口方便、编程容易、系统灵活等特点.当今已成为设计计算机应用系统,特别是实时性较高的测控系统的首选器件之一。
2.2.48279A的内部结构
图一8279A的内部结构
上图中:
IRQ:
中断请求输出线
DB0-DB7:
双向数据总路线(传送命令、数据、状态)
、
:
读写控制输入端
RESET:
复位输入端
CLK:
时钟输入端
:
片选
C和/D(A0):
片内寄存器选址
OUTA0-A1、OUTB0-B3:
8位显示输出端
:
熄灭显示输出端
SL0-SL3:
公用扫描输出线
RL0-RL7:
键盘回馈输入线
SHIFT:
抵挡键输入线
CNTL/STB:
控制/选通输入线
8279的键盘接口部分内部有一个8×8位先进先出的堆栈(FIFO),用来存放键盘输入代码,显示器接口部分内部有一个16×8位显示RAM,用来显示段数据,能为16位LED显示器(或其它显示器)提供多路扫描接口。
2.2.58279A的引脚信号和功能
8279可编程键盘显示器接口芯片具有动态显示驱动电路,不占用CPU的时间、可自动进行键盘扫描、与计算机接口方便、编程容易、系统灵活等特点。
8279是可编程的键盘/显示接口芯片。
它既具有按键处理功能,又具有自动显示功能,在单片机系统中应用很广泛。
8279内部有键盘FIFO(先进先出堆栈)/传感器,双重功能的8×8=64BRAM,键盘控制部分可控制8×8=64个按键或8×8阵列方式的传感器。
该芯片能自动消抖并具有双键锁定保护功能。
显示RAM容量为16×8,即显示器最大配置可达16位LED数码显示。
2.2.68279的命令字及其格式
8279有三种工作方式:
键盘工作方式、显示工作方式和传感器工作方式。
键盘工作方式:
双键互锁和N键轮回。
双键互锁是指当有两个以上按键同时按下时,只能识别最后一个被释放的按键,并把其键值送入内部FIFORAM中。
N键轮回是指当有多个按键同时按下时,所有按键的键值均可按扫描顺序依次存入FIFORAM中。
显示工作方式:
是指CPU输入至8279内部FIFORAM的数据的输出格式,有8个字符左端入口显示、16个字符左端入口显示、8个字符右端入口显示、16个字符右端入口显示四种方式。
传感器方式:
是指扫描传感器阵列时,一旦发现传感器的状态发生变化就置位INT向CPU申请中断。
选择不同的工作方式均是通过CPU对8279送入命令来进行控制。
8279共有8种命令,命令寄存器为8位,其中D7~D5为命令特征位,D4~D0为命令的控制位。
CPU对8279写入的命令数据为命令字,读出的数据为状态字。
8279共有八条命令,其功能及命令字格式分述如下。
(1)键盘/显示方式设置命令字
命令格式:
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
D
D
K
K
K
表五
其中:
D7、D6、D5=000为方式设置命令特征位。
DD(D4、D3):
用来设定显示方式,如表五所示。
D4
D3
显示方式
0
0
8个字符显示,左端入口
0
1
16个字符显示,左端入口
1
0
8个字符显示,右端入口
1
0
16个字符显示,右入口
所谓左入口,即显示位置从最左一位(最高位)开始,以后逐次输入的显示字符逐个向右顺序排列;所谓右入口,则是显示位置从最右一位(最低位)开始,以后逐次输入显示字符时,已有的显示字符依次向左移动。
KKK(D2、D1、D0):
用来设定七种键盘/显示扫描方式,如表六所示。
D2
D1
D0
键盘/显示扫描方式
0
0
0
编码扫描键盘,双键锁定
0
0
1
译码扫描键盘,双键锁定
0
1
0
编码扫描键盘,N键轮回
0
1
1
译码扫描键盘,N键轮回
1
0
0
编码扫描传感器矩阵
1
0
1
译码扫描传感器矩阵
1
1
0
选通输入,编码显示扫描
1
1
1
选通输入,译码显示扫描
(2)时钟编程命令
命令格式:
D7
D6
D5
D4
D3
D2
D1
D0
0
0
1
P
P
P
P
P
其中:
D7、D6、D5=001为时钟命令特征位。
PPPPP(D4、D3、D2、D1、D0)用来设定外部输入CLK时钟脉冲的分频系数N。
N取值范围为2~31。
如CLK输入时钟频率为2MHZ,PPPPP应被置为10100(N=20),才可获得8279内部要求的100KHZ的时钟频率。
(3)读FIFO/传感器RAM命令
命令格式:
D7
D6
D5
D4
D3
D2
D1
D0
0
1
0
AI
X
A
A
A
其中:
D7、D6、D5=010为读FIFO/传感器RAM命令特征位。
该命令字只在传感器方式时使用。
在CPU读传感器RAM之前,必须用这条命令来设定所读传感器RAM中的地址。
AAA(D2、D1、D0)为传感器RAM中的八个字节地址。
AI(D4)为自动增量特征位。
当AI=1时,每次读出传感器RAM后地址自动加1使地址指向下一个存储单元。
这样,下一个数据便从下一个地址读出,而不必重新设置读FIFO/传感器RAM命令。
在键盘工作方式中,由于读出操作严格按照先入先出顺序,因此,不需使用这条命令。
(4)读显示RAM命令
命令格式:
D7
D6
D5
D4
D3
D2
D1
D0
0
1
1
AI
A
A
A
A
其中:
D7、D6、D5=011为读显示RAM命令字的特征位。
该命令字用来设定将要读出的显示RAM地址。
AAAA(D3、D2、D1、D0)用来寻址显示RAM中的存储单元。
由于位显示RAM中有16个字节单元,故需要4位寻址。
AI(D4)为自动增量特征位。
AI=1时,每次读出后地址自动加1,指向下一地址。
(5)写显示RAM命令
命令格式:
D7
D6
D5
D4
D3
D2
D1
D0
1
0
0
AI
A
A
A
A
其中:
D7、D6、D5=100为写显示RAM命令字的特征位。
在写显示RAM之前用这个命令字来设定将要写入的显示RAM地址。
AAAA(D3、D2、D1、D0)为将要写入的显示RAM中的存储单元地址。
AI(D4)为自动增量特征位。
AI=1时,每次写入后地址自动加1,指向下一次写入地址。
(6)显示禁止写入/消隐命令
命令格式:
D7
D6
D5
D4
D3
D2
D1
D1
1
0
1
X
IW/A
IW/B
BL/A
BL/B
其中:
D7、D6、D5=101为显示禁止写入/消隐命令特征位。
IW/A、IW/B(D3、D2)为A、B组显示RAM写入屏蔽位。
当A组的屏蔽位D3=1时,A组的显示RAM禁止写入。
因此,从CPU写入显示器RAM数据时,不会影响A的显示。
这种情况通常在采用双4位显示器时使用。
因为两个四位显示器是相互独立的。
为了给其中一个四位显示器输入数据而又不影响另一个四位显示器,因此必须对另一组的输入实行屏蔽。
BL/A、BL/B(D1、D0)为消隐设置位。
用于对两组显示输出消隐。
若BL=1,对应组的显示输出被消隐。
当BL=0,则恢复显示。
(7)清除命令
命令格式:
D7
D6
D5
D4
D3
D2
D1
D0
1
1
0
CD
CD
CD
CF
CA
其中:
D7、D6、D5=110为清除命令特征位。
清除显示RAM方式如表2-4所示。
D4
D3
D2
清除方式
1
0
×
将全部显示RAM清为00H
1
1
0
将全部显示RAM置为20H,A组输出0010,B组输出0000
1
1
1
将全部显示RAM置为FFH
0
×
×
D0=0不清除,D0=1按上述方法清除
CF(D1)用来置空FIFO存储器,当CF=1时,执行清除命令后,FIFORAM被置空,使INT输出线复位。
同时,传感器RAM的读出地址也被置为0。
CA(D0)为总清的特征位。
它兼有CD和CF的联合效能。
在CF=1时,对显示的清除方式由D3、D2的编码决定。
显示RAM清除时间约需160us。
在此期间状态字的最高位Du=1,表示显示无效。
CPU不能向显示RAM写入数据。
(8)结束中断/错误方式设置命令
命令格式:
D7
D6
D5
D4
D3
D2
D1
D0
1
1
1
E
X
X
X
X
其中:
D7、D6、D5=111为该命令的特征位。
此命令有两种不同的作用。
①作为结束中断命令。
在传感器工作方式中使用。
每当传感器状态出现变化时,扫描检测电路就将其状态写入传感器RAM,并启动中断逻辑,使INT变高,向CPU请求中断,并且禁止写入传感器RAM。
此时,若传感器RAM读出地址的自动递增特性没有置位(AI=0),则中断请求INT在CPU第一次从传感器RAM读出数据时就被清除。
若自动递增特征已置位(AI=1),则CPU对传感器RAM的读出并不能清除INT,而必须通过给8279写入结束中断/错误方式设置命令才能使INT变低。
因此,在传感器工作方式中,此命令用来结束传感器RAM的中断请求。
②作为特定错误方式设置命令。
在8279已被设定为键盘扫描N键轮回方式以后,如果CPU给8279又写入结束中断/错误方式设置命令(E=1),则8279将以一种特定的错误方式工作。
这种方式的特点是:
在8279的消抖周期内,如果发现多个按键同时按下,则FIFO状态字中的错误特征位S/E将置1,并产生中断请求信号和禁止写入FIFORAM。
上述八种用于确定8279操作方式的命令字皆由D7D6D5特征位确定,输入8279后能自动寻址相应的命令寄存器。
因此,写入命令字时唯一的要求是使数据选择信号A0=1。
2.2.78279的状态字及其格式
8279的FIF