本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于FlexIO的多旋翼控制器

发布时间:2022-06-17
分享到:

基于FlexIO的多旋翼控制器

发布时间:2022-06-17
分享到:

在建筑工作、土木工程、工厂维护和摄影中,一些有趣的商业应用涉及飞行物体的检查,以至于螺旋桨叶片撞击相同或另一个物体的风险很小。同时如果没有非常快速的响应,可能会损坏物体、螺旋桨、电机驱动机构和电机驱动电子设备。在配备精密相机和仪器的大型无人机中,成本很容易超过 8000 到 10,000 美元。我们希望避免损坏被检查的财产,并防止对无人机造成轻微损坏。为了达到这些目的,需要一种检测螺旋桨与任何物体的轻微摩擦的方法。为此,需要监控多旋翼的所有旋翼。这种监控创造了在螺旋桨与物体接触的一开始就迅速采取自主行动的能力。预计可以实施具有比典型操作员反应时间快得多的响应时间的自主响应策略。

Flex IO

Flex IO 用于实时监控多旋翼螺旋桨的速度,为安全、速度控制和系统性能监控提供所需的实时反馈。该演示是对基于 Kinetis SDK 的 SCI 实现的重新打包,是使用 Processor Expert 和 Kinetis SDK 开发的。

项目成果

多直升机的建造是项目目标的后期补充。由于该项目的监控方面需要知道命令的螺旋桨速度,因此实施速度控制回路似乎是正确的。一旦决定对速度控制回路进行编码,那么多旋翼的构建似乎几乎是不可抗拒的。

最快的方法是构建一个 12 转子多旋翼飞行器,使用四旋翼飞行器并在其上添加一个额外的框架来容纳 FRDM-K82F、8 个直流电机、光学传感器以及额外的电机驱动和信号调节电子设备。

四轴飞行器对框架进行飞行控制。调整框架的 8 个直流电机以保持恒定速度以提升框架的额外重量。四轴飞行器转子速度的变化保持了框架的姿态控制。

8旋翼速度控制

一个非常简单的控制方案用于将 PWM 信号输出到达林顿功率级。虽然最初的重点是无刷电机,但我已经购买了两个碰撞套件中的小型有刷直流电机。

螺旋桨叶片检测可能用于估计无刷电机的换向点。

螺旋桨减速检测

实现了一个非常简单的减速检测。

使用 Processor Expert 和 Kinetis SDK 可以非常快速地对该系统进行原型设计。

软件环境

Kinetis Design Studio,使用带有处理器专家的 KSDK 1.3

构建注意事项

这个项目确实开始很简单,作为检测不良转子情况的一种手段,但人们总是会疑惑,“它真的能飞吗?” 因此,进行多直升机构建是不可抗拒的。这是“把钱放在嘴边”的问题,所以我可以说“是的,它会飞!”

一切要从闪烁的 LED 开始。

我总是尝试先从简单但需要的部分开始。打印“Hello World!” 在调试串行输出和闪烁绿色 LED 给我们一个很好的感觉。我们真的需要一个精确的一秒中断来做时间戳,所以这真的很重要。调试串行输出已被证明在调试此应用程序时非常有用。项目开发点将作为完整的项目存储在 GitHub 上。这样,那些对处理器专家或软件开发的其他方面非常感兴趣的人可以检查任何开发点。

根据要求,将提供压缩存档的链接,以便轻松将项目导入 Kinetis Design Studio。

什么是时间戳,它对多旋翼控制有何帮助?

软件中的时间戳为 10 微秒分辨率。时间“增量”时间戳的差异也是 10 微秒的分辨率。该项目的主要目标是跟踪螺旋桨速度,控制螺旋桨速度,并即时通知任何未能保持命令螺旋桨速度的情况。光学传感器用于检测螺旋桨和每个经过的螺旋桨叶片测量的“delta”时间戳,这是实现项目目标的手段。

Processor Expert FlexIO SCI RX 组件

Processor Expert 帮助提供了 8 个 RX only SCI 通道。在未来的开发中,该组件将被修改为接收 32 位数据,通过降低中断服务事件的频率来改进应用程序。在 32 位模式下,将调整“波特”率,以便使用中断程序跟踪叶片的一转,而不是跟踪螺旋桨半转的当前实现。在每个中断事件跟踪 2 整圈的情况下,也可以进一步降低中断服务频率。这些更高级实现中的刀片活动可以在 FlexIO 32 位串行数据移位器收集的 32 位串行数据中进行检查。这将验证“波特率”设置是否正确或建议调整“波特率”。

检测螺旋桨

非常便宜的红外光电二极管发射器和光电晶体管对用于检测螺旋桨旋转。一个简单的运算放大器电路用于为 FRDM-K82F 创建逻辑电平转速计信号。示例电路用于监控一个螺旋桨的通道,并为 8 个螺旋桨复制。运放同相端的电容 C1 通过一个 100K 欧姆的电阻充电。电容器上的电压是过去一秒左右时间内反相端子上信号的平均值。从反相端子到放大器输出的红外传感器信号增益约为 50。输出端有一个电阻网络,以确保输出保持 0 至 3.3 伏以输入到 FRDM-K82F,以避免损坏输入电压超出适当的输入限制。电路的输出,缩放来自 10x 示波器探头。

达林顿功率放大器级

以下电路是 PWM 驱动器的一个通道示例,用于驱动直流电机。晶体管是我手头的类型,可能不是最佳的,例如,驱动能力比使用的小型直流电机可能需要的要大。该电路被复制以驱动 8 个直流电机。

