149浏览
查看: 149|回复: 10

[项目] 【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器

[复制链接]
Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来编写、编译和上传代码到Arduino板上。Arduino还有一个丰富的库和社区,你可以利用它们来扩展Arduino的功能和学习Arduino的知识。

Arduino的特点是:
1、开放源码:Arduino的硬件和软件都是开放源码的,你可以自由地修改、复制和分享它们。
2、易用:Arduino的硬件和软件都是为初学者和非专业人士设计的,你可以轻松地上手和使用它们。
3、便宜:Arduino的硬件和软件都是非常经济的,你可以用很低的成本来实现你的想法。
4、多样:Arduino有多种型号和版本,你可以根据你的需要和喜好来选择合适的Arduino板。
5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图2

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图1

驴友花雕  中级技神
 楼主|

发表于 5 天前

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器

这是一款基于 Arduino 并采用 3D 打印的纳米四轴飞行器,采用直流有刷电机飞行。项目名称“nano”源于其基于 Arduino nano 开发板,我认为它是迄今为止最成功的开发板之一。这个项目并非只是“嘿,看看我做了一个多么酷的东西”,而是旨在分析和理解设计四轴飞行器时需要做出的设计决策,因此篇幅会略长。不过,如果您想从头到尾了解四轴飞行器,请继续关注!

我最初开始这个项目的时候(说来惭愧,那是好几年前的事了……),我选择了当时很流行的蓝牙 2.0 模块。然而,随着时间的流逝,越来越多的 Arduino 模块也应运而生。最近,我注意到 Aliexpress 上有一些价格实惠的纳米模块,例如 BLE-Nano 和 RF-Nano (nRF24L01),所以我决定重启这个项目,并最终完成它。我打算使用 BLE-Nano,因为它的连接效果很好,而且我也想用我的智能手机来控制它。

还有一点,我特意选择了JLCPCB基础库中提供的 SMD 元件,并提供了EasyEDA提供的Nano 四轴飞行器和后来改进的nRF52840 四轴飞行器的原理图和 PCB 文件。一些通孔连接器和其他四轴飞行器相关的必需品仍需另行采购,否则,您可以预订已组装好的 PCB 或单独订购元件,然后手工焊接。

PS:该机器人专用于《生活大**》中的 MONTE(移动全方位中和与终止根除器)杀手机器人:D。

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器

## 步骤 1:框架和塑料

材料选择
设计框架时需要考虑以下几点。框架必须:

轻——显然越轻,就越容易举起来!
坚固——四轴飞行器经常会掉落,如果每次掉落后它都不会断裂——这是一个巨大的优点。
抗震——否则电机振动较大,可能会不稳定。这也有助于减少加速度计拾取的噪音。
过去我见过一些四轴飞行器的框架是用塑料、碳纤维、某种金属、PCB 或这些材料的组合制成的。因为我也想学习 3D 打印,所以我决定自己设计框架,然后用 ABS 塑料打印,当然 PLA 也不错。我没有设计纯 PCB 的四轴飞行器,因为那样会增加 PCB 打印的总成本,而且如果一个部件坏了……整个四轴飞行器就得扔掉。

3D设计
使用3D打印机,我可以设计任何形状和形式的四轴飞行器。我设计的框架重量约为10-15克,但根据打印机设置和打印所用的塑料材质,重量会略有不同。我使用了免费的网页设计工具TinkerCAD进行设计,它非常容易使用,我鼓励初学者或小型项目使用它。对于更专业的设计,你也可以使用AutoCAD(付费)或Blender(免费)。在我看来,后者是开源且免费使用的,这是一个巨大的优势,但与TinkerCAD相比,它的学习曲线要​​平缓得多。

我把设计文件添加到这里,方便您立即打印。如果您想从各个角度查看设计,请访问Thingiverse。同样,您也可以访问TinkerCAD,根据自己的喜好修改我之前的设计。

对于单轴四轴飞行器,你只需要打印Quadcopter_bottom_3.stl 文件。其他部件是可选的,因为它们不会增加任何价值,更多的是为了美观。另外需要注意的是,螺丝打印得非常差,所以我没能把它们穿过指定的孔。我重新设计了底部,这样你就可以把它粘在顶部,然后如果你想用的话,可以简单地用一些塑料扎带、电线,甚至电线——不过要注意,每个部件都会增加不必要的重量。

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图1

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图3

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图2

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器

## 步骤2:电子元件

电子元件
在研究一些东西的时候,我注意到一些非常相似或非常有趣的项目,比如这个基于MultiWii项目、Crazyflie 1.0和Cracyflie 2.X的项目,或者另一个业余项目。如果你想在你的项目中找到其他可用的组件,或者遇到瓶颈,这些项目可以作为参考。在决定我的四轴飞行器的每个部件时,如果重量大于1克,我会考虑它的重量。否则,我会直接忽略它,因为它非常微不足道。

微控制器和连接性
最初启动这个项目时,我使用的是Arduino Nano的克隆版,它不包含任何通信模块,因此我想使用HC-06蓝牙 2.0 从属模块。然而,现在有更好的替代方案,例如:

Bluno Nano,内置 CC2540 BLE 芯片。售价约为 27 英镑。
BLE-Nano是Bluno Nano的中国克隆版。在Aliexpress上售价约 4 英镑(含运费)!
RF-Nano ,在Aliexpress上的售价约为 4 英镑(含运费)。
Nano 33 BLE,运行速度比上述处理器 nRF52840 快得多。价格约为 17 英镑。
Nano 33 BLE Sense,与 Arduino Nano 33 BLE 非常相似,但额外包含一些传感器,例如加速度计和陀螺仪,因此无需额外添加。价格约为 27 英镑。
我认为Beetle BLE是另一个有趣的选择,但是它们只有 2xPWM 输出,因此如果没有额外的电路就无法控制 4 个电机,因此不值得在这个项目中为此付出努力。我选择了BLE-Nano,因为它们价格低廉,并且可以通过 BLE 连接到智能手机。最重要的是,这些芯片不再包含通常位于克隆板内部的 CH340 芯片,该芯片既用作 USB 转串口转换器,又用作 5V 转 3.3V 的 LDO 稳压器,可以在不降低电压的情况下提供高达 25mA 的电流。这意味着无需安装 CH340 驱动程序,并且所使用的新型 LDO SP6205 现在可以提供高达 500mA 的电流。它们也终于使用 micro-USB 而不是老式的 Mini-USB(是时候了!)。每个芯片的重量差别不大。还要注意,RF-Nano使用引脚 9、10、11、12 和 13 与 RF 模块通信,因此无法利用这些引脚进行 PWM - 您必须找到解决方法,例如使用外部 PWM 芯片或使用基于软件的 PWM。

如果您不介意价格,我推荐您选择 Nano 33 BLE 或 Nano 33 BLE Sense(您需要稍微修改一下我的代码……),但我希望价格尽可能便宜。另外,如果我需要的话,可以直接更换 Nano,而无需重新设计 PCB——这就是 Nano 为四轴飞行器带来的魅力!

我认为,如果不选择 Nano,其他优秀的微控制器选择(我认为将来我会重新设计原理图和 PCB 以配合这些微控制器)包括:

Particle Xenon - 基于内置BLE的nRF52840,这是一款很棒的开发板,价格约为11英镑。可惜它已经停产了,我认为你应该买几个,因为它们很棒。
Adafruit Feather nRF52840 Express - 这款产品和 Particle Xenon 几乎可以互换。虽然连接引脚数量不同,但它们的性能基本相同。不过价格更接近 22 英镑。
ESP32 - 这是一款出色的芯片,它拥有众多模块,其中最受欢迎的是 Lolin32 变体。它内置低功耗蓝牙 (BLE)、蓝牙和 WiFi,因此是一个不错的选择。
ESP8266 - 这款芯片不支持任何蓝牙功能,但支持 WiFi。它可以说是 ESP32 的弟弟……
上述模块的优点在于它们略宽,因此我们的 IMU 可以轻松安装在下面,从而节省大量空间。不仅如此,它们还包含电池连接器(不过需要确定连接器的额定电流)、电池充电器、电压电平检测器等等。最重要的是,它们也可以使用 Microcpython (ESP)、Circuitpython (nRF52840) 和其他程序进行编程,因此我认为它们可能是未来的绝佳选择。不仅如此,大多数内置的 BLE 还支持称为 HID 模式的模式,这使得它们可以将它们直接连接到几乎所有手机或 PS4 的游戏控制器,从而无需手机。我认为它们是很棒的芯片选择。

