px4的PWM是如何输出的

2023-05-16

如果有io芯片,且使用了io作为输出PWM的设备

则fmu将mixer传输给io,io进行混控计算并输出PWM,将pwm结果传递回fmu,此时无app订阅acuator_outpus,就是给人看的。

// src/drivers/px4io/px4io.cpp
             /* fetch PWM outputs from IO */
             io_publish_pwm_outputs();

在px4iofirmware和pwm_out中
都使用函数up_pwm_servo_set进行PWM输出

 // src/modules/px4iofirmware/mixer.cpp
        if (mixer_servos_armed
            && (should_arm || should_arm_nothrottle || (source == MIX_FAILSAFE))
            && !(r_setup_arming & PX4IO_P_SETUP_ARMING_LOCKDOWN)) {
                /* update the servo outputs. */
                for (unsigned i = 0; i < PX4IO_SERVO_COUNT; i++) {
                        up_pwm_servo_set(i, r_page_servos[i]);
                }

                /* set S.BUS1 or S.BUS2 outputs */

                if (r_setup_features & PX4IO_P_SETUP_FEATURES_SBUS2_OUT) {
                        sbus2_output(_sbus_fd, r_page_servos, PX4IO_SERVO_COUNT);

                } else if (r_setup_features & PX4IO_P_SETUP_FEATURES_SBUS1_OUT) {
                        sbus1_output(_sbus_fd, r_page_servos, PX4IO_SERVO_COUNT);
                }

        } else if (mixer_servos_armed && (should_always_enable_pwm
                                          || (r_setup_arming & PX4IO_P_SETUP_ARMING_LOCKDOWN))) {
                /* set the disarmed servo outputs. */
                for (unsigned i = 0; i < PX4IO_SERVO_COUNT; i++) {
                        up_pwm_servo_set(i, r_page_servo_disarmed[i]);
                        /* copy values into reporting register */
                        r_page_servos[i] = r_page_servo_disarmed[i];
                }

                /* set S.BUS1 or S.BUS2 outputs */
                if (r_setup_features & PX4IO_P_SETUP_FEATURES_SBUS1_OUT) {
                        sbus1_output(_sbus_fd, r_page_servo_disarmed, PX4IO_SERVO_COUNT);
                }

                if (r_setup_features & PX4IO_P_SETUP_FEATURES_SBUS2_OUT) {
                        sbus2_output(_sbus_fd, r_page_servo_disarmed, PX4IO_SERVO_COUNT);
                }
        }

如果有io芯片但没作为PWM输出,或者无io芯片

则在fmu的PWM输出设备上进行PWM输出

// src/drivers/pwm_out/PWMOut.cpp
// _interface可以指fmu的PWM,也可以是IO的PWM,也可以是UAVCAN等
        /* now return the outputs to the driver */
        // updateOutputs函数就输出到PWM设备了
        if (_interface.updateOutputs(stop_motors, _current_output_value, mixed_num_outputs, n_updates)) {
                actuator_outputs_s actuator_outputs{};
                setAndPublishActuatorOutputs(mixed_num_outputs, actuator_outputs);
                // 发布了actuator_outputs主题
                publishMixerStatus(actuator_outputs);
                updateLatencyPerfCounter(actuator_outputs);
        }

输出函数是

bool PWMOut::updateOutputs()

调用:

int up_pwm_servo_set(unsigned channel, servo_position_t value)

其再调用:

// platforms/nuttx/src/px4/nxp/imxrt/io_pins/io_timer.c
int io_timer_set_ccr(unsigned channel, uint16_t value)

而CCR就是产生PWM的寄存器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