什么是 PWM 软件触发?

花了一点时间才知道需要调用软件触发函数来更新 PWM 占空比。当然,如果不调用软件触发函数,PWM 占空比将不会更新,这在您尝试控制螺旋桨速度时会令人失望。

//软件触发PWM输出变化

FTM_HAL_SetSoftwareTriggerCmd(g_ftmBase[flexTimer1_IDX], true);

FTM_HAL_SetChnCountVal(ftmBase, 0, pwm_duty_cycle[0]);

芯片上的 Flex 定时器模块在通道 6 上没有可用的 I/O 引脚。因此初始化了一个 TPM 通道来填补这个空白。PWM 频率为 25 kHz。我发现使用较低级别的 HAL 函数来访问 PWM 占空比中可用的完整分辨率很有用。因此,Flex Timer 模块和附加的 TPM 通道提供了控制 8 个直流电机所需的 8 个 PWM 通道。

检测螺旋桨撞击

此代码片段来自速度控制循环,每秒执行 20 次。这是一种非常简单的技术来检测停止或失速的螺旋桨。将来可能会使用更敏感的方案,但这足以用于演示目的。注释掉的代码是用于切断故障转子电源的选项,此时不使用。

if(inst_rpm[i]< (target_rpm[i]/2)){
    fail_count[i]++;
    if(fail_count[i]>10) rotor_fail[i] = true;
    // take needed action on rotor failure(s)
    //if(pwm_duty_cycle[i]>0)pwm_duty_cycle[i]--;
            }else{
    rotor_fail[i] = false;
    fail_count[i] = 0;
}

后台处理循环中的调试打印,检测到转子故障错误条件并打印有关该条件的警告。

if(sec_tick_byte){
         sec_tick_byte = false;
         GPIO_DRV_TogglePinOutput(LEDRGB_GREEN);
         for(dbg_loop=0;dbg_loop
             debug_printf("Rotor #%d rpm =  %d   PWM CMD = %d \r\n",dbg_loop+1,inst_rpm[dbg_loop],pwm_duty_cycle[dbg_loop]);
         }
         if(rotor_fail[0]) debug_printf("Rotor #1 FAILURE!!!\r\n");
     }

FRDM-K82F 接线名称

通道转速计输入 PWM 输出

0 J4-2 J4-6

1 J4-4 J4-8

2 J4-12 J1-1

3 J4-10 J24-4

4 J12-16 J2-6

5 J12-15 J22-5

6 J12-14 J1-5

7 J12-13 J22-7

实验

原始配置增加了 8 个电机,总共 12 个电机,包括 Hubsan 四轴飞行器,实在是太重了!电机需要以超过 25000 RPM 的速度旋转才能实现飞行。有两种选择:1)减轻框架和电子设备总重量的原始配置或 2)通过添加更大的电机来增加推力。选择了选项 2),因为我喜欢框架的大小和强度,我讨厌削弱框架的想法。我已经从另一个项目中获得了电机。

进一步测试

进一步的测试表明,当旋翼速度缓慢增加时,多旋翼有倾覆的趋势。没有限制的飞行的唯一选择是快速增加旋翼的速度,跳出地面。快速加速旋翼的想法被放弃了,因为我想要不止一次的试飞!

限制飞行路径

在垂直起落架部件的侧面放置一根塑料管,并使用该管在拉伸的绳索上滑动,提供所需的受限飞行路径。多旋翼绕着拉长的绳索自由旋转,管子上下滑动。因此,可以进一步研究悬停和稳定飞行的其他方面,以对多旋翼和试飞员更安全的方式。弹力绳为拉伸的绳索提供张力。

一个按钮限制了多旋翼的向上行程,以防止天花板坠毁。第二条弹性伸缩绳使向上移动的限制成为软限制,而不是可能损坏多旋翼的硬限制。最后,增加了一个泡沫垫,让多旋翼飞机可以降落在上面。

未来的展望

更复杂的控制方案将在以后的实现中出现。我可能会尝试的一个方案是添加电子设备来测量四轴飞行器的转子速度,并将四轴飞行器转子的螺旋桨速度复制到框架中最近的螺旋桨对。这样,将产生更机动的多旋翼。其他可能性包括使用更大的无刷电机制造更大的原型。

当前设计中需要改进的东西

如果小型电机以大功率运行,则可能会干扰 Hubsan QuadCopter 与其无线电控制发射器的配对。改善布线布局和/或使用无刷电机将有助于防止干扰问题。

一些建议:

1)工作安全!

  • 将螺旋桨视为旋转锯片!
  • 在测试时使用某种形式的眼睛保护装置!
  • 在尝试任何飞行之前解决任何已知问题!任何问题都会在空中变得更糟!
  • 不要工作累了,或者当你以任何方式分心时!
  • 测试时要注意好奇的旁观者或宠物!
  • 永远不要单独测试!总是有一个助手站在附近!

2) 次要细节

将螺旋桨涂成黑色有助于防止错误的反射红外光信号到达光电晶体管。这会在螺旋桨的测量速度中产生噪音。

项目结论

该项目为学习 FlexIO 模块、处理器专家、Kinetis SDK 以及如何构建和测试多直升机提供了丰富的机会。

本文中所用到的一些代码

如果您对此项目有任何想法、意见或问题,请在下方留言。

以上内容翻译自网络,原作者:,如涉及侵权,可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论