跳转到内容

六、综合控制应用系统设计

下面讲复习提纲第六部分:六、综合控制应用系统设计。这一部分一般不是单纯背概念,而是考你能不能把I/O、按键、LED、定时器、中断、串口、状态机组合起来,设计一个实际控制系统。


复习提纲中写:

能够使用前面的各项基础功能以及基础模块设计一个具体复杂应用的控制程序,例如电饭煲控制系统、洗衣机控制系统、电梯控制系统、交通等控制系统等;在以上控制系统中涉及具体机械装置或者大型元器件时,可以用 LED 灯或者开关等组合进行模拟即可。

这段话的核心意思是:

不要只会单独点亮LED
不要只会单独写定时器
要能把多个模块组合成完整系统

例如交通灯系统就会同时用到:

I/O口:控制红黄绿LED
定时器:产生秒计时
中断:处理紧急按钮
按键:切换模式
状态机:管理当前交通灯状态

综合题的重点不是器件有多复杂,而是控制逻辑是否清楚。


遇到一个综合控制题,不要一上来就写代码。应该先拆需求。

可以按下面 6 个问题分析。

例如交通灯:

控制南北方向和东西方向红黄绿灯按时间交替亮灭

洗衣机:

完成注水、洗涤、排水、脱水、结束报警等流程

电饭煲:

根据按键和温度状态控制加热、保温和报警

输入是单片机需要“读取”的东西。

常见输入:

按键
开关
传感器
串口命令
限位信号
水位信号
温度达到信号
楼层按键信号

在考试中,如果没有真实传感器,可以用按键或开关模拟。

输出是单片机需要“控制”的东西。

常见输出:

LED
蜂鸣器
继电器
电机驱动
数码管
LCD
加热器
电磁阀

考试中大型执行机构常用 LED 模拟:

LED亮 = 电机启动
LED灭 = 电机停止

复杂系统通常不是简单 if 语句能优雅解决的,而是应该分状态。

例如电饭煲:

待机
加热
保温
完成
故障

交通灯:

南北绿东西红
南北黄东西红
南北红东西绿
南北红东西黄
紧急模式

问题5:每个状态持续多久或由什么条件切换

Section titled “问题5:每个状态持续多久或由什么条件切换”

状态切换条件可能是:

时间到
按键按下
传感器触发
串口命令到达
异常信号出现

例如:

南北绿灯30秒后 -> 南北黄灯
水位到达后 -> 洗涤
温度达到后 -> 保温
按下停止键 -> 待机

综合系统常用:

初始化
主循环
定时器中断
外部中断
状态机处理
显示刷新
按键扫描
输出控制

这比单纯堆延时更可靠。


3. PPT 第15章的应用系统设计步骤

Section titled “3. PPT 第15章的应用系统设计步骤”

PPT 第15章把单片机应用系统设计分成 4 个阶段。

3.1 明确任务、需求分析、拟定方案

Section titled “3.1 明确任务、需求分析、拟定方案”

这是第一步,也是考试设计题最容易被忽略的一步。

需求分析要说明:

要测什么
要控什么
输入是什么
输出是什么
工作环境如何
是否需要显示
是否需要报警
是否需要通信
性能指标是什么

例如设计温度控制系统:

输入:温度传感器、按键
输出:加热器、风扇、蜂鸣器、显示器
指标:温度超过上限报警,低于下限加热

PPT 也提醒,方案设计时不要把简单问题复杂化。能用简单可靠的方法解决,就不要过度设计。

硬件设计包括:

单片机最小系统
输入接口
输出接口
显示接口
通信接口
电源和复位
驱动和保护电路

软件设计包括:

程序流程图
模块划分
状态机
按键扫描
定时器中断
显示刷新
输出控制
通信处理

PPT 第15章强调,硬件设计和软件设计要结合。比如:

有些滤波、校准可用软件完成
有些强实时、高功率控制必须靠硬件电路保证