总重量~5克

电机
我买了两套电机,一套是从Micro Motor Warehouse购买的(后来称为MMW 电机),另一套是从 Ebay 购买的 Hubsan X4 的替代品(后来称为Hubsan 电机)。它们的尺寸都是 8.5mm x 20mm,也称为配置 8520。MMW 组并不便宜(约 25 英镑),但是这些电机的速度应该比 Hubsan 电机快得多,推力也更大。我的四轴飞行器的重量稍大,因此我可能需要快速电机来举起重量,但是我会测试这两种电机,看看 Hubsan 是否足够,因为它们的价格每套仅为 4 英镑左右。如果需要更快的电机,也可以从与 MMW 相同的地方选择 -这些,但请注意,推力是相同的,因此您不会看到太大的差异。另一种方法是从TinyWhoop 商店购买,但是电机较小。购买电机组时,您需要查看的最重要的事项(从最重要到最不重要)是:

类型——有刷直流电机和无刷交流电机。纳米四轴飞行器通常采用有刷直流电机,因为它们体积更小,更容易控制,无需额外的交流控制器。然而,它们的推力较小,无法用于更大的四轴飞行器。
罐体直径 - 3D设计是针对8.5毫米直径的电机进行的。如果直径不同,设计必须进行修改。
最大静态推力,或简称“推力”,定义了电机在空中可以承受的重量,或者说,你的四轴飞行器可以承受的重量。必须确定螺旋桨的类型,并且通常会提供推力与电流的关系曲线(通常称为性能曲线),例如,你可以在网上找到Hubsan的推力曲线。相比之下,毫米波电机的推力为40克,而Hubson的推力为34克。
重量 - 电机的重量,将添加到四轴飞行器的总重量中。MMW 和 Hubson 电机的重量均为每台约 5 克。
负载电流 - 定义当使用指定螺旋桨施加指定电压时,电机的电流。请注意,如果不连接螺旋桨,该电流会降至非常小的值,因此在测试掉电电压(稍后会详细介绍)时,务必连接螺旋桨。相比之下,MMW 电机的单电机电流为 2.75A,而 Hubsan 电机的单电机电流为 1.85A。
推荐的螺旋桨尺寸——几年前我还没在意这个,但后来我注意到四轴飞行器根本升不起来,才意识到我用的螺旋桨实在太小了!两个电机都应该使用55毫米的螺旋桨。
额定寿命——这定义了电机能够无故障运行多长时间。MMW 规定这个寿命是 5-6 小时,不过 Hubsan 电机的情况我不太确定。因此,购买两套电机总是个好主意。
速度——速度快意味着飞行速度更快,但电流也会增大,因此需要更好的电池。而且由于速度快,它们可能更难控制……所以,只要电机是为四轴飞行器设计的,我就不会在意这个。
插头类型——这只是为了了解应该购买哪种母头连接器来匹配这些电机。MMW 电机使用JST-PH 2.0 2 针连接器,我建议您坚持使用这种连接器。稍后会详细介绍。
所有电机总重量~20g

惯性测量单元(IMU)
本质上,IMU 用于计算四轴飞行器各轴与地面之间的角度。通常,四轴飞行器内部使用的 IMU 至少包含两个元件:加速度计和陀螺仪。IMU 的构成细节无需赘述,但值得注意的是:

加速度计(后来称为加速度计)测量加速度(废话!)。它有 3 轴传感器,因此可以测量 3 个垂直轴上的加速度分量。地球引力实际上是指向地球中心的加速度分量,因此它也可以测量。通过应用一些基本的数学知识,我们可以计算出重力矢量相对于当前四轴飞行器旋转指向的位置。然而,加速度计不仅可以接收重力,还可以接收任何其他加速度,例如四轴飞行器向上、向下、向侧面加速。不仅如此,电机引起的振动本质上也是加速度!这种引入的电机噪音通常通过阻尼传感器来降低,例如在加速度计和四轴飞行器本身之间添加聚苯乙烯。总的来说,单靠这个传感器是不够的。
陀螺仪(后来被称为陀螺仪)测量旋转速率(等等,什么?)。它具有三轴传感器,因此可以测量三个不同轴的旋转变化或速率。机械陀螺仪测量实际角度,然而基于芯片的解决方案依赖于其他技术,从而可以最小化传感器尺寸,并添加第三个轴(沿地球表面),否则无法测量。缺点是,要评估角度,必须对传感器值随时间进行积分。这会产生非常平滑的输出值,但是,如果单独使用这种传感器,角度值会随时间漂移。这通过两种方式发生:
传感器偏差,或者简称为偏移——陀螺仪并非完美无缺,因此每个出厂的陀螺仪都会在其实际测量值上留下一些偏移。这种偏移可以通过校准陀螺仪来消除。校准方法是:将陀螺仪静止放置,然后采集(比如说)100 次测量值并取平均值。之后,可以从实际测量值中减去这个偏移值,从而改善测量结果。
连续世界与离散世界的困境——我们生活在连续的世界,而微控制器却并非如此。传感器进行测量时,会以指定的采样率(例如 80Hz)进行采样。如果在两次采样测量之间发生了非常快速的变化,测量结果将无法捕捉到该变化。虽然可以通过提高采样率来缓解这个问题,但随着时间推移,漂移仍然会变得明显。
这就是为什么 IMU 配备的不是一个传感器而是两个传感器——一些巧妙的算法正在将传感器值合并在一起,以便在很长的时间内获得平滑可靠的角度值。

另一个重要因素是 IMU 传感器在四轴飞行器表面的放置位置。这不是简单的数学问题,但您可以在此处找到其分析。简而言之,加速度计传感器必须尽可能靠近质心放置,否则由于向心加速度,四轴飞行器的旋转将被测量为加速度,即使四轴飞行器实际上根本没有移动!必须使用这个或其他数学运算来将此组件从最终结果中移除。我会尝试让加速度计尽可能靠近质心,但我相信在这种情况下,这不会增加太多额外的不准确性,因为四轴飞行器本质上会在不运动时尝试保持其旋转角度与地球表面对齐 - 否则它会掉落。好吧,除非你在表演一些技巧!否则可以随时将其放置在 PCB 的第二层,又名 The Upside Down!

在本项目中,我使用了非常流行且价格低廉的MPU6050 IMU,它包含一个 3 轴陀螺仪和一个 3 轴加速度计。有人可能会对使用MPU9250感兴趣,它还包含一个 3 轴磁力计(用于测量磁场)。然而,由于室内电线和建筑中存在的磁干扰,这些 IMU 的性能并不理想,而且运转中的电机会产生额外的磁场,所以我怀疑它是否有效。总之,我在电路和 PCB 中添加了 MPU9250 开发板,它向下兼容 MPU6050,因此可以使用任何 IMU。

总重量~2g

电池
选择合适的电池至关重要,因为错误的电池会导致电机无法获得足够的电流来点亮四轴飞行器,而且电压会大幅下降,从而持续干扰电子设备。购买电池时需要注意以下几点:

