找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5753|回复: 4
打印 上一主题 下一主题
收起左侧

基于CAN总线的汽车后视镜控制系统电路图+单片机源程序

  [复制链接]
跳转到指定楼层
楼主
ID:523056 发表于 2019-4-27 17:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
电路原理图如下:


目前各种汽车上安装的后视镜都存在不同程度的盲区,
驾驶视野宽度的不足使车辆在行驶中始终存在安全隐患[1]。车辆在转弯时驾驶员只能观察到同水平线上车辆的后方视野,而看不到侧方同向来车,尤其载货汽车自身高度和长度的限制,使得驾驶员对后视镜的依赖更加明显,且载货汽车货箱长度大、载货多、惯性大,转弯时存在较大的内轮差,一旦发生事故,死伤惨重。根据公安部道路交通安全研究中心的数据显示,2014 年货车总量占全国汽车保有量的8%,但货车事故致死人数却达到28%[2-5]。因此提出针对改善载货汽车转向行驶过程中后视镜视野的后视镜随动系统,对提高载货汽车的行驶安全性具有重要意义。
载货汽车后视镜的控制系统主要是通过手动按钮的方式
完成对后视镜的调节,并且载货汽车在转弯时的后视镜不会自动调节,导致驾驶员的视野范围很局限。后视镜智能调整
技术在轿车上有一些研究成果,有研究人员根据转向灯的开启及关闭为输入信号,控制后视镜电机的启停及转动方向[6],但是这种后视镜调节方法,不能准确、实时性的为驾驶员提供最佳后视镜驾驶视野;黄科[7]等人采用单片机实现了对后视镜的自动翻转控制,提高了后视镜的调节精度,郑芳芳[8]等人基于CAN 总线实现了后视镜的自动折叠展开及位置记忆功能,但都没有结合后视镜视野盲区对后视镜的转动做出调整。
鉴于目前后视镜系统的局限性,本文对载货汽车交汇路口转弯时的后视镜视野情况做了分析,采用单片机作为主控单元,以方向盘的转角作为输入信号,设计了后视镜随动系统,该系统可以实现方向盘转角数据的传输,并通过L298N后视镜电机驱动模块完成了对后视镜镜面的自适应控制,使车辆在交叉路口转弯时驾驶员的后视镜视野得到很大程度的改善,提高了载货汽车在转弯情况下的行车安全性。
1 系统硬件设计
本文所涉及的后视镜随动系统,主要由输入端、主控单元、执行端三大部分组成。其中输入端主要由方向盘转角传感器和CAN 模块组成;主控单元采用STM32 系列单片机作为微处理器模块的核心器件,执行算法及控制工作;执行端包括后视镜镜面控制器及电机驱动模块L298N。方向盘转角传感器采集到的转角数据,通过CAN 模块传送给主控单元STM32 系列单片机,STM32 系列单片机将接收到的数据进行数据处理后对电机驱动模块输入端进行高低电平的控制,可以实现对后视镜镜面控制器中调整电机的正反转控制,后视镜的转动角度则通过时间控制来实现。系统的整体结构框
图如图1 所示。
图1 随动系统整体结构框图
Fig.1 The overall structure diagram of the follow-up system
1.1 输入端的设计
该后视镜随动系统采用的是型号为C68049XF25849366
ANA76100BA的方向盘转角传感器,该型号的传感器抗干扰性能较强且工作信号稳定可靠。转角传感器的内部结构主要包括1 个角度测量芯片MLX90316、5 个槽型光电传感器SG278 编码阵列、电源稳压电路等。转角传感器安装在方向盘下方的转向管柱上,能够检测方向盘转动角度及转动方向。
转角传感器的基本工作原理:方向盘转动时通过转向柱带动主动齿轮转动,此时从动齿轮的转动引起从动齿轮上方小磁铁周围磁场方向的改变,这种变化由MLX90316 芯片检测并输出与小磁铁转动角度呈线性关系的模拟电压[9-10],此电压经DSP 芯片计算得到的转角数据,然后经过CAN 模块转换传送给主控单元52 单片机

