基于大学生方程式赛车的车速测量与数据显示
Posted ZCIXX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于大学生方程式赛车的车速测量与数据显示相关的知识,希望对你有一定的参考价值。
基于大学生方程式赛车的车速测量与数据显示
一、设计背景
根据调查显示,越来越多的车队已经或有意向使用多电机作为赛车的驱动方式。因此赛车各驱动轮的扭矩分配就显得相当重要,从而需要精准地测量出赛车在各个状态的车速。
二、设计目标
能够实时、准确地检测并显示赛车在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
V=(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;
}
显示的代码很快更新。
以上是关于基于大学生方程式赛车的车速测量与数据显示的主要内容,如果未能解决你的问题,请参考以下文章
11.按要求编写Java应用程序。 创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的(代码片段
按要求编写Java应用程序。 创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的载重量(代码片段