类型——电池种类繁多,例如锂聚合物电池、锂离子电池,甚至这些电池都有不同的颜色。最近,基于石墨烯的电池问世了,它可以承受更高的电流,并且具有更高的容量密度。当然,缺点就是价格!
容量(以 mAh 或 Wh 为单位)——决定电池的储能容量。容量越大,四轴飞行器单次充电后续航时间越长。容量与电池的尺寸和重量成正比,也决定了电池的电流输出量。
最大允许放电(突发)和平均放电(恒定)速率(C) - 前者决定峰值电流,例如当四轴飞行器开始加速时,而后者决定正常工作电流,例如四轴飞行器在空中保持恒定。通常有一个经验法则,即容量和放电率的乘积将给出电池可以提供的电流。为了安全起见,还需要增加 20% 的安全裕度 - 我们不希望电池**,对吧?例如,如果你有一个 200 mAh 的电池和 20 C 的平均/恒定放电,那么 200mAh * 25C * 80%= 4A。因此,平均而言,这样的电池可以提供 4A 而不会出现问题。然而,这只是一个经验法则,当涉及非常大的电流时,我们希望放电率更高,与电池容量无关。例如,我之前试过Turnigy 纳米技术 650mAh 1S 15c 电池(根据我们的计算,电流为 7.8A),但完全没用。它们只能完全驱动一个电机,这意味着放电率太小了。
重量(克)——容量越大的电池重量越重,因此需要找到一些能够提供足够的飞行时间但仍能提供良好飞行性能的电池。
让我们计算一下应该选择哪种电池以及电池能用多长时间。在我们的例子中,电机消耗的电流比电子设备少几百倍,因此在计算所需的放电率时,我们只需要关心电机电流。总最大负载电流 = 2.75A * 4 = 11A。好的电池容量应该在 150-350mAh 之间,我选择了一块介于两者之间的电池 - 260mAh(怎么做到的?凭直觉……)。为了简化计算,我将使用 0.26Ah。这意味着我需要 11A / 0.26Ah = 42.3C 的最大放电率。由此可见,一次充电后它们至少应该可以使用 0.26Ah * 60 分钟 / 11A = 1.4 分钟。看起来并不多,不是吗?当我将四轴飞行器用线固定在地面上时,我进行了测试,看起来数字是合理的,我真的无法将四轴飞行器在空中停留 2 分钟,但是这假设四轴飞行器固定在地面上,因此不仅要克服自身的重量,还要抵抗线。现实世界的数字应该至少飞行 3 分钟。我建议购买诸如Turnigy nano-tech 300mah 1S 45~90C(9g)或甚至Turnigy Graphene 600mAh 1S 65C(15g)之类的电池,它们看起来很有前途,因为它们的放电率非常高,但我没有测试过它们。如果您有多余的现金,请同时购买石墨烯电池和普通电池,因为与具有相同容量的其他电池相比,石墨烯电池更轻,并且提供更高的放电率(至少在纸面上)。我没有亲自试过,但看看它们在实际使用中的表现会很有趣,因为我觉得我买的35C放电率的电池也有点小。选择电池和螺旋桨的时候,也看看这个视频,里面有各种电池和螺旋桨的测试!以后选螺旋桨的时候我还会再看这个视频。

总重量~12克

连接器
四轴飞行器最常用的连接器是JST。它们很容易让人混淆,因为有很多类型,而且每个人都会混淆,有时还会把一种连接器当成另一种来宣传,但总体来说,最流行的连接器似乎是:

JST PH 2.0 2 针,其 PCB 母连接器为通孔,以及JST PH 2.0 2 针 SMT RA(直角),为表面贴装 (SMD)。前者也采用 90 度旋转形式。在我看来,这些是迄今为止最受欢迎的,我发现它们既可用于电池,也可用于电机。MMW 电机配备JST-PH 2.0 2 针公连接器。不仅如此,如果您注意到 Wemos Lolin32,所有刨花板和所有电池支持的 Adafruit 板都配备了它的 SMD 版本。我们将在那里用于电机,还将添加一个用于电池。两者均可在Farnell、ebay或 Aliexpress 上购买。确保您购买了如图所示的正确连接器,因为它们的名称非常相似,有些供应商甚至使用相同的名称……
JST Micro-T MX 2.0 2 针,这款 PCB 母头连接器仅采用 SMD 封装(目前没见过其他型号)。这是第二常见的电池连接器,但我之前从未见过它们用于电机。它们的优点在于,即使阻焊层略有不同,它们仍然可以与 JST PH 2 针 SMT RA 焊接在同一阻焊层上。
像这样的JST 连接器。它们很烦人,因为通常没有提供名称,因此必须始终检查图像。好处是它们的间距为 0.1 英寸(2.54 厘米),与面包板的间距相同,因此它们非常适合测试,因为可以直接插入电源线!最重要的是,可以在 PCB 上添加两个 0.1 英寸间距的孔,以便连接它们而无需购买任何特殊连接器。它们比其他连接器更容易滑出,因此它们更适合测试,因为在出​​现问题时可以将它们拔出。缺点是,您可能会不小心将连接器插反了……因此,请不要在插入之前喝酒,因为您可能会炸掉没有特殊电路保护的芯片。
BT 2.0 2 针 - 这种接口用于大型四轴飞行器,因为它们的电阻较低,因此能够承载更大的电流。我们不需要这些接口。
有些电池甚至可能带有双连接器。对于我的四轴飞行器设计,我不想疯狂地为所有东西使用不同的连接器。对于电机,我使用了 JST PH2.0 2 针通孔。另一方面,电池可能带有各种连接器,这更难维护。我曾经切割现有的连接器并焊接所需的连接器,但这也有点烦人。因此,我将添加两个 0.1 英寸的孔来支持 JST 连接器,这将最适合测试,然后是 JST PH 2.0 2 针 - 与电机相同,因为我已经有另一个可用的连接器。当然,能够支持所有连接器会很好,因此如果您决定使用不同的电池,我将在可选原理图文件中添加连接器部件。

请注意,连接器必须支持高达 10A 的大电流,因此务必检查它们是否能够承受。设计 PCB 时还需要考虑的其他事项包括,为没有跳线/过孔的电机设计更厚的走线,以免影响性能。

螺旋桨
螺旋桨的区别在于:

长度——以半径乘以 2 来测量。
叶子的数量——通常为 2,但也有 3 个或更多。
螺旋桨的形状 -
扭转角度——角度越大,螺旋桨提供的推力越大。
MMW 推荐的螺旋桨是 55 毫米的,比如 Hubsan 四轴飞行器用的。我苦苦思索该买哪种合适的螺旋桨,因为四轴飞行器无法升空,所以我还订购了华科尔 LadyBird螺旋桨,也是 55 毫米的。我看了前面提到的视频,发现它们实际上比 Hubsan 的推力更大,而且根据电池的不同,每个螺旋桨的推力大约为 3g,因此总共可以额外提供 12g 的推力!然而,也有更好的螺旋桨,比如 KingKong 的,但我不想使用更大的螺旋桨,因为它们提供的推力更大,因此能够更容易地升空四轴飞行器,但是会消耗更多电流,可能会导致电机过热,所以我不确定……

总重量1g

N-MOSFET(JLCPCB组装)
我们需要 4 个 MOSFET 晶体管(也称为开关)。它们将与 PWM 一起使用,为电机提供峰值电流。选择它们可能比较棘手,在为我们的应用选择时,有几点要点需要注意:

它可以提供的最大漏极电流(Id max),在这种情况下应该在 3A 左右,以支持可以吸收大约 2.75A 的电机。
Vgs 阈值电压必须较低,大约在 1V 左右,因为锂电池电压在某个时刻可能会降至 3.4V。如果阈值选择过高,Arduino 将无法充分导通 MOSFET 以提供所需的电流。由于每个晶体管的响应不同,因此最好同时检查漏极电流 (Id) 对阈值电压 (Vgs 阈值) 的依赖性。
MOSFET 完全导通时的漏极到吸极电阻 (Rds (on))。该电阻由一定的栅极到吸极偏置电压 Vgs 决定。通常情况下,该电阻值约为 0.032 欧姆,但越小越好。如果您选择 Rds (on) 约为 0.3 欧姆的 MOSFET,由于电机以 3A 电流运行,MOSFET 上的压降将为 0.9V,因此电机无法获得足够的压降。
请注意,MOSFET 的封装中始终包含一个续流(也称为反激)二极管,它是正常工作所必需的。如果某些原理图未包含续流二极管,则它们可能仍然存在,只是未显示出来。此外,这些二极管还可以保护 MOSFET 免受来自电机线圈的浪涌电流的影响,从而防止 MOSFET 烧毁,所以,这真是双重加分。

在我制作的初始电路板上,我从 Farnell 订购了SQ2310ES,因为它的 Vgs 阈值电压为 0.6V,可以提供 6A 电流!这可能有点超出标准,但嘿——如果我愿意,我可以毫无顾虑地用它们为任何有刷电机供电!我还制作了一个表格,列出了其他优秀的 MOSFET 及其重要特性。其中一些是从类似的四轴飞行器中挑选出来的,一些来自同一系列的芯片,或者是我在 Aliexpress 或 JLCPCB 上偶然发现的。所有这些 MOSFET 均采用 3 引脚 SOT-23 封装,因此与后来提供的 PCB 兼容:

