BetaFlight代码解析(13)—脉宽调制和电机控制

BetaFlight开源飞控源码分析 BetaFlight是穿越机领域比较成熟的开源飞控,本篇文章主要分析一下源代码以及如何使用这个开源代码 阅读详情

目的和范围

本文档介绍了Betaflight中的PWM(脉冲宽度调制)输出系统,该系统负责生成驱动电机和舵机的控制信号。该系统为基于定时器的PWM生成、电机端点计算和电机协议支持提供了硬件抽象。

PWM输出架构

PWM 输出系统围绕硬件抽象层构建,该抽象层管理定时器通道,并为电机控制提供统一的接口,而无需考虑底层电机协议。

核心数据结构封装pwmOutputPort_t了定时器硬件接口和将电机值转换为 PWM 脉冲宽度所需的缩放参数。

电机配置和终点

电机终点计算系统负责处理归一化电机值和 PWM 脉冲宽度之间的转换,支持标准飞行模式和 3D 飞行配置。

配置类型参数目的
标准航班mincommand,,maxthrottle​motorIdle正常前飞电机范围
3D飞行neutral3d,,,limit3d_low​limit3d_high​deadband3d_*双向电机控制
输出限制outputLimit标尺最大电机输出

该analogInitEndpoints函数根据电机配置以及是否启用3D飞行模式来计算PWM脉冲宽度范围。在3D模式下,电机可以沿两个方向旋转,并具有中立中心点和死区以防止电机发生意外运动。

电机控制接口

PWM 输出系统提供了一组用于电机管理和状态查询的接口功能。

这些函数提供了对电机配置和状态信息的安全访问。边界检查机制pwmGetMotorIO可防止在请求无效电机索引时发生数组访问冲突。

硬件定时器集成

PWM 输出系统通过timerChannel_t结构和定时器配置功能与硬件定时器子系统集成。

成分类型目的
ccrvolatile timCCR_t *定时器捕获/比较寄存器指针
timTIM_TypeDef *定时器外围设备实例
pulseScalefloat脉冲宽度计算的比例因子
pulseOffsetfloat脉冲定时偏移值
forceOverflowbool定时器溢出控制标志

该pwmOutConfig函数配置用于 PWM 输出的定时器通道,并指定其频率、周期和初始脉冲宽度值。该motorPwmDevInit函数初始化电机设备子系统,并建立电机配置与 PWM 硬件之间的连接。

伺服支撑集成

PWM 输出系统还通过单独的配置结构和初始化路径提供伺服控制功能。

伺服控制使用相同的底层定时器硬件,但定时参数不同。伺服电机通常以 50-498Hz 的更新频率和 1000-2000μs 的脉冲宽度运行,而电机则使用更高频率的协议。

(一~)Betaflight开源AT32飞控Makefile详解 AT32国产飞控最近比较火,佬儿出了一些关于BF飞控移植的文章,但不太详细。这里记录了本人学习BF飞控时关于Makefile部分的总结,留待参照。 阅读详情

相关推荐

BetaFlight源码解读01

【代码】BetaFlight源码解读01。

iyy123IUU的博客 691

BetaFlight开源代码框架简介

框架设计重点要做到各切分模块的业务融合,分析的主要考量点:C语言工程代码函数入口为main,之前启动及C环境初始化代码不做介绍,启动文件代码文件(lib\main\STM32H7\Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\arm\startup_stm32h745xx.s)。业务逻辑方面主要是从main来分析框架代码,这里也不会对HAL(Hardware Adapter Layer)做分析,对底层感兴趣的朋友可以从STM官网或者其他网站得到更多的S

lida2003的专栏 1万+

SBUS协议解析与应用:从帧结构到机器人控制的完整指南

串行通信协议是嵌入式系统和机器人控制中实现设备间数据交换的基础技术,其核心原理在于通过特定的数据帧格式和时序规则,在单根或多根信号线上可靠传输信息。在实时控制领域,协议的设计需兼顾高通道数、低延迟与强抗干扰能力,以满足航模、无人机及机器人对指令传输的苛刻要求。SBUS协议正是针对这一需求而生的专用串行总线标准,它采用反向电平和固定帧结构,通过单线传输多达16个数字通道的PWM信号,显著简化了多执行器系统的布线复杂度。该协议内置帧丢失与故障保护机制,结合偶校验和连续传输模式,确保了在强干扰环境下的控制可靠性。

weixin_30430169的博客 351

Betaflight PID 相关源代码解析

/task.c。

邮箱:sadalmelikj@outlook.com 1425

电调协议性能对决:从实验室数据看DShot600的实战优势