px4的PWM是如何输出的 的相关文章

  • PX4 ---- Mixer

    文章目录 Mixer 混合控制 作用输入输出装载混控文件MAVROS代码解析总结示例MAINAUX Mixer 混合控制 作用 经过位置控制和姿态控制后 xff0c 控制量通过 actuator controls发布 xff0c 其中 co
  • PX4模块设计之五:自定义MAVLink消息

    PX4模块设计之五 xff1a 自定义MAVLink消息 1 MAVLink Dialects1 1 PX4 Dialects1 2 Paprazzi Dialects1 3 MAVLink XML File Format 2 添加自定义M
  • PX4模块设计之六:PX4-Fast RTPS(DDS)简介

    64 TOC PX4模块设计之六 xff1a PX4 Fast RTPS DDS 简介 基于PX4开源软件框架简明简介的框架设计 xff0c 逐步分析内部模块功能设计 PX4 Fast RTPS DDS 具有实时发布 订阅uORB消息接口
  • PX4模块设计之九:PX4飞行模式简介

    PX4模块设计之九 xff1a PX4飞行模式简介 关于模式的探讨1 需求角度1 1 多旋翼 MC multi copter 1 1 1 RC控制模式1 1 1 1 Position Mode1 1 1 2 Altitude Mode1 1
  • PX4模块设计之二十四:内部ADC模块

    PX4模块设计之二十四 xff1a 内部ADC模块 1 内部ADC模块简介2 模块入口函数2 1 主入口board adc main2 2 自定义子命令custom command 3 内部ADC模块重要函数3 1 task spawn3
  • PX4模块设计之二十六:BatteryStatus模块

    PX4模块设计之二十六 xff1a BatteryStatus模块 1 BatteryStatus模块简介2 模块入口函数2 1 主入口battery status main2 2 自定义子命令custom command 3 Batter
  • PX4模块设计之三十三:Sensors模块

    PX4模块设计之三十三 xff1a Sensors模块 1 Sensors模块简介2 模块入口函数2 1 主入口sensors main2 2 自定义子命令custom command2 3 模块状态print status 重载 3 Se
  • mavros连接px4失败的usb-ttl原因

    问题描述 xff1a 最近在搞mavros xff0c 以方便协处理器和pixhawk通讯 xff0c 在按照官网教程安装mavros xff0c 设置px4 xff0c 连接硬件之后发现mavros卡在中间下不去 xff1a MAVROS
  • stm32使用PWM播放音频

    我之前研究过STM32的DAC播放wav音频文件 xff0c 今天突然发现使用PWM也可以实现WAV文件的播放 xff0c 让在大开了眼界 xff0c 转载如下 xff1a stm32使用PWM播放音频 pwm stm32 dac pcm
  • px4仿真无法起飞问题(Failsafe enabled: no datalink)

    报错信息 问题描述 xff1a 使用JMAVSim和gazebo仿真px4起飞时报错如下 xff1a WARN commander Failsafe enabled no datalink 说不安全 解决方法 打开QGC 就可以起飞了
  • pixhawk px4 commander.cpp

    对于复杂的函数 xff0c 要做的就是看函数的输入是什么 来自哪里 xff0c 经过处理后得到什么 给谁用 xff0c 这样就可以把程序逻辑理清 中间的分析就是看函数如何处理的 span class hljs keyword extern
  • stm32通用定时器输出PWM控制舵机

    stm32的通用定时器有TIM2 TIM3 TIM4 TIM5 xff0c 每个定时器都有独立的四个通道可以作为 xff1a 输入捕获 输出比较 PWM输出 单脉冲模式输出等 stm32除了基本定时器 xff0c 其他定时器都能输出PWM
  • PX4 OffBoard Control

    终于还是走上了这一步 xff0c 对飞控下手 xff0c 可以说是一张白纸了 记录一下学习的过程方便以后的查阅 目录 一 ubuntu18 04配置px4编译环境及mavros环境 二 PX4的OffBoard控制 1 搭建功能包 2 编写
  • PX4飞控的PPM接收机

    xff08 一 xff09 原理图 xff1a PX4飞控的PPM输入捕获由协处理器完成 xff0c 接在A8引脚 xff0c 对应Timer1的通道1 xff08 二 xff09 PPM协议 xff1a PPM的每一帧数据间隔为20ms
  • Arduino接收航模遥控器RC接收机的PWM数据

    本文将介绍如何使用Arduino读取RC接收机的PWM数据 1 硬件部分 我的设备 xff1a 接收机 遥控器发射机 将Arduino Nano的引脚 D8 D11 接到接收机的1 4通道 xff0c 接收机上的电源正极和负极连接到Ardu
  • 大神浅谈无人机飞控软件设计 系统性总结

    写在前面 深感自己对飞控软件 算法的知识点过于杂乱 很久没有进行系统的总结了 因此决定写几篇文章记录一些飞控开发过程的知识点 主要是针对一些软件 算法部分进行讨论 如内容有错误 欢迎指出 1 飞控软件的基本模块 无人机能够飞行主要是依靠传感
  • 电机控制基础——定时器基础知识与PWM输出原理

    单片机开发中 电机的控制与定时器有着密不可分的关系 无论是直流电机 步进电机还是舵机 都会用到定时器 比如最常用的有刷直流电机 会使用定时器产生PWM波来调节转速 通过定时器的正交编码器接口来测量转速等 本篇先介绍定时器的基础知识 然后对照
  • STM32 使用TIM2_CH1(PA15) 输出10K PWM信号

    PA15 gt TIM2 Remap CH1 1 apb init RCC APB1PeriphClockCmd RCC APB1Periph TIM2 ENABLE RCC APB2PeriphClockCmd RCC APB2Perip
  • PMIC驱动之—PMIC硬件相关知识

    PMIC 电源管理集成电路 Power Management IC 在之前项目中 驱动最小系统 对于PMIC这块儿很懵懂 故抽时间查看一些优秀博文及资料 加强对电源管理的理解 本文介绍 PMIC 硬件电路相关的一些知识 在此作一些阶段性的学
  • STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值

    参考 stm32 定时器输出PWM原理及工作原理 控制舵机 作者 点灯小哥 发布时间 2021 03 09 23 17 52 网址 https blog csdn net weixin 46016743 article details 11