名称 // 最大 Ids (A) // Vgs thr(最小-最大)(V) // Rds(on)(Vgs = 3V, T = 25C)(mOhm)
SI2302DS // 2.2 - 2.8 // 0.65 - ??? // 80
SI2300DS // 2.5 - 3.0 // 0.6 - 1.5 // 60
PMV31XN // 3.75 - 5.9 // ??? - 1.8 // 35
CJ2302 // 2.1 // 0.65-1.2 // 40
CJ2304 // 3.3 // 1-2.2 // 400???
AO3400A // 5.9 // 0.65 - 1.45 // 22
IRLML2502 // 3.4 - 4.2 // 0.6 - 1.2 // 35
SI2314 // 5 // 0.6 - 1.1 // 50
SI2312CDS // 4 - 5 // 0.45 - 1 // 28
SQ2310ES // 3.5 - 6 // 0.4 - 1 // 32
IRLML0030TRPbF // 4.3-5.3 // 1.3-2.3 // 150
请注意,所有这些MOSFET的Vgs阈值都非常小,能够提供足够的电流来驱动Hubsan电机。然而,为了驱动速度更快的电机,我只推荐那些能够提供3A以上电流且导通电阻(Rds(on))最小的MOSFET,因为这样MOSFET本身的压降会比电机的压降更小。JLCPCB基础库里有AO3400A,所以我选择了它。在撰写本文时,Aliexpress上推荐的MOSFET中最受欢迎的是SI2300DS、SI2314、IRLML2502和AO3400A。

如果使用通孔元件,则可以使用以下元件:

名称 // 最大 Ids (A) // Vgs thr(最小-最大)(V) // Rds(on)(Vgs = 3V, T = 25C)(mOhm)
NDP6020 // 35 // 0.4 - 1 // 22
IRF3706 // 54 - 77 // 0.6 - 2.0 // 10
IRF3708 // 52 - 62 // 0.6 - 2.0 // 12
IRLB3034 // 195 // 1 - 2.5 // ???
IRLZ44 // 36 - 50 // 1 - 2 // ???
IRL540N // 26 - 36 // 1 - 2 // ???
这些都采用TO-220封装,因此易于焊接,并且能够承受大电流。我推荐导通电阻(Rds(on))最低的,因为这样它们的功耗更低,电机能够以更高的速度运行。

P-MOSFET(JLCPCB组装)
由于废旧电池会产生巨大的电流,我们不想冒险将电路接反,因为这种情况确实会发生,因此设计某种电池反接保护系统非常重要。实际上,只需使用单个 P-MOSFET 晶体管即可轻松实现,正如本文所述。不过,有两种方法可以解决这个问题:

安装一个可以提供超过12A电流的P-MOSFET。NDP6020P具有非常好的Vgs,非常适合此用途,但如果您注意到,它是一个TO-220封装的通孔元件。
仅保护昂贵的电子设备,例如 Nano、IMU 和像素。在这种情况下,我们几乎可以使用任何可用的 P-MOSFET,因为它最多只需要提供 300mA 的电流。
目前我认为我们至少可以保护主要的电子设备,这样可以省点事。为了做到这一点,我们可以将电池分成两个电源,一个不受保护,用于驱动电机;另一个受保护,用于为其他电子设备供电。如果电池反向连接,N-MOSFET 和使用的齐纳二极管可能会损坏(电流直接流经二极管和齐纳二极管),但其他电子设备和电机可以正常工作。我还建议安装一个电池连接器,这样只能单向连接……

如果我们采用这种设计,一些不错的P-MOSFET选择包括AO3401A、SI2301CDS、SI2301DS、CJ2301或IRLML6401等等,因为它需要提供最大300mA的电流(加上可选元件)。AO3401A和SI2301DS在JLCPCB基础库中可以找到,所以我随机选择了它们。你也可以查看我推荐的N-MOSFET列表,找到它们的P-MOSFET替代品(大多数N型MOSFET的编号为偶数,例如2300,而P型MOSFET的替代品编号为奇数,例如2301),因为它们都具有较低的Vgs阈值。

通孔替代品可以是 NDP6020P

电阻器(JLCPCB组装)
电阻调节电路中两点之间的电流。流过电阻的电流也会产生与电流成比例的电压降。出于各种原因,我们需要在本项目中使用多个电阻:

每个 MOSFET 的栅极到地之间都有 4 个 10kOhm 的下拉电阻。要理解为什么需要这些电阻,你需要了解一些理论知识。MOSFET 有 3 个引脚,分别是漏极、源极和栅极。N 型 MOSFET 的栅极电压足够高(至少高于 Vgs 阈值电压)时,就会导通。MOSFET 导通时,电流从漏极流向源极,虽然两者之间存在串联电阻,但只要施加的栅极电压远高于 Vgs 阈值电压,电流就会一直很小。现在,MOSFET 在施加栅极电压时导通的原因实际上是栅极与其他两个沟道没有任何连接——它实际上是一个电容!这个电容的另一侧实际上是漏极和源极之间的区域(没错,这就是为什么 MOSFET 被画成这样,栅极断开,漏极和源极之间有一个很大的方形区域)。当施加栅极电压时,电容器极板的另一侧会吸引负电子,当吸引的电子数量足够多时,漏极和源极之间就会形成一个通道,允许电流流动。回到下拉电阻——如果没有它们,我们会遇到两个问题:1) 由于栅极是电容器,晶体管关闭时容易储存电荷,因此如果我们通过施加高栅极电压来导通N型MOSFET,然后断开电源,MOSFET将保持导通很长时间。当然,当我们将Arduino引脚设置为低电平时,它会为电流创建一条路径,但为了获得最佳效果,最好添加一个连接到地的10kOhm电阻,从而提供一条额外的路径来放电栅极电容器,从而关闭晶体管。2) 在Arduino将每个输出引脚设置为低电平之前,栅极将具有浮点,这意味着电压是未知的。电机可能只会短暂地开启!因此,使用下拉电阻可以确保每个MOSFET在启动时都处于关闭状态。要了解更多相关信息并查看一些有趣的图表,请参阅本文。
Arduino PWM 引脚输出和每个 MOSFET 栅极之间连接了 4 个 100 欧姆电阻。如果不使用这些电阻,当输出引脚状态为高电平时,流入 MOSFET 栅极的电流会非常大,从而导致 MOSFET 瞬间导通。由于电机电感的特性,这会产生非常大的浪涌电流,导致电池电压大幅下降,甚至可能导致 Arduino 或电子设备复位。我们需要通过降低流入 MOSFET 栅极的电流来降低浪涌电流,因此需要添加一个非常小的 100 欧姆电阻来给栅极电容充电。
33kOhm 和 100kOhm 的组合将形成用于测量电池电压的分压器对。锂聚合物电池的电压不能低于 3.2V,充电也不能超过 4.2V。每次超过极限,都有损坏电池甚至引起火灾的风险!因此,我们需要知道在电压达到临界水平之前何时关闭四轴飞行器。要使其正常工作,我们需要利用芯片内置的 1.1V 参考电压。要使其正常工作,我们需要确保对用于测量电池电压的模拟引脚施加的电压不超过 1.1V(因为 1.1V 的测量结果是 1023,或者简单地说是 100%)。我选择这样的电阻值,这样当测量充满电的电池电压为 4.2V 时,电阻值为 33k / (33k + 100k) * 4.2 = 1.04V。这非常完美,因为内部参考电压实际上因芯片而异,范围在 1 - 1.2V 之间。所选值将允许四轴飞行器与任何 Nano 开发板兼容,无论参考电压如何变化,同时还能提供接近 10 位的最高分辨率。另请注意,这些电阻值应较高,以避免能量浪费。然而,在我们的应用中,考虑到电机消耗的电流是其他电机的数千倍,因此这并不是什么大问题。
电容器(JLCPCB组装)
四轴飞行器中的电容器(后文简称“caps”)用于滤除电源中不必要的高频电压尖峰,否则会影响Arduino和其他芯片的正常工作。电压尖峰主要由电机引起,电机除了会产生电刷噪音外,还会消耗大量电流(总计12A!)。因此,如果不注意,电压波动会非常大,有时甚至会达到数百毫伏。这会影响视频质量(如果使用视频传输)、基座与四轴飞行器之间的通信(传输信号中的噪音)、MCU(芯片可能会不断重置)以及IMU读数(例如,IMU内部ADC中的噪音)。

请注意,电容根据介电材料的不同而分为不同类型,最常见的是陶瓷电容、电解电容和钽电容。我强烈建议您观看这个视频和这个视频,了解正确放置电容可以带来多么显著的变化。另外,我建议您阅读这篇文章。从这篇文章中,我们需要从两个方面来解决电压尖峰问题:

从干扰源头降低噪音,从而降低电机
消除靠近芯片和其他敏感部件(例如复位引脚)的电源电压尖峰(关于 Arduino 上的后者,复位引脚似乎具有通过另一个电容器执行的自动复位机制,因此为了不造成干扰,我暂时避免添加这个电容器)
除此之外,由于电机在高PWM频率下运行,我们需要为设计选择低ESR(等效串联电阻)电容,而电容会充当这类尖峰的低阻电阻,并有效地将其短路至地。但请注意,所有电容都具有内置寄生效应,例如与电容串联的电阻和电导。因此,在高频下,即使电容电阻(更准确地说是阻抗)较低,由于其他寄生元件的影响,电阻也永远不会低于某个值,有时甚至会随着频率的增加而上升——这真是太疯狂了。

有些文章建议尽可能使用陶瓷电容,因为它们没有极性,寄生效应更少,因此效率更高,也能更好地滤除纹波。然而,陶瓷电容通常值较低,因此有时可以将钽电容与陶瓷电容并联使用。电解电容是万不得已才使用的。还要注意,不能总是盲目地选择一种电容——正确的选择取决于具体应用,例如,在音乐行业,不同类型的电容是首选,那些噪声更低、ESR 也不太重要的电容。

为了达到最佳效果,必须将盖子放置在尽可能靠近目标区域的位置。在本项目中,需要在以下区域添加盖子:

IMU 的 VCC 和 GND 之间需要 1 个 100nF 陶瓷电容。需要注意的是,本例中 MPU6050 模块已经内置了这些电容,如文档中所示。不过,额外添加一个电容也不会造成太大影响。
在 Arduino 的 5V 和 GND 之间并联 1 个 22uF 和 1 个 100nF 陶瓷电容。从BLE-Nano 原理图可以看出,5V 和 3.3V 电源轨只有 0.1uF 电容(位于两个不同稳压器的输出端),没有大电容。我们根本不会使用 3.3V 电源轨,因此这一条线路是可以的,但是我们仍然需要在 5V 和 GND 之间并联一个电容来提供稳定的电压。
电池针脚之间有100-300uF的钽电容。JLCPCB目前最大的钽电容是100uF,所以我会加上这个,不过它的价格有点高……除此之外,我还加了几个孔,以便以后需要时可以再加一个通孔电容。
模拟输入和 GND 之间有 1 x 100nF 陶瓷电容,用于测量电池电压,以提供更稳定的电池读数。
每个正极电机引脚和 GND(或无刷电机的电机控制器)之间有 4 x 22uF 陶瓷电容。
电机连接器之间使用 4 个 10nF 陶瓷电容,以消除电刷噪音,详情请见此处。他们使用的是 100nF 的电容,但更大的电容会产生额外的负载,并可能增加噪音,因此 10nF 更安全。需要注意的是,电容应该直接安装在电机引脚之间,但我们收到的电机无法做到这一点,因此必须将其放置在电机连接器的正对面。从此链接可以看到,如果没有这个电容,电机可能会导致电源纹波超过 3V,而增加一个电容后,纹波会降至 0.5V!
(目前没有)每个 Arduino RST(重置)引脚和 GND 之间有 2 x 100nF 陶瓷电容,以防这些电容不包含在所使用的 MCU 中。
请注意,所有电容必须尽可能靠近所需位置安装。不能简单地将它们全部放置在角落,因为在很多情况下,芯片可能不稳定,甚至根本无法工作。

总重量1g

二极管( JLCPCB组装)
我们需要在电机引脚之间安装一个续流(反激式)肖特基二极管,以便在关闭电机时提供电流路径,这也称为缓冲二极管配置。如果您不了解每种二极管类型之间的区别,请观看此视频。它与普通二极管的主要区别在于高开关频率能力(如果我们想要以更高的频率驱动电机,就需要它)以及由于电压势垒较低而导致的更低功耗。

每个电机都内置线圈,线圈产生的感生电场使电机旋转。然而,线圈储存的能量会阻碍电流的流动。当使用晶体管关闭电流时,反向电流需要一条路径来流动,否则这些高电流将产生巨大的电压尖峰。您可以在此处阅读更多内容。通常,对于高频应用,会放置一个简单的肖特基二极管来提供这条路径,我看到的所有四轴飞行器实现都是这样做的。然而,似乎存在更好的实现,即齐纳缓冲器的形式,它可以比简单的缓冲二极管配置更快地降低电流。您可以在此处阅读相关内容,但现在需要先进行实验,看看它是否能提供更好的性能。

选择合适的二极管有点棘手,网上有很多类似的讨论。最好从数据表中记下以下特性:

平均正向电流 - 理论上,电机开启时,电机线圈中的反向电流与电机电流(本例中为 2.75A)大小相同;电机关闭时,该电流会尝试寻找新的路径——通过二极管。因此,二极管应该能够承受 2.75A 的电流,但由于电流衰减速度较快,平均电流会较低。然而,随着驱动频率的提高,平均电流会随之增加,因为电流衰减的时间会缩短。因此,二极管的平均正向电流最好足够高,以支持电机的全部需求。通常,您可以选择平均电流与电机相同的二极管,以防万一。
最大重复峰值反向电压 - 当反向电流流过时,由于电机的电阻非常小,会产生一个电压尖峰。这个峰值将比驱动电机的电压高出几倍。在我们的情况下,这不是一个大问题,因为大多数二极管都能轻松承受这个额定值。
我建议使用SS系列肖特基二极管SS12-SS16(风险较高)、SS22-SS210(足够)或SS32-SS3200(安全),SS52-SS5200(过度保险)。请注意,这些二极管或多或少都遵循SS XY 的命名格式,其中数字 X 表示最大平均正向电流,数字 Y 乘以 10 表示最大直流阻断电压。不过,如果数字超过 2 个,则不再适用。JLCPCB 有售 SS14、SS210、SS34 和 SS54,因此我选择了 SS34,因为它比较安全,而且封装尺寸和价格都没有变化。还有其他一些型号可供选择,例如1N5819(风险较高侧)、1N5820-1N5822(安全侧),有SMD和通孔封装两种。

充电器
你可能已经有一个不错的充电器了,但如果没有,你也可以买个类似的东西。它使用 JST 类型的连接器,因此你必须自己准备前面提到的连接器。或者,你也可以买一个基于 TP4056 芯片的模块,自己焊接连接器。现在它们甚至还配备了 USB-C 连接器!这在以后的项目中可能也会派上用场,因为在这种情况下,芯片可以成为整个 PCB 的一部分。注意,其他流行的芯片是 TP4054 和 TP4057。

我非常想用 TP4057 设计一个板载充电器,这样就可以通过 Arduino USB 接口更换电池了,可惜 Nano 设计不太友好。正如我之前提到的,Particle Xenon、Feather nRF52840 Express 和 ESP 系列模块已经内置了电池充电器,因此它们可能是更好的选择。前两个模块还额外包含电池电量测量电路,也节省了一些空间。

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器

## 步骤3:可选组件

请注意,您无需焊接以下组件即可使四轴飞行器正常工作。如果您想添加一些额外的功能,例如能够使用滑动开关关闭四轴飞行器或添加一些 Neopixel LED,则可以添加这些组件。电路原理图和 PCB 的设计方式确保即使未安装这些组件也不会影响四轴飞行器的工作,因此您可以始终保持这些组件未焊接状态。

Neopixels(可选焊接)
我认为偶尔在夜间驾驶这架四轴飞行器会很酷(或者只是让它看起来更酷),因此我还添加了几个 Neopixels。这些是微小的 RGB(红/绿/蓝)LED 像素,内部集成了 PWM 控制器(因此可以调节亮度)。妙处在于,它们只需要连接到 Arduino 的一个或两个引脚(取决于所用的芯片类型),就可以控制串联连接的任何数量像素的几乎任何色调和亮度。另一个优点是,在设置了所需的颜色组合后,Arduino 不再需要与它们交互,因此处理能力可以用于某些事情,例如控制四轴飞行器。我认为一个好方法是总共有 4 个 Neopixels - 两个在底部,两个在顶部,每个方向一个。在黑暗中,这可以始终知道四轴飞行器的方向,从而简化控制。