单片机源程序如下:
  1. /*********************************************************************************/
  2. /*注意:本例程是基于STC89系列传统型12T 51单片机编写,由于不同系列51单片机一些外设*/
  3. /*功能配置存在差异,请亲们在使用时对应进行修改。*/
  4. /*********************************************************************************/
  5. #include <reg52.h>
  6. #include "MCP2515.H"

  7. unsigned char CAN_Flag=0;                                                        //CAN接收到数据标志
  8. unsigned char CAN_R_Buffer[8];                                                //CAN接收数据保存缓冲区
  9. extern unsigned char ge,shi,bai,qian,wan;           //显示变量
  10. extern void Init_ADXL345(void);             //初始化ADXL345
  11. extern unsigned char Single_Read_ADXL345(unsigned char REG_Address);                   //单个读取内部寄存器数据
  12. extern void  Multiple_Read_ADXL345();                                  //连续的读取内部寄存器数据
  13. /*******************************************************************************
  14. * 函数名  : Exint1_Init
  15. * 描述    : 外部中断1初始化函数
  16. * 输入    : 无
  17. * 输出    : 无
  18. * 返回值  : 无
  19. * 说明    : 无
  20. *******************************************************************************/
  21. void Exint1_Init(void)
  22. {
  23.     PX1=1;                //设置外部中断1的中断优先级为高优先级
  24.     IT1 = 1;        //设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿)
  25.     EX1 = 1;        //使能INT1中断
  26.     EA = 1;         //使能总中断
  27. }
  28. /*******************************************************************************
  29. * 函数名  : Exint1_ISR
  30. * 描述    : 外部中断1中断服务函数
  31. * 输入    : 无
  32. * 输出    : 无
  33. * 返回值  : 无
  34. * 说明    : 用于检测MCP2515中断引脚的中断信号
  35. *******************************************************************************/
  36. void Exint1_ISR(void) interrupt 2 using 1
  37. {
  38.         CAN_Flag=1;//CAN接收到数据标志
  39. }
  40. /*******************************************************************************
  41. * 函数名  : main
  42. * 描述    : 主函数,用户程序从main函数开始运行
  43. * 输入    : 无
  44. * 输出    : 无
  45. * 返回值  : 无
  46. * 说明    : 无
  47. *******************************************************************************/
  48. char Can_Tx_Buf[4];
  49. extern void delay(unsigned int k);
  50. void main(void)
  51. {
  52.         unsigned char devid;               

  53.         Init_ADXL345();                 //初始化ADXL345
  54.         devid=Single_Read_ADXL345(0X00);//读出的数据为0XE5,表示正确       

  55.         Exint1_Init();                        //外部中断1初始化函数
  56.         MCP2515_Init();                        //MCP2515初始化配置
  57.         while(1)
  58.         {
  59.             Multiple_Read_ADXL345();       //连续读出数据,存储在BUF中       
  60.                 display_x();   
  61.                 Can_Tx_Buf[0] = qian;
  62.                 Can_Tx_Buf[1] = bai;
  63.                 Can_Tx_Buf[2] = shi;
  64.                 Can_Tx_Buf[3] = ge;
  65.                 delay(1000)                        ;
  66.                 CAN_Send_Buffer(Can_Tx_Buf,4);//CAN发送指定长度的数据               
  67.         }
  68. }
复制代码

所有资料51hei提供下载:
基于52单片机汽车后视镜.rar (2.2 MB, 下载次数: 173)



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:5212 发表于 2021-8-25 22:18 | 只看该作者
这个适用于哪些车型的CAN协议呢?
回复

使用道具 举报

板凳
ID:47286 发表于 2021-8-27 00:49 来自手机 | 只看该作者
开车不都是先看镜子后转向么 这时候还没打方向盘 镜子怎么动
回复

使用道具 举报

地板
ID:282795 发表于 2023-2-8 11:42 | 只看该作者
非常经典。。。。。。。。。。。。。。。。。。。。。。
回复

使用道具 举报

5#
ID:833102 发表于 2023-7-11 17:18 | 只看该作者
666好文章
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表