随机推荐

  • Java链表

    package myTest public class Node int data 61 1 Node next Node int data this data 61 data Node public static Node Buildmy
  • Spring Demo例子详解

    Spring Demo例子详解 该项目是作为我的Spring Demo xff0c Demo源码见 https github com huijuanl Spring tree master spring lihuijuan 中的项目 xff
  • shuffle FetchFailedException原因

    参考学习 https blog csdn net gangchengzhong article details 76474129 和 https my oschina net u 2499632 blog 702814 及 https bl
  • git add .和git add *有什么区别

    git add 和 git add 区别 git add 会把本地所有untrack的文件都加入暂存区 xff0c 并且会根据 gitignore做过滤 xff0c 但是git add 会忽略 gitignore把任何文件都加入
  • app后台开发入门

    2017 5 1第二次更新 前言 xff1a 在我写下这篇文章之前 xff0c 我头脑中的app后台开发 xff0c 有且只有一个流程 客户端Cilent向服务器Server请求数据 xff0c 服务器Server响应客户端请求并返回jso
  • 论文写作踩坑-Wiley杂志投稿-Latex模板使用Windows-Stix-fontinstaller安装Wiley stix-fonts字体出错

    投稿Wiley相关的杂志 xff0c 其LaTeX模板和elsevier及IEEE旗下杂志LaTeX模板不相同 xff0c 其中比较明显的区别是需要安装 特殊字体 xff0c 如果不安装要求的字体会报如下错 xff1a 在百度上可以查到的资
  • LaTex修改参考文献的颜色-BiBTeX-包括参考文献的序号颜色

    1 正文添加 xff1a 复制粘贴即可 xff0c 只需修改 文献1 xff0c 文献2 变成你自己的 usepackage xcolor usepackage xpatch makeatletter def changeBibColor
  • 自动化领域(控制领域)主要期刊汇总整理(SCI和EI)

    目录 IEEE旗下 Elsevier旗下 Springer旗下 Taylor amp Francis Online Wiley Online Library 国内期刊 IEEE旗下 IEEE Transactions on Automati
  • PCL点云分割算法及其测试代码-分割平面

    目录 nbsp 1 平台 2 PCD文件读取 3 算法 4 测试代码及注释 5 测试结果 1 平台 PCL1 8 0 VS2015 Win10 具体配置可以参照链接
  • 点云PCL入门基础

    目录 点云对象的声明 转换关系 示例 输入输出保存点云数据 点云对象的声明 pcl PointCloud lt pcl PointXYZ gt cloud 点云对象 pcl PointCloud lt pcl PointXYZ gt Ptr
  • 源自中国顶级开源软件再下一城!向量数据库公司Zilliz完成6000万美元B+轮融资

    中国开源届再次迎来一个好消息 xff01 北京时间 8 月 25 日 xff0c 向量数据库公司 Zilliz 宣布完成 6000 万美元的新 笔融资 xff0c 成功将其 B 轮融资规模进 步扩 1 03 亿美元 该笔融资由沙特阿美 xf
  • 耗散性、无源性、正实性

    耗散性和作为其特例的无源性概念广泛存在于物理学 应用数学以及力学等领域 研究耗散性和无源性理论的主要出发点在于他们运用基于能量多输入输出描述给出了控制系统分析和设计的新框架 xff0c 对系统控制的诸多方面都起到了很大的推动作用 不仅在控制
  • python学习笔记之tkinter中的label

    from tkinter import longtext 61 39 39 39 多行 文本 39 39 39 master 61 Tk master title 34 label学习 34 w0 61 Label master text
  • python做数据拟合

    项目中有涉及趋势预测的工作 xff0c 整理一下这3种拟合方法 xff1a 1 线性拟合 使用math import math def linefit x y N 61 float len x sx sy sxx syy sxy 61 0
  • 关于VS编译的程序内存分配只能用1.5~2G上限的优化方案

    关于VS编译的程序 内存分配只能用1 5 2G上限的优化方案 遇到的问题是这样的 xff1a 电脑内存32G xff0c VS2012编译的一个程序 xff0c 在程序运行过程中 xff0c 一旦程序的内存使用达到1 5G xff0c 就会
  • 对称矩阵及正定性

    对称阵是非常重要的矩阵 xff0c 对于实对称矩阵 xff0c 其特征值也为实数 xff0c 且特征向量是垂直的 注意这里的垂直是指 xff1a 如果特征值互不相同 xff0c 那么每个特征值对应的特征向量是在一条线上 xff0c 那些线之
  • C++变量前面加下划线的含义

    参考C 43 43 变量前面加下划线的含义 云 43 社区 腾讯云 C 43 43 变量前面加下划线和不加下划线都不会影响对变量的定义 xff0c 只是风格问题 xff0c 更喜欢将成员变量或者私有成员变量的前面加上下划线 以表示该变量是某
  • 对PX4参数THR_MDL_FAC的理解

    对参数THR MDL FAC的理解 home wp src PX Firmware src lib mixer module mixer module hpp 这里引入了参数THR MDL FAC的使用 DEFINE PARAMETERS
  • TX2安装ubuntu18,ROS

    设备 TX2 8G版本 ubuntu18 04笔记本一台 重要提示 请看完全文再安装 xff01 本文不是手把手教你安装类型教程 给TX2刷系统 看看我的参考博客1吧 最好参考最新的博客 xff0c 现在官网的新版本都不是这样 JetPac
  • px4的PWM是如何输出的

    如果有io芯片 xff0c 且使用了io作为输出PWM的设备 则fmu将mixer传输给io xff0c io进行混控计算并输出PWM xff0c 将pwm结果传递回fmu xff0c 此时无app订阅acuator outpus xff0