有许多变体可供选择,并且可以在这里找到相当大的带有其规格的表格,关于哪些是最好的视频在这里。对于这个项目,我建议使用WS2812B(RGB)或SK6812(RGB + 白色)和 5050(5cm x 5cm)尺寸的 LED。3535(3.5cm x 3.5cm)尺寸也可用,但焊接起来更困难(因此在焊接时更容易损坏它们)并且在购买时更难找到。但请注意,这种尺寸有两种类型,一种是外部有引脚(Mini-HS),一种是底部有引脚(Mini)。如果手工焊接,我不建议使用后者。LED 需要 Arduino 的一个引脚来控制所有 LED。从数据表来看,每个 Neopixels 都需要一个外部 100nF 去耦电容。记住,从电容器部分可以知道,它们用于消除电源纹波。在这种情况下,我认为它们之所以出现在这里,是因为像素本身消耗的电流相当大——当红、绿、蓝LED以最大亮度打开时,每个像素可以消耗高达60mA的电流。此外,根据建议的指导,我们还需要在Arduino和第一个Neopixel的输入之间放置一个300到500欧姆的电阻,它必须靠近Neopixel放置。最后,在电源旁边放置一个大的去耦电容,但我们已经包含了一个,并且之前讨论过。

例如,可以从 Aliexpress 上从这里或这里或许多其他地方购买这些 neopixels。

电源软件控制(仅限 nRF52840)
上述像素的一个问题是 1mA 的静态(关闭)电流相当大。没有电源开关也可以,但是当电源关闭时,我们需要一种方法来关闭它们。这可以通过添加另一个 P-MOSFET 来实现,默认情况下它将处于关闭状态,但可以通过 Arduino 的一个引脚使用代码打开它。这可以通过使用上拉配置轻松实现,其中栅极通过 10k Ohm 电阻连接到源极,并且还通过 100 Ohm 电阻连接到 Arduino(减少浪涌电流)。我们可以使用另一个 P-MOSFET(一个用作反向电压保护)或使用具有双 P-MOSFET 的芯片,例如APM4953。我仍然会使用两个芯片,因为这样有更多的选择。最重要的是,我将创建两个独立的电源,一个为电机和 nRF52840 开发板供电,另一个可编程为其余传感器和 LED 供电。

高度传感器(可选焊接)
当仅使用IMU控制四轴飞行器时会出现两个棘手的问题:

能够悬停在恒定高度。通常,Z轴(垂直)的控制是通过增加或减少所有电机的期望速度来实现的,从而有效地增加偏移量。然而,由于飞行过程中电池电量耗尽,即使期望速度可能不会改变,电池电压也会下降,从而导致速度下降。
无需用户干预即可自动起飞和降落。此功能既可用于常规四轴飞行器控制,也可用于在电池耗尽时进行紧急降落。四轴飞行器落地后,此功能还可用于完全关闭电机。
这两个问题都可以通过所谓的高度传感器轻松解决。根据四轴飞行器的尺寸和类型,高度传感器的类型会有所不同:

气压计——气压会随着海拔高度的变化而变化,通过某些公式可以轻松计算出海拔高度的变化。然而,气压计更适合用于户外使用的无人机,因为它精度不够高。此外,气压会随时间(天气)变化,但这种变化较为平缓,因此除非是长途飞行,否则不会造成太大问题。
超声波传感器——这是目前为止最受欢迎的传感器。在Arduino社区中,可能每个人都已经非常了解它们了。它们利用超声波和TOF(飞行时间)算法来有效测量声音从传感器传播到物体并反射回来的时间。我不喜欢这些传感器,因为它们体积庞大,噪音很大,因此误报率很高,无法准确测量超过1米的距离,而且测量精度还取决于空气湿度。
激光传感器——我相信这是目前为止用于室内四轴飞行器的最佳传感器。它也基于TOF算法,但是它使用光而不是声音,光在空中的速度相当恒定。我已经有一个非常便宜的传感器VL53L0X ,其模块在Aliexpress上的售价不到1英镑,在Adafruit上也可以买到。它们体积小、重量轻、测距精度高、不受侧面反射影响,测距范围可达1米。它还指出,启用LONG_RANGE模式时可以测距2米,但在黑暗中效果最佳。一个缺点是它们无法区分0厘米和5厘米,因此当达到这个距离时,我们可以编程让四轴飞行器降落。另一个类似的传感器是VL6180X,但它更多地用于0-20厘米的短距离,并且还支持手势检测。这种传感器对于着陆/升降操作更有用。如果我们将两者结合起来会很棒,但即使只有其中之一也能让我们添加一些不错的功能。
我当然选择了后者。这两款芯片都使用 I2C 通信,因此我们不需要使用比现有引脚更多的引脚,因为 MPU6050 也使用 I2C。我使用了 VL53L0X,因为我已经有了。需要注意的是,我们需要一个去耦电容来保持传感器旁的电压更稳定。

电源开关(默认情况下未添加到原理图)
有时,通过某种滑动开关或按钮来控制芯片的运行效果会很不错。前者更容易实现,通常甚至不需要任何额外的元件。但请注意,这些开关的触点额定电流并不大。例如,MSS3-QT/R开关最高仅支持 25mA 电流,而我们的电路即使不启动电机,功耗也可能更大!

为了解决这个问题,我们可以设计一个与本产品所基于的电路非常相似的电路(点击此处)。原理图已作为图片添加到此处。唯一的区别在于,我们不需要使用外部BJT来控制开启的额外部分,因此可以移除该部分。我稍微重新设计了电路,并将其添加到一个单独的项目中,以备有人希望用此功能替换现有电路时使用。

更好的噪声过滤(默认情况下未添加到原理图)
我想到了一些关于如何过滤电压纹波电流的不同想法,以防即使添加了电容也会出现很大的噪音:

LC滤波器

还有一个想法是添加一个 LC 滤波器,如Crazyflie 2.1 原理图第 3 页所示(记下句子“过滤电源 73kHz”),因为这应该可以进一步消除电源纹波,但是,我看过一些视频,它证明了这一点,并且一些低 ESR 电容似乎比这更好用,因此现在我把它留在一个单独的项目中。

“电容倍增器”

这个电路实际上是一个有源低通滤波器,但它的实现方式非常巧妙。这个视频很好地解释了电路的工作原理。它通过添加一个电阻和一个BJT、达林顿对或N-MOSFET,将现有电容的电容值“增加”数百倍。当然,电容并没有增加,我们只是减少了流入电容的电流。我还没见过有人在四轴飞行器设计中使用这种电路,所以我不知道它的效果如何,但我认为,当需要为IMU供电提供非常稳定的电源电压,而又不需要添加任何大型电容时,这个电路值得考虑。此外,电阻可以用电感代替(参见上面的LC滤波器),因此,这或许是一个非常简洁的电路!


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器

## 步骤4:重量和价格计算

价格
想必很多人都想知道这玩意儿的价格。好吧,我们粗略地算一下,因为价格取决于供应商:
昂贵的电机:

4 英镑(BLE-Nano)+ 3 英镑(MPU6050)+ 20 英镑(电机)+ 3 英镑(电机电池)+ 2 英镑(螺旋桨)+ 2 英镑(MOSFET)+ 2 英镑(其余电子产品 + 塑料)+ 1 英镑(连接器)+ 3 英镑(充电器)= 40 英镑

廉价的 Hubsan X4 电机:

40英镑-15英镑=25英镑

我想说这是一个相当不错的价格,因为竞争产品的价格要高出好几倍!

昂贵的电机
为了让我们的四轴飞行器飞行顺畅,有一个经验法则:电机最大推力的50%应该等于四轴飞行器本身的重量。这意味着,当四轴飞行器以50%的最大推力飞行时,其高度将保持不变。我购买的电机每个推力电机重40克。总计160克。其中50%的推力就是80克。现在,让我们把所有电子设备和框架加起来:

15g(框架)+ 8g(PCB)+ 20g(电机)+ 12g(电池)+ 5g(微控制器)+ 2g(MPU)+ 5g(额外)= 67g

我们设法轻松地将其放入 80g 的范围内,因此四轴飞行器应该能够愉快地飞行。

廉价电机
假设每个电机的推力为34克,总重量为136克。其中50%的重量为68克。总组件重量大致相同,或许可以添加更小的电池,这样仍然能够满足50%推力的要求。它的飞行性能可能不如更快的电机,但没关系,你用的电机至少便宜4倍!


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器

## 步骤5:将系统连接在一起

设计PCB时必须小心谨慎,因为这将直接影响电路的性能。每个模块和芯片都必须连接到nano的正确输入端。

