一、任务
设计并制作一套模拟路灯控制系统。控制系统结构如图1 所示,路灯布置如图 2 所示。
二、要求
1.基本要求
(1)支路控制器有时钟功能,能设定、显示开关灯时间,并控制整条支路按时开灯和关灯。
(2)支路控制器应能根据环境明暗变化,自动开灯和关灯。
(3)支路控制器应能根据交通情况自动调节亮灯状态:当可移动物体 M(在物体前端标出定位点,由定位点确定物体位置)由左至右到达 S 点时(见图 2),灯 1 亮;当物体 M 到达 B 点时,灯 1 灭,灯 2 亮;若物体 M 由右至左移动时,则亮灯次序与上相反。
(4)支路控制器能分别独立控制每只路灯的开灯和关灯时间。
(5)当路灯出现故障时(灯不亮),支路控制器应发出声光报警信号,并显示有故障路灯的地址编号。
2.发挥部分
(1)自制单元控制器中的 LED 灯恒流驱动电源。
(2)单元控制器具有调光功能,路灯驱动电源输出功率能在规定时间按设定要求自动减小,该功率应能在 20%~100%范围内设定并调节,调节误差≤2%。
(3)其它(性价比等)。
三、说明
1.光源采用 1 W 的 LED 灯,LED 的类型不作限定。
2.自制的 LED 驱动电源不得使用产品模块。
3.自制的 LED 驱动电源输出端需留有电流、电压测量点。
4.系统中不得采用接触式传感器。
5.基本要求(3)需测定可移动物体 M 上定位点与过“亮灯状态变换点”
(S、B、S’等点)垂线间的距离,要求该距离≤2cm。
GPT-4o给出的设计方案:
设计一套模拟路灯控制系统,主要包括一个控制器和两个单元采集控制器,控制器统一管理并监控路灯的操作状态,通过单元采集控制器实现路灯的开关和故障检测。
系统需要实现定时开关、故障检测以及信号采集。定时功能保证路灯按计划开关,光敏传感器提供环境亮度数据,单元采集控制器采集和控制每盏路灯的状态,并将故障和工作状态上报至中央控制器。
控制器电路:
采集控制单元电路:
通信电路:
STM32 MCU:
光敏传感器(LDR/光电二极管):
MOSFET:
霍尔电流传感器:
以下是使用STM32进行定时控制、光强检测和故障诊断的C代码示例:
#include "stm32f1xx.h"
#define LIGHT_THRESHOLD 500 // 光强度阈值
#define TIME_ON 1800 // 18:00 开灯时间
#define TIME_OFF 600 // 06:00 关灯时间
RTC_HandleTypeDef hrtc;
ADC_HandleTypeDef hadc1;
TIM_HandleTypeDef htim2;
// 实时钟初始化
void SystemClock_Config(void);
void RTC_Init(void);
void GPIO_Init(void);
void ADC1_Init(void);
void TIM2_Init(void);
// 获取当前时间
RTC_TimeTypeDef Get_Current_Time(void) {
RTC_TimeTypeDef currentTime;
HAL_RTC_GetTime(&hrtc, ¤tTime, RTC_FORMAT_BIN);
return currentTime;
}
// 检查是否在开灯时间范围内
uint8_t Check_Light_Time(RTC_TimeTypeDef currentTime) {
if ((currentTime.Hours >= TIME_ON / 100) || (currentTime.Hours < TIME_OFF / 100)) {
return 1;
}
return 0;
}
// 光强度检测
uint32_t Get_Light_Intensity(void) {
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
return HAL_ADC_GetValue(&hadc1);
}
// 检测故障
uint8_t Check_Light_Fault(void) {
// 检测电流是否正常,假设通过ADC检测电流
uint32_t current = Get_Light_Intensity(); // 电流模拟值
if (current < 10 || current > 1000) {
return 1; // 出现故障
}
return 0;
}
int main(void) {
HAL_Init();
SystemClock_Config();
RTC_Init();
GPIO_Init();
ADC1_Init();
TIM2_Init();
RTC_TimeTypeDef currentTime;
while (1) {
currentTime = Get_Current_Time();
uint32_t lightIntensity = Get_Light_Intensity();
if (Check_Light_Time(currentTime) && lightIntensity < LIGHT_THRESHOLD) {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 开灯
} else {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 关灯
}
if (Check_Light_Fault()) {
// 处理故障,可能需要上报或报警
}
HAL_Delay(1000); // 延时1秒
}
}
void SystemClock_Config(void) {
// 配置系统时钟
}
void RTC_Init(void) {
// 初始化RTC
}
void GPIO_Init(void) {
// 初始化GPIO
}
void ADC1_Init(void) {
// 初始化ADC
}
void TIM2_Init(void) {
// 初始化定时器
}
本题考察的主要知识点:
控制器设计:
单元采集控制器设计:
传感器技术:
功率控制与驱动电路:
通信技术:
软件编程: