欢迎光临
我们一直在努力

基于STM32的智能交通灯控制系统:从Proteus仿真到功能扩展

基于STM32的智能交通灯控制系统:从Proteus仿真到功能扩展

1. 引言

城市交叉口的传统信号灯多采用固定配时,即便车道空无一车,也照常“死等”。这种低效催生了嵌入式智能交通灯的需求。本文选用性价比极高的STM32F103C8T6作为主控,利用其Cortex-M3内核和丰富外设,设计一套可灵活配置的交通灯系统。更特别的是,整个开发在Keil + Proteus纯软件环境下完成,无需实物板即可验证逻辑,非常适合教学与快速原型。

2. 系统总体架构

系统以STM32为核心,控制南北、东西两个方向的红黄绿LED(共6个,为简化常用3个代表一方,另一方取反逻辑,但本文采用独立IO驱动6个灯)。外围包括:

  • 按键(PA0)用于手动强制切换;

  • TM1637驱动数码管显示倒计时;

  • 光敏电阻(ADC) 检测环境光,触发夜间黄闪;

  • 红外对管模拟车流检测,动态调整绿灯时长。

软件上采用有限状态机(FSM)管理灯态,使用TIM2定时器中断产生1秒基准,摒弃阻塞式Delay,确保CPU可并发处理按键、串口等任务。

3. 硬件电路设计(Proteus搭建)

3.1 主控及最小系统

  • 芯片:STM32F103C8T6,设置外部8MHz晶振,PLL倍频至72MHz。

  • 电源:VDD接5V(实际芯片3.3V,Proteus中可设VDD=3.3V),VSS接地。

  • 复位电路:10kΩ上拉+100nF电容。

  • 去耦电容:VDD引脚并联0.1μF+10μF。

3.2 信号灯及驱动

每个方向红、黄、绿各一只LED,共阴极接法,阳极经220Ω限流电阻接至GPIO(如PB0~PB5)。GPIO配置为推挽输出,高电平点亮。

3.3 扩展模块连接

  • 按键:PA0,外部中断模式,下降沿触发。

  • TM1637:CLK→PA1,DIO→PA2,模拟I2C时序。

  • 光敏:与10kΩ分压后接ADC1_IN0(PA0? 需避开,改PA1),但为避免冲突,可用PC0。

  • 红外传感器:输出数字信号接PA3,检测到车辆时低电平。

4. 软件设计核心

4.1 状态机定义

c

复制

下载

typedef enum {
STATE_NS_GREEN_EW_RED, // 南北绿,东西红
STATE_NS_YELLOW_EW_RED, // 南北黄,东西红
STATE_NS_RED_EW_GREEN, // 南北红,东西绿
STATE_NS_RED_EW_YELLOW // 南北红,东西黄
} TrafficState;

状态切换顺序固定,每个状态附带持续时间(如绿5s,黄2s)。

4.2 定时器中断——时间基准

配置TIM2预分频器7199,自动重载999,产生100ms中断。在中断服务程序中累计10次得1秒,递减当前状态剩余时间,归零时调用状态切换函数。

c

复制

下载

volatile uint16_t second_counter = 0;
volatile uint8_t remain_sec = 5;

void TIM2_IRQHandler(void) {
if (TIM_GetITStatus(TIM2, TIM_IT_Update)) {
if (++timer_100ms >= 10) {
timer_100ms = 0;
if (remain_sec > 0) {
remain_sec–;
update_display(remain_sec); // 刷新数码管
} else {
change_state(); // 切换状态,重置remain_sec
}
}
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
}
}

4.3 手动优先(外部中断)

按下按键触发EXTI0中断,设置一个标志force_NS_green,在主循环或状态机中检测到后强制进入南北绿灯状态,并持续10秒后恢复原状态。

4.4 夜间黄闪

ADC轮询光敏电压,若低于阈值(夜间),则强制将状态机切至“黄闪模式”:所有方向黄灯以1Hz频率闪烁,不再执行红绿切换。

4.5 车流感知动态配时

利用红外传感器检测车辆通过,每检测到一次,对应方向的“车流计数”加1。每周期结束时比较南北和东西的计数值,若某方向明显更多,则下一周期其绿灯时间延长至7秒(原5秒)。代码中通过修改变量green_time_base实现。

5. Proteus仿真关键步骤

  • 在Proteus中放置STM32F103C8T6、LED、电阻、按键等。

  • 双击芯片,设置晶振频率为8MHz,勾选外部晶振。

  • 在Program File中加载Keil生成的.hex文件。

  • 点击运行,观察LED时序。可添加虚拟示波器查看波形,也可用虚拟终端打印调试信息(通过USART1)。

  • 常见问题处理:若灯不亮,检查GPIO时钟使能(RCC_APB2Periph_GPIOB);若中断不触发,检查NVIC配置和中断优先级分组。

    6. 测试结果与分析

    仿真运行后,系统按预设循环切换,数码管倒计时准确。按键中断响应及时,强制切换后自动恢复。光敏电阻用电位计模拟,调至低电压时黄闪模式立即启动。红外传感器用按钮模拟触发,连续触发某个方向后,下一周期该方向绿灯确实延长,且倒计时显示相应增加。整个系统运行稳定,无“红绿同亮”等冲突。

    7. 工程意义与扩展方向

    这套设计不仅让学生掌握了STM32的GPIO、定时器、中断、ADC、I2C模拟等核心外设,还实践了状态机设计模式和模块化编程。对于工程应用,可进一步替换为H7系列,增加CAN总线与路口机通信,或加装ESP8266上传云端,实现区域协同。智慧交通的基石,正由这样的“小智能”单元一块块筑成。

    全套资料下载:https://download.csdn.net/download/2603_96320728/93005166

    赞(0)
    未经允许不得转载:171主机测评 » 基于STM32的智能交通灯控制系统:从Proteus仿真到功能扩展
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址