电机控制PWM
电机控制 MOSFET 将使用 PWM 信号进行控制。nano 共有 6 个引脚,其中 3、5、6、9、10、11 号引脚内置了硬件 PWM。本项目只需要 4 个引脚,但实际上,为了简化开发,只有 4 个“正确”的引脚可用。PWM 使用专用定时器来设置 PWM 频率,而 nano 有 3 个这样的定时器,它们使用的默认频率略有不同(但可以修改)。我强烈建议您查看定时器 PWM 备忘单,因为我接下来的假设将基于它。没错,所以定时器 0(默认 976Hz)用于引脚 5 和 6,定时器 1(默认 490Hz)用于引脚 9 和 10,定时器 2(默认 490Hz)用于引脚 3 和 11。为了获得最佳性能,所有电机的 PWM 频率必须相同,因为推力与频率相关,正如本视频所示。由于定时器 0 也用于函数 delay 和 millis(),我们不想更改其频率,因为这会影响这两个函数。我们必须调整代码,甚至可能需要更改依赖于这两个函数的库。因此,这给了我们两个选择:

使用引脚 3、5、6 和 11,保持定时器 0 的默认频率为 976Hz,然后升级定时器 2 以向我们提供 980Hz 的频率。
使用引脚 3、9、10 和 11,并保持默认频率 490Hz 或将定时器 1 和 2 都升级到 3921Hz。
我不知道这里的最佳选择是什么,而且从一些资料来看,实际值似乎并不那么重要,但是正如论坛中讨论的那样,更高的频率会带来更平滑的响应和更低的噪音。因此,我将选择选项二,并将频率提升到 3921Hz。另一个不错的论坛讨论了定时器如何影响以及如何修改定时器以产生不同的 PWM 频率。

不过需要注意的是,也可以使用基于软件的PWM,也​​称为Bit Banging(可在此处阅读更多信息),但代码管理起来会更加复杂,因为必须小心谨慎,以免影响时序——如果可能的话,我强烈建议不要这样做。另外,如果您想使用RF-Nano芯片,从原理图上我们可以看到,引脚9、10、11、12和13已经用于与nRF24L01芯片通信,因此在本项目中使用它的唯一可能性是使用外部PWM芯片或使用Bit Banging。

鼻子
使用的IMU MPU6050通过I2C进行通信,为了让库正常工作,我决定继续使用默认的A4(SDA)和A5(SCL)引脚。我会连接中断引脚,以备将来需要。Nano仅支持引脚2和3的中断,具体见此处。因此,我将使用引脚2,因为引脚3是PWM,它可以用于其他用途,例如LED闪烁!我在这里找到了另一个使用相同配置的项目。

为Arduino供电
从BLE-Nano 原理图可以看出,连接电池的最佳位置是直接连接到 5V 引脚。我们不能将它连接到 Vin,因为它需要的电压大于 5V,否则稳压器会导致电压下降,非常严重。我们也不能将它连接到 3.3V,因为 Arduino 本身是由 5V 线路供电,而不是 3.3V 线路,这样 Arduino 就根本得不到供电。

尽管 Arduino Nano 的供电芯片 ( ATmega328 ) 可以在 1.8 至 5.5V 的电压范围内工作,但它内置了某些保护措施,以防止其在过低电压下运行。芯片停止工作前的最低可接受电压称为掉电电压。在 Arduino 上,该电压设置为 2.7V。在我们的项目中,电压可能会在接近该电压的短时间内(几毫秒)下降,这可能会导致 Nano 重启。为了防止这种情况发生,我可能需要将掉电电压设置为 1.8V,具体操作请参见此评论。

电池电量检测器
如前所述,我们将构建一个分压器来测量电池电压。分压器的输入将进入模拟引脚 A0,并在软件中设置内部参考电压。

Neopixels(可选)
第一个 Neopixel 的输入将连接到 Arduino 引脚号 5,但它也可以连接到任何其他未使用的引脚。


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器

## 步骤6:电路原理图

我在这里添加了几年前制作的旧设置的旧“原理图”,但是如果将它们与新电路进行比较,您就会发现错误所在(哎呀)。我最新的纳米四轴飞行器设计可以在 EasyEDA 上找到,您可以直接使用,也可以根据需要更改设计和/或 PCB。为了方便理解,我还为每个模块添加了说明。请注意,如果您有任何不明白的地方,可以随时参考“电子元件”或“系统布线”步骤,因为我已确保提供足够的信息来解释电路的每个部分。

在 Nano 四轴飞行器的基础上,我还添加了nRF52840 四轴飞行器的原理图,它可以与 Particle Xenon 或 Adafruit Feather nRF52840 Express 开发板兼容。由于这些开发板本身就包含许多模块,例如用于添加电源开关的使能引脚、电池电量检测器以及带有电池连接器的电池充电电路,因此设计起来更加容易。此外,这些模块速度更快,几乎所有引脚都支持 PWM,并且可以使用 Circuitpython 或 Micropython 进行编程!


【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图3

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图2

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图1

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图4

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器

## 步骤7:PCB和焊接

我建议从JLCPCB订购 PCB ,可以直接从 EasyEDA 订购。10 块 PCB 的价格仅为 2 美元,这真的微不足道。现在我住在西班牙,送货到西班牙的费用约为 10 美元,因此还算划算,尽管我可能只需要一块 PCB……除此之外,您还可以选择预先焊接 SMD 组件的选项,但需要支付一点额外费用。我选择了 JLCPCB 组装基本 SMT 类型库中提供的此类组件,以将其作为选项。来自扩展库的唯一 SMD 部件是 LED WS2812B,但是没有它并不会阻止四轴飞行器飞行!您也可以从 Aliexpress 以便宜的价格订购它们。

组件尺寸
我现在设计的PCB将使用806尺寸的SMD元件。这些设置足以手工焊接PCB。不过,您可以根据自己的喜好重新设计PCB。我甚至可能提供用于通孔元件的PCB,不过安装起来会更加复杂。

轨道设计
由于运行电机需要很大的电流,因此运行电机的轨道必须精心设计:

所有电源线都不应有过孔,这是为了减少电线电阻,从而减少电线上的电压降。
导线的厚度必须在 50 mil 左右,但这取决于您选择的铜层厚度。您可以使用在线线宽计算器来计算。
在已经准备好的PCB上焊接所有元件要容易得多。可惜的是,很难找到制作PCB的机器。我们大学有一台机器,所以我用Target 3001!软件设计了一个PCB。要打开*.T3001文件,你需要下载Target 3001软件,可惜的是,它只兼容Windows系统。我可能会稍后将项目导出到Eagle。对于那些打算在家制作PCB的人来说,我添加了Target3001、.xps、.tif和.src(导出到Eagle)。

地面分离
请注意,将电机和其他传感器的接地线分开可能是个好主意,因为这样电机产生的噪声就不会影响传感器,正如这里讨论的那样。然而,使用 easyEDA PCB 编辑器做到这一点并不容易,因为我尝试过,但出现了间隙错误。因此,目前我只是把这个想法放在心里,以备将来四轴飞行器飞行失败时使用……

打印和焊接的结果如图所示。我添加了红色圆圈表示焊接的晶体管,黄色圆圈表示电机的 JST 连接器,绿色圆圈表示电池连接器,仅为电机供电,蓝色圆圈表示电池连接器,为其余电子设备(Arduino、MPU6050 等)供电。如您所见,两个电源连接器旁边都有一些修复。您不需要这样做,因为 PCB 在制作第一个工作模型后已更新。基本上,问题在于 PCB 最初只有一个电源。在测试过程中,随着电池电压降至低水平(<3V),蓝牙模块似乎不断与手机断开连接。不仅如此,Arduino 也遇到了这个问题,通过降低掉电电压解决了这个问题。您可以轻松地自己做到这一点,因为它只需要修改 Arduino IDE 中的一个文件,但是这更像是一种 hack,因为频率越高,所需的电压就越高。最后,将来可能会有其他东西损坏,或者您可能会失去所有可用电源等。无论如何,实施双电池系统效果很好,特别是为电子设备供电的电池重量仅为 3 克左右。

焊接电机连接器时,务必确保焊接方向正确!连接器的两侧,一个朝向一个方向,另一个朝向另一个方向。必须确保引脚 1 始终连接在同一侧。我认为最好先将所有连接器都安装好,然后反复检查 3 次,再进行焊接。

