当前位置: 首页 > article >正文

基于51单片机的方向盘模拟系统

在现代汽车中,方向盘不仅是控制方向的装置,还集成了多种功能,如音响控制、定速巡航等。为了研究和测试这些功能,可以设计一个基于51单片机的方向盘模拟系统。该系统可以模拟方向盘的转动和相关功能的操作。

一、系统功能

方向盘模拟系统主要包括以下功能:

  1. 模拟方向盘转动:通过电机驱动方向盘转动。
  2. 检测压力传感器:使用压力传感器模拟驾驶员对方向盘的握持力度。
  3. 重力加速度模拟:通过滑动变阻器和模数转换器模拟重力加速度传感器。
  4. 按键控制:通过按键控制LED灯的点亮与熄灭。
  5. 数据显示:通过LCD1602显示屏显示压力值和加速度值。
  6. 报警和电机控制:当加速度值在3秒内没有变化,或者两个压力传感器的差值大于50时,蜂鸣器报警,继电器控制的电机停止转动。

二、硬件资源

系统基于STC89C52单片机,采用两个MPX4115压力传感器作为两路压力到位开关电路,采用滑动变阻器连接数模转换器模拟重力加速度传感器电路。一个按键控制LED灯的点亮与熄灭。两路压力值与加速度值通过LCD1602显示屏显示。

三、程序编程

以下是方向盘模拟系统的C语言代码示例:

#include <REGX52.H>
#include <intrins.h>
#include <stdio.h>
#include "Delay.h"
#include "LCD1602.h"

#define uchar unsigned char
#define uint unsigned int

sbit beep = P2^5;
sbit CS=P1^0;
sbit CLK=P1^1;
sbit DIO=P1^2;
sbit CS1=P1^3;
sbit CLK1=P1^4;
sbit DIO1=P1^5;
sbit CS2   =  P1^6;
sbit CLK2  =  P1^7;
sbit DIO2  =  P2^6;
sbit motor =  P2^7;
sbit key = P3^1;
sbit led = P3^0;
sbit key1 = P3^2;

static int timerCount;
typedef unsigned char u8;
typedef unsigned int  u16;

static uchar u,U,R,u1,U1,R1,u2,U2,R2,lastResistance;
static int number;
static int resistanceChanged;
static int flag = 0;

void beep_warning();
void Time0_Init()
{
    TMOD = 0x01;
    TH0 = 0xfa >> 8;
    TL0 = 0xfa & 0xFF;
    ET0 = 1;
    TR0 = 1;
    EA = 0;
}

void Time0_Int() interrupt 1
{
    static unsigned int timerCount = 0;
    TH0 = 0xfa >> 8;
    TL0 = 0xfa & 0xFF;
    timerCount++;
    if (timerCount >= 27)
    {
        timerCount = 0;
        if (R != lastResistance)
        {
            resistanceChanged = 0;
        }
        else
        {
            resistanceChanged = 1;
        }
        lastResistance = R;
    }
}

uchar get_AD_Res()
{
    uchar i, data1=0, data2=0;
    CS=0;
    CLK=0;DIO=1;_nop_();
    CLK=1;_nop_();
    CLK=0;DIO=1;_nop_();
    CLK=1;_nop_();
    CLK=0;DIO=0;_nop_();
    CLK=1;_nop_();
    CLK=0;DIO=1;_nop_();
    for(i=0; i<8; i++)
    {
        CLK=1;_nop_();
        CLK=0;_nop_();
        data1=(data1<<1)|(uchar)DIO;
    }
    for(i=0; i<8; i++)
    {
        data2=data2|(uchar)DIO<<i;
        CLK=1;_nop_();
        CLK=0;_nop_();
    }
    CS=1;
    return(data1 == data2)?data1:0;
}

void beep_warning()
{
    number = R1-R2;
    if(number<=0)
    {
        number = ~(number-1);
    }
    if(flag==0)
    {
        EA = 0;
        if(number>50)
        {
            beep = 1;
            motor = 1;
        }
        else
        {
            beep = 0;
            motor = 0;
        }
    }
    if(flag==1)
    {
        if(resistanceChanged==1)
        {
            beep = 1;
            motor = 1;
        }
        else
        {
            beep = 0;
            motor = 0;
        }
    }
    LCD_ShowNum(2,10,resistanceChanged,3);
}

