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 -- EKF2

    文章目录 EKF2参数高度估计Range Finder滤波 单变量更新单变量更新对多变量的影响 EKF2 参数 EKF2 中有一类 GATE 参数 当测量值在 VAR GATE 范围内才会更新值 高度估计 四种高度控制方法 xff1a 气压
  • PX4模块设计之三十:Hysteresis类

    PX4模块设计之三十 xff1a Hysteresis类 1 Hysteresis类简介2 Hysteresis类成员变量介绍3 Hysteresis类迟滞逻辑4 Hysteresis类重要方法4 1 Hysteresis bool ini
  • PX4模块设计之三十四:ControlAllocator模块

    PX4模块设计之三十四 xff1a ControlAllocator模块 1 ControlAllocator模块简介2 模块入口函数2 1 主入口control allocator main2 2 自定义子命令custom command
  • PX4模块设计之三十九:Commander模块

    PX4模块设计之三十九 xff1a Commander模块 1 Commander模块简介2 模块入口函数2 1 主入口commander main2 2 自定义子命令custom command 3 Commander模块重要函数3 1
  • px4_simple_example和uorb机制

    px4 simple app PX4 Autopilot src exampes px4 simple app xff0c 这个程序是用c语言调用orb API和poll机制订阅和发布通讯数据 xff0c 但是这个例子并不是既有接收又有发送
  • PX4-4-任务调度

    PX4所有的功能都封装在独立的模块中 xff0c uORB是任务间数据交互和同步的工具 xff0c 而管理和调度每个任务 xff0c PX4也提供了一套很好的机制 xff0c 这一篇我们分享PX4的任务调度机制 我们以PX4 1 11 3版
  • Px4源码框架结构图

    此篇blog的目的是对px4工程有一个整体认识 xff0c 对各个信号的流向有个了解 xff0c 以及控制算法采用的控制框架 PX4自动驾驶仪软件 可分为三大部分 xff1a 实时操作系统 中间件和飞行控制栈 1 NuttX实时操作系统 提
  • 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软件在环仿真注意点

    注 xff1a 最新内容参考PX4 user guide 点击此处 PX4下载指定版本代码和刷固件的三种方式 点击此处 PX4sitl固件编译方法 点击此处 PX4开发指南 点击此处 PX4无人机仿真 Gazebo 点击此处 px4仿真 知
  • 基于STC89C52的智能小车——PWM调速篇

    虽然我的小车因为电池电压太低慢的要死 xff0c 不过PWM还是要学的 PWM简单来说就是通过调整占空比 xff08 一个时间段 t 内电机运行的时间占总时间的比例 xff09 来调整小车速度 当然为了小车运行稳定 t 必须很小 xff0c
  • PX4——Range Finder 篇

    Range Finder 此处选用的是 Benewake 下的 Lidar 参数设置 General Configuration 除了官方的参数设置外 xff0c 我在 EKF2 中还找到了 EKF2 RNG AID 参数 xff0c 用来
  • STM32F103C8T6 PWM驱动舵机(SG90)

    小知识 xff1a 同一个定时器 xff0c 不同通道输出不同输出PWM的特点 对于同一个定时器的不同通道输出PWM xff0c 因为它们是共用一个计数器的 xff0c 所以频率必须一样 xff0c 而占空比由各自的CCR决定 xff0c
  • 【PX4 飞控剖析】06 树莓派加载安装ROS,Mavros以及PX4固件

    PX4 飞控剖析 06 树莓派加载安装Mavros以及PX4固件 1 树莓派 刷镜像1 1 用Win32DiskImager刷入ubuntu mate 16 04 2 desktop armhf raspberry pi的镜像 1 2 开机
  • PX4通过参数脚本给飞控导入参数

    PX4通过参数脚本给飞控导入参数 先找一架正常能飞的无人机连接地面站 在参数页面右上角点击工具 gt 保存到文件 保存的时候文件名注明参数的相关信息 然后将需要加载参数的无人机连接至地面站 xff0c 注意需要加载参数的无人机必须和保存的参
  • Arduino接收航模遥控器RC接收机的PWM数据

    本文将介绍如何使用Arduino读取RC接收机的PWM数据 1 硬件部分 我的设备 xff1a 接收机 遥控器发射机 将Arduino Nano的引脚 D8 D11 接到接收机的1 4通道 xff0c 接收机上的电源正极和负极连接到Ardu
  • STM32F103控制PCA9685产生16路PWM波控制SG90舵机

    STM32控制PCA9685产生16路PWM波控制SG90舵机 如果你能点开这篇文章 xff0c 说明你已经知道PCA9685是多么强大 xff0c NXP公司原本做这片芯片是为了提供给LED使用 xff0c 在其官方文档里也能看到所有PW
  • 直流电机控制 pwm 和 pid 算法

    下面的文章是我转载的 所以作者若是看到不允许转载 请给我留言或给我邮件 lushiliangcsdn 163 com 我会立即删除 转载原因 这篇文章把pid 算法解释的很详细 我担心以后这篇文章无故删除 才转载到我这边的 谢谢 转载来源于
  • 使用HAL库开发STM32:使用Timer输出PWM信号

    文章目录 目的 基础说明 输出PWM信号 总结 目的 单片机输出PWM信号是很常用的一种功能需求 STM32中通常使用Timer来输出PWM信号 这篇文章将对相关内容做个说明 基础说明 在使用Timer输出PWM信号需要了解一些Timer的
  • stm32f103 TIM2定时器4路PWM输出实验

    这里以TIM2为例 pwm c include pwm h uint16 t TIM2 CCR1 Val uint16 t TIM2 CCR2 Val uint16 t TIM2 CCR3 Val uint16 t TIM2 CCR4 Va

随机推荐

  • 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