这就是“软硬件结合”的思想。

调试可以分两步:

先用Proteus等软件仿真
再进行实际硬件联调

仿真能检查:

程序逻辑
I/O连接
LED显示
按键响应
定时流程

但仿真通过不代表实物一定通过。实际硬件还可能有:

接线错误
电源干扰
按键抖动
驱动能力不足
器件损坏
复位不可靠

系统完成后要整理:

任务说明
总体方案
电路原理图
元件清单
接线图
程序流程图
源程序
调试记录
使用说明

考试中写设计说明,也可以按这个顺序组织。


任何应用系统首先要有最小系统:

单片机芯片
时钟晶振电路
复位电路
电源

这是系统能运行程序的基础。

输入部分对应“测”。

常见输入有:

输入类型例子接口方式
按键启动、停止、模式选择I/O口读取
开关量水位开关、门磁开关I/O口读取
数字传感器红外、霍尔、限位I/O或中断
模拟传感器温度、压力、光照ADC转换
通信命令上位机命令串口接收

注意:

按键要消抖
开关量常用上拉
模拟量需要A/D转换
紧急信号可接外部中断

输出部分对应“控”。

常见输出有:

输出类型例子注意点
LED状态灯、模拟执行机构串联限流电阻
蜂鸣器报警提示可能需要三极管驱动
继电器控制电机、加热器要加驱动和续流二极管
电机洗衣机、电梯、风扇需电机驱动电路
数码管/LCD显示时间、状态动态扫描或接口驱动
串口输出发给电脑设置波特率

单片机 I/O 口驱动能力有限,不能直接驱动大功率器件。

考试答法:

对于电机、继电器、加热器等大功率负载,应通过三极管、MOS管、继电器驱动模块或光耦隔离电路控制,不能由单片机I/O口直接驱动。

PPT 第15章强调软件要模块化、子程序化,并先画流程图。

综合控制系统通常可以分成:

初始化模块
按键扫描模块
显示模块
定时模块
状态机模块
输出控制模块
通信模块
报警模块

典型程序框架:

void main(void)
{
system_init();
while (1)
{
key_task();
state_task();
display_task();
output_task();
uart_task();
}
}

定时器中断产生系统节拍:

void timer0_isr(void) interrupt 1
{
TH0 = 0xFC;
TL0 = 0x18;
tick_1ms++;
if (tick_1ms % 10 == 0) flag_10ms = 1;
if (tick_1ms % 100 == 0) flag_100ms = 1;
if (tick_1ms >= 1000)
{
tick_1ms = 0;
flag_1s = 1;
}
}

主程序看到标志后再执行任务:

if (flag_1s)
{
flag_1s = 0;
second_task();
}

这样比在主程序中写大量 delay() 更适合综合系统。


综合控制题最推荐用状态机。

状态机就是:

把系统分成几个明确状态
每个状态规定输出
根据时间或输入条件切换到下一个状态

状态机的好处:

逻辑清楚
容易画流程图
容易写程序
容易调试
适合复杂控制

C 语言里常用枚举表示状态:

typedef enum
{
STATE_IDLE,
STATE_RUN,
STATE_ALARM,
STATE_STOP
} SystemState;
SystemState state = STATE_IDLE;

状态处理:

switch (state)
{
case STATE_IDLE:
// 待机输出
break;
case STATE_RUN:
// 运行输出
break;
case STATE_ALARM:
// 报警输出
break;
default:
break;
}

这是最典型的综合题。

设计十字路口交通灯:

南北方向绿灯亮30秒,东西方向红灯亮
南北方向黄灯亮3秒,东西方向红灯亮
东西方向绿灯亮30秒,南北方向红灯亮
东西方向黄灯亮3秒,南北方向红灯亮
循环执行

可加一个紧急按键,使所有方向红灯亮或某方向优先通行。