本文深入分析了DShot600电调协议在穿越机竞速中的性能优势,通过实验室数据和实战测试对比DShot600与PWM、OneShot125的响应速度和稳定性。结果显示,DShot600凭借数字信号传输机制,显著降低延迟和轨迹偏差,成为竞速无人机的首选协议。文章还提供了硬件配置和调参建议,助力飞手提升性能。

weixin_29304021的博客 997

Betaflight开源飞控系统——代码架构与任务调度系统初探以及视频字符叠加OSD源码详细实战分析

Betaflight开源飞控系统采用模块化架构设计,核心包含硬件抽象层、传感器处理层、飞行控制层和用户接口层。系统采用基于时间片的任务调度机制,将任务分为高、中、低三个优先级等级,其中高优先级任务(如传感器数据采集)执行周期最短(1.25ms),中等优先级任务(如PID控制)周期为2.5ms,低优先级任务(如OSD更新)周期为20ms。OSD系统AT7456E等芯片,提供电池电压、姿态角、GPS等信息的实时显示,并允许通过CLI和配置菜单进行自定义布局设置。系统通过任务调度优化、显示按需更新和硬件接口优化等

bother3000的博客 3161

从模拟到数字:穿越机电调协议演进与实战选型指南

本文深入解析了穿越机电调协议从模拟PWM、OneShot到数字DShot的演进历程。通过对比延迟、抗干扰性与易用性,指出DShot协议凭借其数字编码、免校准和强抗干扰能力,已成为现代穿越机的主流选择。文章还提供了基于不同飞行风格与硬件的实战选型指南,帮助飞手做出最佳决策。

weixin_29221753的博客 430

BetaFlight代码解析(1)- 概览

本文概述了开源飞行控制器固件Betaflight的系统架构和功能特性。该固件采用模块化设计,支持多旋翼和固定翼飞行器,兼容STM32系列处理器。核心功能包括运动控制、传感器集成、通信系统和用户界面,采用GPLv3许可证。项目采用年度双版本发布周期,支持统一目标配置和持续集成开发流程,要求开发者遵循严格的贡献规范。用户可通过配置工具和社群支持快速入门。

rainercool的专栏 1360

BetaFlight开源工程结构简明介绍

BetaFlight是穿越机比较成熟的飞控OpenSouce。这里有一点需要注意的是BetaFlight官网只是提供开源软件工程,任何相关穿越机硬件的生产制造都不是BetaFlight提供。当然开源飞控代码并非BetaFlight一家,这里提供一张开源飞控代码历史发展图,可以给大家一个更直观的了解。有兴趣的朋友可以点开链接,以便有更多信息(当然这个是youtube的,国内不知道哪里有这个视频链接,VPN还是需要的,否则无法打开)。 因为,之前DIY四轴飞控调试起飞用的就是这套代码,所以这里深入一下开源工程结

lida2003的专栏 9871

Betaflight_10.7.0

Betaflight是一个开发源代码的飞行控制软件,可向所有用户免费提供。 Betaflight是由BorisB启动的Cleanflight分支项目。它曾经被用作Cleanflight的beta平台,并不断提高性能,但最终它被各种开发人员发展成为完全成熟、稳定且维护良好的固件。实际上,根据2017年1月左右的趋势分析,它已是开源固件排行榜的第一名。

betaflight, 开源飞行控制器固件.zip

betaflight, 开源飞行控制器固件 Betaflight是飞行控制器软件( 固件),用于飞机多转子工艺和固定翼工艺。这个 fork 与Baseflight和Cleanflight不同,因为它关注于飞行性能。前沿特性增加和广泛的目标支持。事件日期事件

BetaFlight开源代码之电流校准

好了,不在多说,很多或者说大部分能力是可以通过后天学习、锻炼的,当然确实有一些“第六感”很难说清楚,有人会说“天生”的。先做一个常规逻辑/常用概念,老外比较喜欢说"common sense”,因为没有这个概念的人,沟通工程技术问题是很难的,因为没有"common sense"。如果您确实对电流不准的问题非常在意,希望通过校准来确保显示的数据正确,那么需要准备万用表,串接到电源上,进行测试。那么,恭喜您,第一步就是复现客户现象,并整理“环境因素,操作步骤,以及不准确现象的量化测试一手数据”。

lida2003的专栏 3072

BetaFlight参数配置解读[源码]

本文详细解读了BetaFlight飞控系统的参数配置,包括配置文件资源、定时器通道引脚配置、外设参数设置等。文章提供了已编译好的配置文件资源链接,并解释了如何通过地面站配置软件Betaflight Configurator加载配置文件。此外,还详细介绍了timer定时器通道和引脚的配置方法,以及如何为WS2812灯带、电机、蜂鸣器、电池电压采集等外设进行参数设置。文章还涵盖了SPI外设和片选引脚的配置,以及串口设备的连接方法。最后,文章强调了在配置完成后必须使用save命令保存设置,并提供了各飞控厂商型号的配置文本资源链接。