void main()
{
    beep=0;
    motor=0;
    led = 0;
    LCD_Init();
    Time0_Init();
    LCD_ShowString(1,1,"zuo:");
    LCD_ShowString(1,10,"you:");
    LCD_ShowString(2,1,"Vt:");
    while(1)
    {
        u=get_AD_Res();
        U=(250*u)/128;
        R=200*U/250;
        u1=get_AD_Res1();
        U1=(250*u1)/128;
        R1=200*U1/250;
        u2=get_AD_Res2();
        U2=(250*u2)/128;
        R2=200*U2/250;
        LCD_ShowNum(1,5,R2,3);
        LCD_ShowNum(1,14,R1,3);
        LCD_ShowNum(2,4,R,3);
        beep_warning();
        if(!key)
        {
            led=~led;
            while(!key);
        }
        if(~key1)
        {
            EA=1;
            flag++;
            {
                if(flag>1)
                {
                    flag = 0;
                }
            }
            while(~key1);
        }
    }
}

四、实现现象

通过Proteus仿真和实际硬件测试,系统能够实现以下功能:

  1. 方向盘转动:电机根据模拟信号转动方向盘。
  2. 压力显示:LCD1602显示屏显示左右压力传感器的值。
  3. 重力加速度显示:LCD1602显示屏显示重力加速度值。
  4. 报警功能:当压力传感器的差值大于50或加速度值3秒内无变化时,蜂鸣器报警,电机停止转动。
  5. LED控制:按键控制LED灯的点亮与熄灭。

具体动态效果可以参考B站演示视频 。

五、总结

基于51单片机的方向盘模拟系统能够模拟汽车方向盘的各种操作,为汽车电子系统的研究和测试提供了一个实用的平台。通过扩展硬件和软件,该系统还可以增加更多功能,如语音提示、数据记录等。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料


http://www.kler.cn/a/321292.html

相关文章:

  • More Effective C++之技术Techniques,Idioms,Patterns_条款26-27
  • Python|Pyppeteer实现自动化获取reCaptcha验证码图片以及提示词(29)
  • 活着就好20241226
  • springBoot发布https服务及调用
  • vue3标签中的ref属性如何使用$refs获取元素
  • Yolo11改进策略:Head改进|DynamicHead,利用注意力机制统一目标检测头部|即插即用
  • OJ在线评测系统 后端 使用代理模式编写测试类 并 实现核心业务判题流程
  • 开源治理聚光灯 | 企业规模不同,治理方式各显神通
  • 【openwrt-21.02】VPN Passthrough系列之L2TP Passthrough实现
  • 谷神后端$vs.dbTools.list
  • Windows安装Vim,并在PowerShell中直接使用vim
  • 【裸机装机系列】16.kali(ubuntu)-安装linux和win双系统-重装win11步骤
  • React Native中如何调用iOS的Face ID和Android的生物识别,react-native-biometrics
  • 【深度学习】04-Cnn卷积神经网络-01- 卷积神经网络概述/卷积层/池化层/分类案例精讲
  • 【MySQL】数据库--索引
  • 未来数字世界相关技术、应用:AR/VR/MR;数字人、元宇宙、全息显示
  • 开源链动 2+1 模式 S2B2C 商城小程序:激活 KOC,开启商业新征程
  • 将Mixamo的模型和动画导入UE5
  • C--结构体和位段的使用方法
  • 一道涉及 Go 中的并发安全和数据竞态(Race Condition)控制的难题
  • 碎纸片的自动拼接复原技术
  • tcp、udp通信调试工具Socket Tool
  • 协议IP规定,576字节和1500字节的区别
  • MySQL关卡任务书
  • 单样本Cellchat(V2)细胞通讯分析学习和整理
  • 2.2 HuggingFists中的编程语言