功能引脚
南北红灯P1.0
南北黄灯P1.1
南北绿灯P1.2
东西红灯P1.3
东西黄灯P1.4
东西绿灯P1.5
紧急按键P3.2/INT0

如果 LED 低电平有效:

输出0:灯亮
输出1:灯灭
状态输出时间下一状态
NS_GREEN南北绿、东西红30sNS_YELLOW
NS_YELLOW南北黄、东西红3sEW_GREEN
EW_GREEN东西绿、南北红30sEW_YELLOW
EW_YELLOW东西黄、南北红3sNS_GREEN
EMERGENCY紧急模式按键控制原状态或指定状态
定时器0每1ms中断一次
累计1000次得到1秒
每秒剩余时间减1
剩余时间为0时切换状态
主程序根据状态输出红黄绿灯
外部中断0处理紧急按键

状态切换示意:

void next_state(void)
{
switch (state)
{
case NS_GREEN:
state = NS_YELLOW;
seconds = 3;
break;
case NS_YELLOW:
state = EW_GREEN;
seconds = 30;
break;
case EW_GREEN:
state = EW_YELLOW;
seconds = 3;
break;
case EW_YELLOW:
state = NS_GREEN;
seconds = 30;
break;
default:
state = NS_GREEN;
seconds = 30;
break;
}
}

输出函数示意:

void traffic_output(void)
{
P1 = 0xFF; // 全灭,低电平有效
switch (state)
{
case NS_GREEN:
P1 &= ~(1 << 2); // 南北绿
P1 &= ~(1 << 3); // 东西红
break;
case NS_YELLOW:
P1 &= ~(1 << 1);
P1 &= ~(1 << 3);
break;
case EW_GREEN:
P1 &= ~(1 << 0);
P1 &= ~(1 << 5);
break;
case EW_YELLOW:
P1 &= ~(1 << 0);
P1 &= ~(1 << 4);
break;
default:
break;
}
}

考试不一定要写完整代码,但要写清:

I/O分配
定时方式
状态表
状态转换
输出控制

洗衣机可以分为几个状态:

待机
注水
洗涤
排水
脱水
结束报警
故障
启动键
停止键
水位开关
门盖安全开关
模式选择键
进水阀
洗涤电机正转
洗涤电机反转
排水阀
脱水电机
蜂鸣器
状态指示灯

考试中可用 LED 模拟:

LED1亮:进水阀打开
LED2亮:电机正转
LED3亮:电机反转
LED4亮:排水阀打开
LED5亮:脱水电机运行
状态条件输出下一状态
待机等待启动键全部关闭注水
注水水位未到进水阀开洗涤
洗涤定时时间未到电机正反转排水
排水水位未低排水阀开脱水
脱水门盖关闭且时间未到脱水电机开结束
结束完成蜂鸣器提示待机

洗衣机程序一定要有:

定时器:控制洗涤时间、正反转时间、脱水时间
按键扫描:启动、停止、模式选择
安全检测:门盖未关闭不能脱水
状态机:按流程切换

开始按键
保温/煮饭模式键
温度传感器或温控开关
锅盖/内胆检测开关
加热器
保温指示灯
煮饭指示灯
蜂鸣器
显示模块
状态判断条件输出
待机未按开始键加热关闭
加热温度未达到加热器开启
沸腾计时温度达到阈值按时间继续加热
保温烹饪完成周期性加热
完成提示完成瞬间蜂鸣器响
故障传感器异常关闭加热并报警

如果没有真实温度传感器,可用按键模拟:

按键K1 = 温度达到
按键K2 = 故障

电梯系统适合考状态机和输入输出分配。

楼层按键
上行/下行请求
门开关检测
限位开关
急停按键
电机上行
电机下行
开门电机
关门电机
楼层显示
蜂鸣器
待机
上行
下行
开门
关门
报警/急停

控制逻辑示例:

如果当前楼层 < 目标楼层 -> 上行
如果当前楼层 > 目标楼层 -> 下行
到达目标楼层 -> 停止电机 -> 开门 -> 延时 -> 关门
急停按下 -> 立即停止并报警

