IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于大学生方程式赛车的车速测量与数据显示 -> 正文阅读

[嵌入式]基于大学生方程式赛车的车速测量与数据显示

基于大学生方程式赛车的车速测量与数据显示
一、设计背景

? 根据调查显示,越来越多的车队已经或有意向使用多电机作为赛车的驱动方式。因此赛车各驱动轮的扭矩分配就显得相当重要,从而需要精准地测量出赛车在各个状态的车速。

二、设计目标

? 能够实时、准确地检测并显示赛车在0~88 KM/h 的车速,30KM内的里程数,记录并保存数据

三、设计原理

请添加图片描述上图为车轮内部测速齿轮,其右侧为齿轮齿速传感器(用一吊耳固定在立柱上)

? 齿轮齿速传感器原理:本质为接近开关,或者称为霍尔齿轮齿速传感器。当传感器检测在一定距离内检测到导磁金属,则发出相应的电平信号。(具体资料某宝上很多,各人型号不同,不做赘述)

? 我们只需要使用单片机采集信号,并计数,每隔一段时间采集一次计数值,并计算即可得出相应的里程数和车速。

? 由于目标测速轮为从动轮,可以较为准确的测量车辆的实时速度,能够降低算法的复杂度,同时由于本文主要讲解测速的基本方法,这里暂不考虑车辆发生侧向滑移以及车轮抱死的情况。

四、设备/器材

单片机:STM8s105k4 单片机

传感器:齿轮测速高频率传感器 三线NPN常开型 安装尺寸:M8

显示器:0.96寸OLED显示屏(IIC) 或 陶晶驰3.5寸串口屏

测试车辆:盐城工学院电动方程式 E 45 赛车

五、设计概念图

请添加图片描述

六、算法设计

? 从第三部分,我们知道可以用单位时间内传感器扫过的齿轮齿数来计算车速以及里程数。

? 设传感器扫过的齿数为 N ,单位时间为 T ,则单位时间内传感器扫过的齿数v为:

?
v = N / T v=N/T v=N/T
? 已知齿轮齿数为n,车轮直径为d,则车辆行驶的里程数S为:

?
S = N / n ? ( p i ? d ) S=N/n*(pi*d) S=N/n?(pi?d)
? 车速为:

?
V = ( p i ? d ) ? v / n V=(pi*d)*v/n pi?d?v/n
七、软件实现

? 本设计采用STM8s105k4单片机作为主控芯片(仅供参考),使用IAR作为编译软件,ST-LINK为仿真器,采取外部中断方式捕获信号,传感器每发出一次高电平则单片机产生一次中断,以此计数。

? 先定义几个变量:

uchar Num=0;//检测到的齿轮齿数
uchar N=0;//检测到的齿轮齿数
uint S=0;//里程
uint V=0;//速度
uint C=用户自定义;//周长 
uchar n1=0;//车轮转过的圈数 

? 这里使用外部中断EXTI0来捕获传感器信号,因此需对相应的I/O口、中断配置初始化:

/********************GPIO初始化*******************/
void GPIO_Init()
{
  PA_DDR_DDR2=0;//PA2配置为输入模式
  PA_CR1_C12 =1;
  PA_CR2_C22 =1;//设置为中断上拉输入
}
/********************EXTI0初始化*******************/
void EXTI0_Init()
{
  EXTI_CR1 = 0X02;//设置PA仅为下降沿触发
  //这里没有配置中断优先级,原因是本部分设计中并不涉及其他中断,若涉及其他中断须配置中断优先级
}

? 在配置完成后,就进入主函数进行运算,其他的一些初始化配置须参考实际情况:

/******主函数******/
int main( void )
{
   CLK_Init();
   asm("sim");//main函数的优先级配置为3级(禁止中断)
   EXTI0_Init();
   GPIO_Init();
   asm("rim");//main函数的优先级配置为0级(中断使能)
   while(1)
  {
  ******自定义代码********
   	Delay_nms(500);//自行定义延时函数,此处不赘述
    V=Num*((pi*d)/n)*2;
    Num=0;
  ******自定义代码********
  }
}

? Num与N相等,由于计算速度需要,Num要定期清零,为不影响里程数,此处区别开。而速度的定义为单位时间内为物体移动的距离,所以为了方便显示速度500ms变化一次,代入计算时须×2以得出每秒的速度,若速度须带入计算,精度要求较高,则可:

while(1)
  {
  ******自定义代码********
   	Delay_nms(20);//自行定义延时函数,此处不赘述
    V=Num*(C/n)*50;
    Num=0;
  ******自定义代码********
  }

在运行主函数时传感器触发外部中断,则进入中断服务函数:

#pragma vector = 0x05//端口A外部中断
__interrupt void EXTI_PORTA_IRQHandler( void)
{
   Delay_nms(50);
   N++;
   Num++;
   n1=N/n;
   S=n1*C;           
}

显示的代码很快更新。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 10:57:40  更:2021-08-02 10:58:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:21:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码