第1章 引言
1.1 设计背景
信号发生器又称信号源或振荡器,是现代测试领域中应用最为广泛的信号源之一。它可以为工程调试提供不同的波形信号,如正弦波、三角波、方波、锯齿波等等。在工程设计及调试工程中,这些波形信号常被用到。
早在二十年代,当电子设备刚问世的时候,信号发生器就出现了。随着通信和雷达技术的快速发展,四十年代出现了主要用于测试各种接收能力的标准信号发生器,使信号发生器从定性分析的测试仪器变为了定量分析的测试仪器,同时还出现了可用来测试脉冲电路或用作脉冲调制器的脉冲信号发生器。早期的信号发生器机械结构比较复杂,功率比较大,电路比较简单(与数字仪器、示波器等相比),因此发展速度较为缓慢慢。自六十年代以来,信号发生器有了迅速的发展,出现了函数发生器、扫描信号发生器、合成信号发生器、程控信号发生器等新种类。各种信号发生器的主要性能指标也都有了大幅度的提高,同时在简化机械结构、小型化、多功能等方面也有了显著的进展。
传统的信号发生器一般可以完全采用由硬件电路搭建而成,比如采用555振荡电路[1]产生正弦波、三角波和方波的电路便是可取的路径之一,它不用依靠单片机。但是这种电路存在波形质量差,控制困难,调节范围小,电路复杂和体积大等缺点。在科学研究和生产实践,如工业过程控制,生物医学,地震模拟机械振动等领域中常常要用到低频信号源。而由硬件电路构成的低频信号其性能往往难以令人满意,且由于低频信号源所需的RC要很大,而大电阻,大电容在制作上有困难,参数精度同样难以保证。同时,信号发生器体积大,漏电,损耗显著等更是其致命的弱点。一旦对信号发生器的功能要求有所增加,则电路复杂程度会大大增加。为了克服以上缺点,后来人们逐渐采用单片机编程的方法来产生各种所需函数信号。
本课题正是基于51单片机采用C语言编程的方法来设计信号发生器。
1.2 研究目标和研究内容
模拟信号源在电气控制中一直得到广泛的应用。本课题要求自制一个可控的模拟信号源。鉴于51单片机板的优点,采用其单片机语言编程实现方波、三角波等可调频率模拟信号,有其特色,并且可以在此基础上将单片机应用于实验教学。主要内容如下:
1.查阅有关51单片机的基本知识,自学汇编语言或C语言编程;
2.采用Proteus 软件对模拟信号源系统进行仿真(选);
3. 通过51单片机的外围硬件接口和汇编语言或C语言编程,在单片机的控制下完成基本的A/D、D/A等实验程序的编制,并做实验调试;
4.采用汇编语言或C语言编程,完成方波、三角波等可调频率模拟信号的产生;
5. 设计硬件调频和调幅电路,并且实现频率、幅值等参数可调,做成一个模拟的可控函数信号源。
1.3 系统主要功能
本系统设计制作一个基于51单片机的信号发生器。能实现以下几种功能:
1.本系统能够输出方波、三角波、正弦波和锯齿波四种波形;
2.用户可以通过按键设定波形、频率、幅度以及方波的占空比这些参数;
3.本系统输出信号的频率可调范围为0-1KHz,步进值为1Hz;
4.本系统输出信号的峰-峰值调节范围为0-9.9v,步进值为0.1v;
5.方波占空比的调节范围为10%-90%,步进值为1%;
6.用户可以通过电位器对输出信号的直流偏置电压进行调节;
7.系统可以在LCD1602上对波形、频率、幅度以及方波的占空比等参数加以显示。
第2章 系统总体设计
2.1 主控模块
2.1.1 STC89C52单片机简介
STC89C52[2]是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
其具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。
2.1.2 STC89C52单片机的定时器简介
8051有两个16位的定时器/计数器[3]T0、T1,通过内部编程都可以设定为内部定时器和外部计数器。
1、方式寄存器TMOD[3]
特殊功能寄存器TMOD是TO、T1的工作方式寄存器,其格式如下图2-1所示:
图2-1 方式寄存器TMOD
TMOD低四位为T0方式字段,高四位为T1方式字段。复位时TMOD的所有位置0。
(1)工作方式选择位M1、M0[3]
定时器/计数器有四种工作方式,它们由M1、M0的取值决定,对应关系如下图2-2所示:
图2-2 定时器/计数器工作方式
(2)方式选择位C/T[4]
C/T=0为定时器方式,以fosc(晶振频率)的12分频作为计数信号,即每个机器周期定时器加1。
C/T=1为计数器方式,以外部引脚(T0为P3.4,T1为P3.5)上输入的脉冲为输入信号,当外部信号发生负跳变时加1,外部事件计数的最高频率为fosc的1/24。
(3)门控位GATE
当GATE=1时,由外部中断引脚INT0、INT1和内部TR0、TR1位来启动定时器。当INT0为高电平且TR0置位时,启动定时器T0。定时器T1的启动同T0。
当GATE=0时,仅由TR0和TR1置位来启动定时器T0和T1。
2、控制寄存器TCON[4]
特殊功能寄存器TCON的高4位存放着定时器的运行控制和溢出标志,低4位存放外部中断的触发方式控制位和锁存外部中断请求源。TCON的格式如下图2-3所示:
图2-3 特殊功能寄存器TCON的格式
(1)定时器T0的运行控制位TR0
TR0由软件置位或者清0。当门控位GATE=0时,TO计数器仅由TR0控制,TR0=1启动计数,TR0=0时停止。当门控位GATE=1时,T0计数器由INT0和TR0共同控制,当INT0=1且TR0=1时启动T0计数器。
(2)定时器T0溢出标志位TF0
当T0溢出时TF0=1,并向CPU申请中断,CPU响应中断后由硬件将TF0清0,也可以由软件查询方式将TF0清0。
(3)定时器T1的运行控制位TR1
功能同TR0。
(4)定时器T1溢出标志为TF1
功能同TF1。
(5)外部中断源1(INT1、P3.3)中断请求标志IE1
IE1=1时外部中断源1正在向CPU请求中断,当CPU响应该中断时由硬件将IE1清0(下降沿触发方式)。
(6)外部中断源1触发方式选择位IT1
IT1=0时外部中断源1选择电平触发方式,当输入低电平时置位IE1;IT1=1时外部中断源1选择下降沿触发方式,当中断源由高电平变低电平时置位IE1,向CPU请求中断。
(7)外部中断源0(INT0、P3.2)中断请求标志IE0
功能类同IE1。
(8)外部中断源0触发方式选择位IT0
功能类同IT1。
3、定时器工作方式[4]
如上所述,定时器有4种工作方式,它们由TMOD寄存器中的M1、M0两位决定。注意:只有T0才有工作方式3。
(1)工作方式0
当TMOD寄存器中的M1、M0为00时,定时器工作在方式0。下图2-4以定时器T1来示例说明:
图2-4 工作于方式0的T1结构简图
计数时,TL1的低5位溢出后向TH1进位,TH1溢出后将TF1置位,并向CPU发出中断请求。注意:在方式0时,TL1只用到了低5位,高3位内容不定不能使用,控制逻辑计数的允许/禁止并不改变计数值。
(2)工作方式1
当TMOD寄存器中M1、M0的值为01时,定时器工作于方式1。工作方式1和工作方式0的唯一区别在于,工作方式1可以实现16位计数,其它都和工作方式0相同。如果以定时器T1为例来图示讲解,可如下图2-5所示:
图2-5 工作于方式1的T1结构简图
(3)工作方式2
当TMOD寄存器的M1、M0位值为10时,定时器工作于工作方式2。方式2为自动恢复初值的8位计数器,TL1作为8位计数寄存器,TH1作为8位计数常数寄存器,当TL1溢出时,一方面将TF1置位,并向CPU发出中断请求,另一方面将预设在TH1中的常数重新装入TL1,继续计数。重新装入不会影响TH1的内容。其结构简图如下图2-6所示:
图2-6 工作于方式2的T1结构简图
在方式2中通过改变TH1的值可以改变计数次数。
(4)工作方式3
方式3只适用于T0,此时T1停止计数。其结构简图如下图2-7所示:
图2-7 工作于方式3的T0结构简图
4、定时器/计数器溢出率的计算[4]
定时器/计数器在工作之前必须先设定计数初始值Ta。初值计数公式如下(2-1):
式中:t—定时时间;
Tc—机器周期;
Tosc—振荡器频率;
n—计数器的长度;
Ta—初值。
在给定时间t后,求初值的公式如下(2-2):
式中:t—定时时间;
Tosc—振荡器频率;
n—计数器的长度;
Ta—初值。
5、总结
对定时器/计数器编程的步骤如下:
a、写TMOD,设定工作方式、定时/计数方式、启动哪个定时器(开启相应的门控位GATE);
b、将初值写入对于寄存器;
c、定时器中断开或关;
d、启动定时器,即向TCON写入数据。
2.1.3 单片机最小系统
图2-8 单片机最小系统电路图
图2-8为单片机最小系统[5]电路图,单片机最小系统有单片机、时钟电路、复位电路组成,时钟电路选用了12MHZ的晶振提供时钟,作用为给单片机提供一个时间基准,其中执行一条基本指令需要的时间为一个机器周期,单片机的复位电路,按下复位按键之后可以使单片机进入刚上电的起始状态。图中10K排阻为P0口的上拉电阻,由于P0口跟其他IO结构不一样为漏极开路的结构,因此要加上拉电阻才能正常使用。