考试中可用 LED 模拟电机:

LED_UP亮 = 电梯上行
LED_DOWN亮 = 电梯下行
LED_DOOR亮 = 门打开

遇到综合系统设计题,可以直接按这个模板写。

本系统以AT89C51/AT89S52单片机为核心,实现______控制。系统通过______采集输入信号,通过______输出控制信号,并利用定时器实现______,利用中断实现______。
硬件包括单片机最小系统、输入模块、输出模块、显示模块、报警模块和通信模块。

用表格写最清楚:

引脚功能
P1.0输出1
P1.1输出2
P3.2外部中断按键
P3.0/P3.1串口通信
系统上电后先初始化I/O口、定时器、中断和串口;然后进入主循环,循环检测按键和传感器状态,根据当前状态执行状态机控制,并刷新显示和输出。定时器中断用于产生系统节拍,外部中断用于处理紧急事件。
初始化模块
按键扫描模块
定时器中断模块
状态机模块
输出控制模块
报警模块

答案:

单片机应用系统设计一般包括明确任务和需求分析、拟定方案、硬件和软件设计、软硬件联合调试、资料整理等步骤。

答案:

硬件通常包括单片机最小系统、输入接口电路、输出接口电路、显示电路、报警电路、通信电路以及必要的驱动和保护电路。

答案:

软件设计应先画流程图,采用模块化和子程序化设计,合理分配RAM、ROM、定时器、中断源和I/O口资源,并通过状态机实现复杂控制流程。

答题要点:

用P1口控制红黄绿LED
用定时器产生秒计时
用状态机表示不同通行状态
用外部中断或按键处理紧急模式

考法5:问为什么大功率负载不能直接接 I/O

Section titled “考法5:问为什么大功率负载不能直接接 I/O”

答案:

单片机I/O口输出电流有限,不能直接驱动电机、继电器、加热器等大功率负载,应通过三极管、MOS管、继电器驱动器或光耦隔离等接口电路进行驱动和保护。

综合题通常要写:

系统功能
硬件组成
I/O分配
软件流程
关键程序

只写一段代码,说明不完整。

复杂系统如果大量使用长延时:

按键响应慢
中断外的任务被卡住
显示刷新不稳定

更推荐:

定时器中断产生节拍
主循环按标志执行任务

题目说电机、阀门、加热器,不代表必须画真实大功率电路。

复习提纲说明:

可以用LED灯或者开关等组合进行模拟

交通灯、洗衣机、电梯这类系统,最好用状态机。

状态 = 当前系统阶段
条件 = 什么时候切换
输出 = 当前状态下控制哪些设备

有些问题用软件方便:

按键消抖
定时控制
状态判断
报警逻辑

有些必须靠硬件:

大电流驱动
电气隔离
电源保护
继电器续流
抗干扰滤波

单片机综合控制应用系统是将I/O口、按键、LED、定时器、中断、串口、显示等基础模块组合起来,实现具体设备控制的系统。设计时应先进行任务分析,明确输入、输出、状态、定时要求和控制流程,再完成硬件和软件设计。
单片机应用系统硬件通常包括单片机最小系统、输入接口、输出接口、显示接口、报警接口、通信接口以及驱动和保护电路。输入部分可包括按键、开关、传感器和串口命令;输出部分可包括LED、蜂鸣器、继电器、电机、数码管等。对于电机、继电器、加热器等大功率负载,不能由单片机I/O口直接驱动,应加驱动电路和保护电路。
软件设计应模块化、子程序化,先画流程图,常用状态机描述复杂控制过程。定时器中断可产生系统节拍,外部中断可处理紧急事件,主循环负责按键扫描、状态处理、显示刷新和输出控制。交通灯、洗衣机、电饭煲、电梯等系统都可用LED和开关模拟其执行机构和输入信号。