二分练习-小车问题

Anarticledetailingaproblem-solvingapproachusingtimebinningtofindtheshortesttimefortwopeopletoreachadestinationsimultaneously,utilizingacarasarelay.TheauthorpresentsaC++codeexample.

小练习记录贴01
本来想取名叫每日一题的,然而我恐怕很难坚持住啊。lol能坚持多久拭目以待吧。

点击跳转到原题

题目描述

甲、乙两人同时从 A 地出发要尽快同时赶到 B 地。出发时 A 地有一辆小车,可是这辆小车除了驾驶员外只能带一人。已知甲、乙两人的步行速度一样,且小于车的速度。问:怎样利用小车才能使两人尽快同时到达。

输入格式

仅一行,三个实数,分别表示 AB 两地的距离 s s s,人的步行速度 a a a,车的速度 b b b

输出格式

两人同时到达 B 地需要的最短时间,保留 6 6 6 位小数。

样例 #1

样例输入 #1

120 5 25

样例输出 #1

9.600000

提示

数据规模与约定

对于 100 % 100\% 100% 的数据,保证 0 ≤ s , a , b ≤ 1 0 9 0 \leq s, a, b \leq 10^9 0s,a,b109


题目思路

一开始我的思路是找时间作为二分的目标,但是时间是一个统一的量,这是什么意思呢?就是说,必须要依靠时间来判断两个人有没有同时到达,所以时间是if里面要判断的内容,就得换一个变量。
所以自然而然只能使用距离来作为二分的目标。

我们可以理解a和b从A地到B地,那么最快的方式是a先坐车,然后车撂下a,让a走着,车转而去接b,接到b后,车一路开到终点B,于此同时a也到了B。
在这里插入图片描述
具体过程就如上图所示。标记的①②是相同的时间段a和b的行为。

但是请注意,b在②时间段并没有直接被车接走
这是因为车撂下a之后折返接到b还需要一段时间,所以应该是这样的↓
在这里插入图片描述
理解了这个过程后,假设a坐车的距离为x,我们可以得到:

  • a整体耗费的时间 = 坐车的时间 + 走路的时间 = x / drive + (s - x) / walk
  • b整体耗费的时间 = a坐车时b走路的时间 + 车来接b时b走路的时间 + b坐车的时间

按照这个思路,我们只需要二分然后找到合适的x,以满足a整体耗费的时间==b整体耗费的时间

还有需要注意的一点,如何计算车来接b时b走路的时间?这个时间其实就是b和车相遇的时间,所以用那一段距离直接除以(走路速度+开车速度)即可。

AC代码

#include<iostream>
#include<cstdio>
using namespace std;

int main(){
	double s, walk, drive; cin >> s >> walk >>  drive;
	double a_t, b_t;
	double l = 0, r = s;
	while(r - l > 1e-6){
		double x = (l + r) / 2;
		double a_t1 = x / drive;
		double b_s1 = a_t1 * walk;
		double b_t2 = (x - b_s1) / (walk + drive);
		double b_t3 = (s - b_s1 -(b_t2 * walk))/drive;
		double a_t2 = (s - x) / walk; 
		a_t = a_t1 + a_t2;
		b_t = a_t1 + b_t2 + b_t3;
		if(a_t < b_t) r = x;//A到的时间比B到的时间早->A坐车坐多了->距离向左移动
		else l = x; 
	}
	printf("%lf",a_t);
	return 0;
}
<think>好的,我现在需要帮助用户了解电子竞赛小车的硬件设计和相关组件。用户提到了电赛小车的硬件设计、电路和元器件,我需要根据提供的引用内容来构建一个结构清晰的回答,同时生成相关问题。首先,我要仔细分析用户提供的三个引用,看看里面有哪些关键信息可以提取。 引用[1]详细描述了电路设计和测试过程,包括使用Altium Designer设计原理图和PCB,元器件的选择(如接线端子、自锁开关、贴片电阻电容、STM32最小系统),以及测试步骤。这部分信息对于硬件设计的流程和具体元器件选择很有帮助。 引用[2]虽然主要是吐槽学习过程的困难,但提到了MSPM0和TB6612FNG驱动模块,以及电赛真题的练习。这里可能可以关联到微控制器选择和电机驱动的部分,但具体信息较少,可能需要结合其他引用。 引用[3]详细介绍了TB6612FNG电机驱动模块的特性,包括高效率、保护功能、低功耗和外围电路设计。这部分对于电机驱动模块的选择和电路设计非常重要,可以详细展开。 接下来,我需要将这三个引用中的信息整合到回答中,按照用户要求的层次结构来组织。根据用户的问题,回答需要涵盖硬件设计的主要模块、关键元器件、电路设计要点以及测试流程。同时,需要确保所有数学表达式使用正确的LaTeX格式,虽然当前问题可能不涉及太多数学内容,但如果有的话需要留意。 首先,确定硬件设计的核心模块,如主控模块、电机驱动模块、电源模块、传感器模块和通信模块。每个模块需要对应的元器件和设计要点。例如,主控模块可能使用STM32或MSPM0,电机驱动模块使用TB6612FNG,电源模块需要稳压和滤波,传感器可能包括编码器或红外模块,通信可能用蓝牙或Wi-Fi。 然后,关键元器件部分需要列出每个模块的具体元器件,如主控芯片、电机驱动芯片、电源相关元件、传感器等。引用[1]提到的贴片电阻电容、接线端子、自锁开关都是重要部分,需要包含进去。 电路设计要点部分,需要强调PCB设计、电源滤波、信号隔离、保护电路等。引用[1]提到使用Altium Designer设计,测试电路节点,以及烧录程序到STM32,这些都是电路设计的步骤。引用[3]提到TB6612FNG的外围电路简单,只需滤波电容,这点可以作为电路设计的一个优点。 测试流程部分,引用[1]详细描述了洞洞板焊接、万用表测试节点、程序烧录和硬件驱动测试的步骤,需要分步骤说明。同时,引用[2]提到的例程测试和调试问题,可以补充到测试中的常见问题。 在生成相关问题的时候,需要围绕硬件设计的不同方面,比如主控选型、电机驱动比较、传感器选择、PCB设计、测试方法等,确保问题覆盖用户可能感兴趣的后续内容。 最后,需要检查是否符合所有系统级指令,比如使用正确的中文回答,正确引用标注,数学表达式格式正确(虽然当前问题可能不涉及),以及生成的相关问题是否合适。确保每个引用在回答中被正确引用,例如引用[1]用于电路设计和测试流程,引用[3]用于TB6612FNG的特性,引用[2]可能用于微控制器选择的问题。 总结来说,回答的结构应该是分模块介绍硬件设计,列出关键元器件,讲解电路设计要点,描述测试流程,并生成相关问题。每个部分都要引用对应的来源,确保信息准确。</think>### 电赛小车硬件设计关键要点 #### 一、硬件设计核心模块 1. **主控模块** - 采用STM32或MSPM0等微控制器,负责PWM生成、传感器数据处理及通信控制[^1][^2]。 - 需配置I/O口、定时器、ADC模块,支持OLED显示、LED状态指示等外设驱动[^1]。 2. **电机驱动模块** - 选用TB6612FNG等H桥驱动芯片,内置MOSFET实现高效功率转换,支持双向电机控制[^3]。 - 电路需配置电源滤波电容,无需额外散热片,简化外围电路设计。 3. **电源模块** - 包含降压稳压电路(如LDO或DC-DC)、锂电池管理单元,为电机和主控提供稳定电压。 - 需通过接线端子连接外部电源,并设计过流保护电路[^1]。 4. **传感器与通信模块** - 常见传感器:编码器(速度反馈)、红外/超声波(避障)、陀螺仪(姿态检测)。 - 通信模块:蓝牙、Wi-Fi或无线充电接收端。 #### 二、关键元器件清单 | 模块 | 元器件示例 | 功能说明 | |----------------|---------------------------------------|----------------------------| | 主控 | STM32F4系列、MSPM0芯片 | 核心控制与算法执行[^1] | | 电机驱动 | TB6612FNG芯片、H桥电路 | 电机方向与转速控制[^3] | | 电源 | 7805稳压芯片、钽电容、自锁开关 | 电源滤波与开关控制[^1] | | 传感器 | 霍尔编码器、红外对管、MPU6050 | 运动状态感知 | | 显示与交互 | OLED屏幕、LED指示灯 | 状态实时显示 | #### 三、电路设计要点 1. **PCB设计规范** - 使用Altium Designer等工具设计原理图与PCB,优先考虑信号完整性,避免高频干扰。 - 布局时分离数字地与模拟地,电机驱动部分需远离敏感信号线。 2. **电机驱动电路示例** ```plaintext TB6612FNG典型连接: VM → 电机电源(7-12V) VCC → 逻辑电源(3.3/5V) PWMA/PWMB → 主控PWM输出 AIN1/AIN2 → 电机方向控制 ``` 3. **保护设计** - 添加TVS二极管防止电压尖峰,电机输出端串联自恢复保险丝。 - 过温保护通过芯片内置功能实现,无需外置热敏电阻[^3]。 #### 四、测试流程(引用[1]实践) 1. **洞洞板焊接验证** - 按原理图焊接元器件,用万用表蜂鸣器档检测短路/断路[^1]。 2. **功能分步测试** - 烧录程序测试PWM驱动电机、OLED显示、LED闪烁。 - 通过I²C通信验证传感器数据读取。 3. **系统联调** - 结合无线充电模块测试动态充电稳定性[^1]。 - 优化PID参数实现精准速度控制。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ayu阿予

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值