|
|
一、作品简介
首先通过sys_init()完成 CPU 和定时器 2 的初始化配置,为系统运行提供基础时钟和定时功能通过pwm.c模块实现了 PWM 波的初始化(支持 32KHz 频率)和占空比调节功能,占空比范围为 0-100,然后通过sys_read_vp()和sys_write_vp()函数实现与外部设备的 VP 变量数据读写根据读取到的触摸状态控制蜂鸣器的开关状态,[color=rgba(0, 0, 0, 0.85)]整体程序通过主循环不断读取外部输入的占空比数据并更新 PWM 输出,同时根据触摸状态控制蜂鸣器,实现了汽车模拟器中可能需要的电机调速和操作反馈功能。
[color=rgba(0, 0, 0, 0.85)]
[color=rgba(0, 0, 0, 0.85)] [color=rgba(0, 0, 0, 0.85)]二、工作原理
该系统核心是通过 C51 单片机实现 PWM 信号精准输出 + 外部数据交互 + 硬件状态反馈,模拟汽车行驶过程中电机调速、操作反馈等核心功能,整体工作流程可分为初始化、数据交互、PWM 输出控制、硬件反馈四个核心阶段
单片机上电后首先执行 sys_init () 初始化函数,为后续功能运行搭建基础硬件环境:引脚初始化:
1、将 PWM 输出引脚配置为 “推挽输出模式”,用于输出高低电平交替的 PWM 波;
2、将蜂鸣器连接的 P3^3 引脚配置为输出模式,默认低电平(蜂鸣器关闭);
3、将外部数据交互引脚(如 VP 变量读写引脚)配置为输入 / 输出双向模式,支持与外部设备(如模拟器控制面板、旋钮)通信。
系统进入主循环后,通过 sys_read_vp () 函数持续读取外部设备的输入数据,核心读取两类关键信息:PWM 占空比指令:来自模拟器的调速旋钮 / 按键(如模拟汽车油门),外部设备将油门开度转换为 0-100 的数字信号,通过 VP 变量(虚拟外设变量)传输给单片机;
触摸状态指令:来自模拟器的触摸按键(如模拟手刹、换挡按键),触摸触发后外部设备向单片机发送高 / 低电平信号(touch_status 变量),表示 “触摸有效 / 无效”。
PWM 输出:将生成的 PWM 波通过指定引脚输出,驱动模拟器中的直流电机(如模拟汽车驱动电机),占空比越高,电机转速越快,对应汽车 “油门越大、车速越快” 的效果。
根据读取到的 touch_status 触摸状态,控制蜂鸣器实现操作反馈(模拟汽车按键提示音):
当 touch_status 为 “有效”(如触摸换挡按键):单片机将 P3^3 引脚置为高电平,蜂鸣器通电发出提示音;
当 touch_status 为 “无效”(触摸松开 / 未触发):P3^3 引脚恢复低电平,蜂鸣器断电停止发声;
上电初始化 → 主循环读取外部指令(油门占空比 + 触摸状态) → 按占空比生成 32KHz PWM 波驱动电机 → 按触摸状态控制蜂鸣器反馈 → 反向回传状态给外部显示 → 重复循环。整个过程通过单片机的 “定时中断 + IO 口控制 + 数据交互”,实现了汽车行驶模拟器中 “操作输入→电机调速→操作反馈” 的核心闭环,精准模拟汽车油门控制和按键反馈的物理特性
三、设计思路
核心目标:用 C51 单片机模拟汽车油门调速和按键操作反馈,低成本实现基础操控逻辑。
硬件简化:复用单片机通用 IO 口,PWM 输出引脚设为推挽模式驱动电机,P3^3 引脚接蜂鸣器,通过 VP 引脚读取外部旋钮 / 触摸按键信号。
信号处理:将外部油门旋钮的 0-100 开度直接转为 PWM 占空比,控制电机转速;触摸按键信号直接触发蜂鸣器通断。
闭环逻辑:读取外部指令→输出 PWM 驱动电机 + 控制蜂鸣器→回传状态至外部显示,形成简单的 “输入 - 输出 - 反馈” 循环,无冗余功能。
四、演示视频
https://www.bilibili.com/video/BV1X8BpByEVF/?spm_id_from=333.1387.homepage.video_card.click
五、附件
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|