1 系统功能概述
点击链接下载设计资料:https://download.csdn.net/download/m0_51061483/92081460
基于单片机的程控放大器是一种能够通过数字控制的方式灵活调节放大倍数的信号处理系统,其核心目标是实现模拟信号放大倍数的可编程调节,以满足不同测量与信号处理场景的需求。传统的运算放大器增益调节通常依靠手动更换反馈电阻或可调电阻来实现,这在精度、便利性和自动化能力方面均有一定限制。而本设计通过单片机与模拟开关芯片的组合,实现了对运算放大器增益的电子化、数字化与智能化控制。
系统主要功能如下:
- 可调增益范围 1~8 倍:通过控制不同反馈电阻的接入组合,实现 8 个固定增益档位,满足从弱信号到中等信号的多种放大需求。
- 采用模拟开关芯片控制运算放大器增益:模拟开关(如 CD4066、74HC4053 等)可由单片机输出的数字信号控制,使不同反馈电阻按程序设定切换,实现增益的数字控制。
- 按键操作调节增益值:用户可通过按键进行增益调节,系统会根据按键指令切换不同的增益档位。
- LCD1602 显示增益及相关数据:实时显示当前增益档位、系统状态、预设参数等信息,使操作更加直观。
本系统借助硬件电路与软件程序的协同设计,实现了高可靠性、易操作、可扩展的智能程控放大器,使其广泛适用于教学实验、仪器测量、工业控制信号采集等应用场景。
2 系统电路设计
2.1 单片机最小系统设计
本系统采用 51 单片机作为核心控制器,负责管理按键输入、LCD 显示以及模拟开关的控制信号输出。单片机最小系统包括晶振电路、复位电路与供电滤波电路。
- 晶振电路:采用 11.0592MHz 或 12MHz 晶振,通过两个 22pF 电容稳定振荡频率,为单片机提供系统运行时钟。
- 复位电路:采用复位电容与上拉电阻构成上电自动复位,同时配备独立复位按键用于调试。
- 电源电路:5V 稳压电路与滤波电容保证 MCU 在电磁干扰较强的模拟信号环境中仍能稳定运行。
单片机的 I/O 端口主要用于:
- 控制模拟开关片的数字选择信号
- 按键扫描输入信号
- LCD1602 数据与控制线
通过科学分配资源,使单片机协调完成控制与显示任务。
2.2 程控放大电路设计
程控放大器核心由运算放大器、电阻网络与模拟开关构成。本设计的目标是在不改变运放结构的基础上,通过改变反馈电阻值来实现不同的增益档位。
2.2.1 运算放大器配置
放大电路采用反相放大器结构,其增益由下式决定:
A_v = -\\frac{R_f}{R_{in}}
其中:
- (R_{in}) 为输入电阻,固定值
- (R_f) 为反馈电阻,通过模拟开关切换实现不同值
通过选择不同的 (R_f) 组合,可得到 1~8 倍增益的转换。例如,可设置如下电阻阵列:
| 增益档位 | 反馈电阻 (R_f) 值组合 |
|---|---|
| 1 倍 | 10 kΩ |
| 2 倍 | 20 kΩ |
| 3 倍 | 30 kΩ |
| ... | ... |
| 8 倍 | 80 kΩ |
为了提高精度,电阻一般选用 1% 或更高精度的金属膜电阻。
2.2.2 模拟开关选择与连接
系统常用模拟开关芯片包括:
- CD4066(四路模拟开关)
- 74HC4066
- 74HC4053(双通道三选一)
设计原则如下:
- 单片机输出高低电平控制模拟开关的开闭。
- 不同模拟开关接入不同反馈电阻,使得程序可以选择性地接入某一个或多个电阻。
- 一个模拟开关对应一个增益档位,或者通过组合形成多位二进制控制方式。
例如可用三位控制实现 8 个档位:
| 控制位 C2 | 控制位 C1 | 控制位 C0 | 增益档位 | 对应反馈电阻 |
|---|---|---|---|---|
| 0 | 0 | 0 | 1 倍 | R1 |
| 0 | 0 | 1 | 2 倍 | R2 |
| 0 | 1 | 0 | 3 倍 | R3 |
| ... | ... | ... | ... | ... |
| 1 | 1 | 1 | 8 倍 | R8 |
单片机以低压逻辑直接控制模拟开关,保证了增益切换的快速性与灵活性。
2.3 按键输入模块设计
按键模块用于增益设置与系统控制,由简单的独立按键组成。
常用按键功能包括:
- 加档按键:增益值 +1
- 减档按键:增益值 −1
- 确认按键(可选)
按键采用上拉电阻与 I/O 口连接,低电平触发。由于按键存在机械抖动,程序中需加软件消抖。
按键模块不仅用于增益调整,也可用于系统扩展,例如清除显示、复位增益等。
2.4 LCD1602 显示模块设计
LCD1602 用于实时显示增益及相关信息,例如:
- 当前增益值(1~8)
- 当前开关闭合状态(可选)
- 电阻组编号
- 运放输出电压(若加入 ADC)
LCD 采用 4 位数据线模式或 8 位模式连接,与 MCU 之间使用 RS、RW、EN 控制线。
显示信息格式可定义为:
GAIN: 4X
STATUS: NORMAL
显示界面简洁直观,适合教学与实验用途。
3 程序设计
3.1 主程序结构设计
整个系统采用模块化结构编写程序,主程序负责初始化与循环检测。
主程序框架如下:
c
#include <reg52.h>
#include "lcd1602.h"
#include "key.h"
#include "switch.h"
unsigned char gain = 1;
void main() {
LCD_Init();
Key_Init();
Switch_Init();
LCD_ShowString(0, 0, "GAIN:");
LCD_ShowNum(5, 0, gain, 1);
while(1) {
Key_Scan();
LCD_ShowNum(5, 0, gain, 1);
Switch_SetGain(gain);
}
}
主程序主要功能:
- 实时显示当前增益
- 响应按键操作
- 根据增益控制模拟开关
3.2 模拟开关控制程序
c
void Switch_SetGain(unsigned char g) {
switch(g) {
case 1: C2=0; C1=0; C0=0; break;
case 2: C2=0; C1=0; C0=1; break;
case 3: C2=0; C1=1; C0=0; break;
case 4: C2=0; C1=1; C0=1; break;
case 5: C2=1; C1=0; C0=0; break;
case 6: C2=1; C1=0; C0=1; break;
case 7: C2=1; C1=1; C0=0; break;
case 8: C2=1; C1=1; C0=1; break;
}
}
该程序根据增益值设置模拟开关控制端口,实现反馈电阻的自动切换。
3.3 按键扫描程序
c
void Key_Scan() {
if(KEY_ADD == 0) {
Delay_ms(20);
if(KEY_ADD == 0) {
gain++;
if(gain > 8) gain = 8;
}
while(KEY_ADD == 0);
}
if(KEY_SUB == 0) {
Delay_ms(20);
if(KEY_SUB == 0) {
gain--;
if(gain < 1) gain = 1;
}
while(KEY_SUB == 0);
}
}
扫描逻辑完成如下任务:
- 增益增大与减小
- 限幅处理(1~8)
- 延时消抖防止误触发
3.4 LCD 显示程序
LCD 显示程序控制显示界面:
c
void LCD_ShowGain(unsigned char gain) {
LCD_ShowString(0, 0, "GAIN:");
LCD_ShowNum(5, 0, gain, 1);
}
在主循环中不断刷新显示,使用户实时掌握增益状态。
3.5 系统扩展程序设计(可选)
可加入如下扩展功能:
- 增益变化的动画提示
- 误操作报警
- 自动记忆上次增益值(EEPROM)
示例 EEPROM 存储程序:
c
void Save_Gain(unsigned char g) {
Write_EEPROM(0x00, g);
}
4 总结
本课题通过单片机结合模拟开关芯片,实现了 1~8 倍可调的程控放大器设计。系统采用模块化硬件架构,包括运算放大器电路、模拟开关阵列、按键输入模块以及 LCD1602 显示模块,各模块之间协调运行,共同实现增益的自动化、数字化调节。
软件部分采用结构清晰的模块化程序设计,通过按键扫描、模拟开关控制与 LCD 显示等子程序的配合,使用户能够直观、快速地控制放大倍数。放大电路设计利用反相放大器结构,通过不同反馈电阻组合实现精确增益控制,并采用模拟开关实现快速切换,使系统具有响应迅速、稳定性好、操作便利等优点。
本系统适用于教育实验、工业测量、科研信号处理等多种场景,具有结构简洁、功能实用、易扩展等特性,充分展示了数字控制与模拟电路相结合的设计优势。