【Betaflight源码学习】Betaflight 嵌入式操作系统架构解析:与 FreeRTOS 的深度对比

Betaflight飞控系统采用轻量级自研调度机制,与FreeRTOS形成鲜明对比。该系统基于时间片的非抢占式调度,通过scheduler()函数顺序执行任务,确保飞控关键任务获得确定性执行时间。其核心taskDescriptor_t结构体包含任务函数指针、执行频率等参数,所有任务在枚举列表中明确定义。这种高度优化的调度方式为无人机控制提供了低延迟保障,但牺牲了部分系统灵活性。两种架构在任务调度策略、实时性保障等方面存在根本差异,直接影响飞控系统性能表现。

曾记否@ 1830

BetaFlight框架解析[代码]

本文详细介绍了BetaFlight开源飞控代码框架的设计与实现。内容涵盖框架设计的主要考量点,包括业务框架逻辑、模块化实现方法及性能优化。文章从主程序框架入手,分析了初始化(init)和调度执行(schedule)两大核心部分,并深入探讨了调度框架的特殊性及其与业务的紧耦合关系。此外,还介绍了模块方法、典型任务与模块(如系统任务、SERIAL任务、传感任务等)的具体实现,以及飞控启动与运行过程的整体串联。最后,提供了模块分析模板,为后续深入理解各任务和模块的设计与实现提供了方向。

如何在Tagetik系统中抽取处理SAP系统财务数据

如何在Tagetik系统中抽取处理不同核算系统财务数据:以SAP为例,简单讲一下Tagetik对接SAP数据的基本情况

2201_75401663的博客 577

【Betaflight源码学习】之初始化函数(init.c)

摘要: 本文详细解析了Betaflight飞行控制器的初始化流程,涵盖硬件初始化、配置加载和系统状态设置等关键步骤。代码首先初始化串口和系统全局设置,随后处理任务数据、IO接口和目标特定配置。根据存储介质类型(SD卡、外部闪存或EEPROM),分别执行相应的初始化与故障检测。此外,还涉及调试引脚、LED、外部中断和按钮的初始化,并支持EEPROM配置重置功能。整个过程通过标志位管理初始化状态,确保系统可靠启动,为飞行控制提供坚实基础。

曾记否@ 1007

AutoCAD 2024 Mac版安装激活教程:从下载到破解一站式解决方案

本文提供AutoCAD 2024 Mac版的详细安装与优化指南,包括系统要求检查、下载安装流程、常见问题解决方案及性能优化设置。特别介绍了如何应用最新补丁和Update保持软件性能,帮助用户顺利完成从安装到破解的全过程。

weixin_29239661的博客 832

Betaflight Configurator中飞翼模式舵机配置的常见误区解析

Betaflight Configurator中飞翼模式舵机配置的常见误区解析 背景概述 在无人机飞控系统中,Betaflight作为一款流行的开源固件,其配置工具Betaflight Configurator被广泛应用于各类飞行设备的设置。然而,在飞翼(Flying Wing)这种特殊布局的配置过程中,许多用户遇到了舵机编号显示与实际输出不符的问题,导致配置过程异常困难。 问题现象 当用户在Be...

gitblog_07429的博客 777

浅谈迪杰斯特拉(Dijkstra)算法和A*算法原理及实现

迪杰斯特拉(Dijkstra)算法和A*算法的原理及实现。

Guo_Zhanyu 9597

单粒子翻转对FPGA的影响及解决方法

单粒子翻转对FPGA的影响及解决方法

航天领域资深码农,型号经验丰富,一线干货分享 2445

无人机正射色差:镶嵌线 shp + 羽化接缝实操思路

把几何错位、拉花、鬼影当成「多羽化一点」去糊,往往会越修越假,应回空三、DSM/DEM 或正射重建侧排查。

llhllq2015的博客 76

TI DSP从COFF切换到EABI输出格式的5个关键修改点(TMS320F280025实测)

本文基于TMS320F280025实测,详细解析了TI DSP从COFF切换到EABI输出格式的5个关键修改点。核心差异在于EABI遵循ELF标准,涉及链接器优化、RAM数据共享、工具链升级、double数据类型位宽变化及链接器命令文件重构。迁移时需使用.retain指令防止关键数据被优化,利用NOINIT段保护共享RAM,并更新hex2000等工具,以确保BootLoader与应用程序稳定运行。

weixin_29189381的博客 265
上一篇: BetaFlight代码解析(12)—电机输出系统
下一篇: BetaFlight代码解析(14)—定时器系统
timmy-uav
博客等级 码龄26年 526粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

timmy-uav

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

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

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

打赏作者

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

抵扣说明:

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

余额充值