注意,我卖的电池连接器标了个“加号”,是为了确保你不会接错。我实际上可能会加个电池保护装置……需要仔细研究一下!

未来考虑
将来我可能会完全放弃3D打印部件,将所有组件都放在PCB板上。这样可以显著减轻重量,但可能会增加湍流和振动,因此必须小心避免这些问题,比如将PCB厚度设置为最大厚度。不仅如此,还需要想办法将电机牢固地固定在PCB上。

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图1

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图2

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图3

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图4


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器

## 步骤8:软件

很久以前,我用 mbed 为四轴飞行器编写了一个库和一个示例程序,你可以在这里找到。当时我并不完全理解 PID 在四轴飞行器上的工作原理。为了开发这个软件,我参考了一些现有的项目,例如

设置
因为我并不讨厌自己,所以我决定使用安装了PlatformIO插件的Visual Studio Code编辑器来编写四轴飞行器程序。安装设置时,我只需遵循本指南即可。

读取电池电压
Arduino 默认使用其电源作为电压参考来进行模拟测量。如果我们不更改此设置,读取电池电压时,电压将始终保持不变,因为随着电池放电,电源电压会逐渐降低。为了解决这个问题,我们需要使用间隔电压参考。正如之前在 Atmega328 上讨论的那样,这相当于 ±1.1V。读取实际电池值并将其打印到串口的代码如下:

  1. // Compensation factor, which is inverse of VBAT = (150k / (150k + 150k))
  2. #define VBAT_DIVIDER_COMP ((33.0 + 100.0) / 33.0)
  3. // Interval voltage reference of 1.1V in mV
  4. #define BATTERY_VOLTAGE_REFERENCE_VALUE 1100
  5. // 10-bit resolution gives 1023 steps
  6. #define RESOLUTION_STEPS 1023
  7. // Combine together from a formula
  8. #define REAL_BATTERY_MV_PER_LSB (VBAT_DIVIDER_COMP * BATTERY_VOLTAGE_REFERENCE_VALUE / RESOLUTION_STEPS)
  9. #define BATTERY_PIN A0
  10. void setup () {
  11.     // Set internal 1.1V voltage reference
  12.     analogReference(INTERNAL);
  13.     Serial.begin(115200);
  14. }
  15. void loop () {
  16.     Serial.println(analogRead(BATTERY_PIN) * REAL_BATTERY_MV_PER_LSB);
  17. }
复制代码


MPU6050
MPU6050 库由 Jeff Rowberg 于 2012 年提供。提供的示例代码 MPU6050_DMP6 用作该项目的主要代码。

稳定电机
在控制系统中,PID 控制器是一种非常常用的稳定系统的方法。在这里,我们需要稳定 MPU6050 的俯仰和滚转。我使用了PID_v1库来实现这个目的。在下面的代码中,我将设置两个电机和 PID 控制器。然后,我将添加一个函数,根据所需的速度来稳定电机。

  1. #define FL_MOTOR 3
  2. #define FR_MOTOR 9
  3. #define BR_MOTOR 10
  4. #define BL_MOTOR 11
  5. //---------------------------------PID------------------------------------
  6. //Define Variables we'll be connecting to
  7. double rollSetpoint, rollInput, rollOutput;
  8. double pitchSetpoint, pitchInput, pitchOutput;
  9. //Define the aggressive and conservative Tuning Parameters<br>double consKp = 1, consKi = 0.05, consKd = 0.25;
  10. PID pitchPID(&rollInput, &rollOutput, &rollSetpoint, consKp, consKi, consKd, DIRECT);
  11. PID rollPID(&pitchInput, &pitchOutput, &pitchSetpoint, consKp, consKi, consKd, DIRECT);
  12. void setup() {
  13. //------------------------------PID----------------------------------
  14.   pitchInput = 0.0;
  15.   rollInput = 0.0;  
  16.   pitchSetpoint = 0.0;
  17.   rollSetpoint = 0.0;
  18.   //turn the PID on
  19.   pitchPID.SetMode(AUTOMATIC);
  20.   rollPID.SetMode(AUTOMATIC);
  21.   pitchPID.SetOutputLimits(-20, 20);
  22.   rollPID.SetOutputLimits(-20, 20);
  23.   //-------------------------------------------------------------------
  24.   for (int i = 0; i < 4; i++) {
  25.     targetSpeed[i] = 0;
  26.   }
  27.   pinMode(FL_MOTOR, OUTPUT);
  28.   pinMode(FR_MOTOR, OUTPUT);
  29.   pinMode(BR_MOTOR, OUTPUT);
  30.   pinMode(BL_MOTOR, OUTPUT);
  31. void loop() {
  32.   pitchPID.Compute();
  33.   rollPID.Compute();
  34.   int actSpeed[4];
  35.   stabilise (targetSpeed, actSpeed, rollOutput, pitchOutput);
  36.   //    targetSpeed = actSpeed; // should this be here or not
  37. }
  38. void stabilise (int* currSpeed, int* actSpeed, float rollDiff, float pitchDiff) {
  39.   //actual Speed is calculated as follows +- half rollDiff +- half pitchDiff
  40.   actSpeed[0] = (int) currSpeed[0] + (rollDiff / 2) - (pitchDiff / 2);
  41.   actSpeed[1] = (int) currSpeed[1] + (rollDiff / 2) + (pitchDiff / 2);
  42.   actSpeed[2] = (int) currSpeed[2] - (rollDiff / 2) + (pitchDiff / 2);
  43.   actSpeed[3] = (int) currSpeed[3] - (rollDiff / 2) - (pitchDiff / 2);
  44.   for (int i = 0; i < 4; i ++) {
  45.     if (actSpeed[i] < 0) actSpeed[i] = 0;  
  46.   }
  47. }
  48. void runIndividual (int* actSpeed) {
  49.   analogWrite(FL_MOTOR, actSpeed[0]);
  50.   analogWrite(FR_MOTOR, actSpeed[1]);
  51.   analogWrite(BR_MOTOR, actSpeed[2]);
  52.   analogWrite(BL_MOTOR, actSpeed[3]);
  53. }
复制代码


BLE连接
BLE(低功耗蓝牙)是一种与旧版蓝牙 2.0 完全不同的通信协议。它无需消耗大量电量来维持与主机设备的连接,而是发送脉冲串。每次脉冲串的电流可能达到 20-40mA,但持续时间很短,每秒仅发送几次。平均而言,功耗接近亚毫安级!

四轴飞行器与手机的通信将通过BLE-Nano内置的 BLE 模块完成。Nano 通过内置的串行接口 TX 和 RX 引脚连接到 BLE 芯片。当然,如果您想与 PC 通信,这会让操作稍微困难一些,不过我很少需要连接到 PC。以下是一个通过 BLE UART 服务接收整数并进行回显的示例:

  1. void setup() {
  2.     mySerial.begin(115200);
  3. }
  4. void loop () {
  5.     if (mySerial.available()) {
  6.         int reading = mySerial.parseInt();
  7.         //flushing anything that wasn't read
  8.         while (mySerial.available()) {
  9.             mySerial.read();
  10.         }
  11.         // Echo the integer back
  12.         Serial.println(reading);
  13.     }
  14. }
复制代码


将位加在一起

至于完整的代码,我一直在努力完善,所以决定不在这里全部放出来。你可以在GitHub上找到最新版本的代码。代码完成后,我会在这个 Instructable 中通知你。目前我需要设置正确的 PID 常数等等……

Neopixels(可选)
有几个库可用:
阿达果
WS2812B
FastLED - 它旨在控制不同类型的 RGB LED 灯带,因此如果将来使用其他类型的 LED 灯带,此库可以轻松实现所有更改。缺点是会增加内存占用。

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 天前

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器

附录
【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器
项目链接:https://www.instructables.com/Arduino-micro-Quadcopter/
项目作者:蒙维达斯·克鲁姆比斯
项目视频:https://www.youtube.com/watch?v=ILmSi4WMGPY&t=2s
项目代码:https://os.mbed.com/users/moklumbys/code/QuadcopterProgram/
3D 文件:https://www.thingiverse.com/thing:1084921

【Arduino 动手做】3D打印 Arduino Nano 微型四轴飞行器图1

MONTE QuadCopter (8.5 mm) - 1084921.zip

7.5 MB, 下载次数: 31

QuadcopterProgram-588b1618c710.zip

4.14 KB, 下载次数: 27

附件.zip

118.07 KB, 下载次数: 25

回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail