嵌入式物联网机器人自动驾驶智能硬件【免费下载链接】PX4-AutopilotPX4 Autopilot Software项目地址https://gitcode.com/gh_mirrors/px/PX4-Autopilot点击查看免费下载本指南以 docs/en/modules/modules_driver_adc.md 为骨架系统讲解 PX4 Autopilot 中全部 ADC模数转换驱动模块板载adc驱动以及ads1115、ads7128、tla2528、ads7953四类外部采样芯片驱动。读完本文你将掌握每个驱动的启动/停止/状态查询命令、全部命令行参数含义、I2C 与 SPI 总线挂载方式并能结合src/drivers/adc/下的源码理解 ADC 数据如何经由 uORB 消息adc_report、system_power服务于电池电压监测等上层功能。ADC 驱动在 PX4 中的角色ADC 在飞控中承担两类核心任务一是采集模拟电压信号如电池电压、传感器供电电压、USB 连接状态二是为没有内部模数转换器的飞控板提供外部采样通路。PX4 的 ADC 驱动统一位于 src/drivers/adc 目录包含五个模块模块通信总线典型用途adcboard_adc芯片内置 ADC板载电压/温度采样、系统电源监测ads1115I2C无内部 ADC 板卡如 PilotPi、CUAV Nora的外部采样ads7128I2C外部 8 通道采样tla2528I2C外部 12 通道采样ads7953SPI外部 16 通道采样所有 ADC 驱动最终通过 uORB 消息对外发布数据。核心消息定义见 msg/AdcReport.msg其字段包括uint64 timestamp # [us] 系统启动以来的时间 uint32 device_id # [-] 传感器唯一 ID断电重启后保持不变 int16[16] channel_id # [-] ADC 通道 ID不存在的通道为负值 int32[16] raw_data # [-] 各通道原始采样值仅在 channel_id 为正时有效 uint32 resolution # [-] ADC 分辨率满量程数字计数 float32 v_ref # [V] ADC 电压参考用于计算 LSB 电压lsb v_ref / resolution该消息将 ADC 原始数据传递给其他模块例如电池状态模块因此 ADC 驱动是电源监测、电池信息上报等功能的底层数据来源。板载 ADC 驱动adc / board_adc功能描述adc驱动源码位于 src/drivers/adc/board_adc读取芯片内置 ADC周期性发布adc_report与system_power两类 uORB 消息。其底层硬件接口由 src/drivers/drv_adc.h 定义包括px4_arch_adc_init()/px4_arch_adc_uninit()初始化/反初始化 ADC 硬件px4_arch_adc_sample()读取指定通道采样值px4_arch_adc_reference_v()获取参考电压px4_arch_adc_temp_sensor_mask()温度传感器通道掩码px4_arch_adc_dn_fullcount()ADC 满量程数字计数。采样数据结构为px4_adc_msg_tam_channel8 位通道号am_data32 位采样结果单次最多返回PX4_MAX_ADC_CHANNELS即adc_report中channel_id数组长度个通道。内置 ADC 的设备 ID 为BUILTIN_ADC_DEVID0xffffffff。命令行用法adc command [arguments...] Commands: start test [-n] Do not publish ADC report, only system power stop status print status infoadc start启动驱动。从 ADC.cpp 的task_spawn()可知启动时会以SYSTEM_ADC_BASE基地址和ADC_CHANNELS通道掩码创建实例并在 init() 中调用px4_arch_adc_init()后按固定周期调度采样任务。构造时始终将温度传感器通道并入采样列表见 ADC.cpp。adc test [-n]进入自检模式。test() 会订阅adc_report等待 20ms 后打印DeviceID、Resolution、Voltage Reference随后连续 20 次每次间隔 500ms打印各有效通道的channel_id与raw_data成功则输出 ADC test successful.。-n参数表示不发布 ADC report仅发布系统电源信息。adc stop停止驱动adc status打印运行状态。采样与系统电源上报的实现细节板载 ADC 的采样主循环在 Run() 中逐通道调用sample()采集原始数据然后分别执行update_adc_report()发布adc_report与update_system_power()发布system_power。update_system_power()是电源监测的关键路径见 ADC.cpp依据ADC_SCALED_V5_SENSE宏计算 5V 电源电压voltage5v_v raw × (ADC_V5_V_FULL_SCALE / 3.3) × (v_ref / dn_fullcount)依据ADC_SCALED_V3V3_SENSORS_SENSE计算传感器 3.3V 供电电压并置位sensors3v3_valid依据ADC_SCALED_PAYLOAD_SENSE计算载荷供电电压同时打包 USB 连接/有效状态、电池组brick有效位、舵机供电有效位、外设/高功率 5V 过流标志等硬件状态。由此可见adc驱动不只是采样器更是system_power消息msg/SystemPower.msg的唯一生产者上层电源与电池模块均依赖它。外部 I2C ADCADS1115功能与适用场景ads1115驱动源码位于 src/drivers/adc/ads1115用于启用通过 I2C 连接的外部 [ADS1115] ADC 芯片。该驱动默认编译进固件的板卡包括没有内部模数转换器的型号例如 PilotPi 和 CUAV Nora可在板卡配置文件中搜索CONFIG_DRIVERS_ADC_ADS1115确认。驱动通过参数 ADC_ADS1115_EN 启用或禁用默认禁用一旦启用内部 ADC 将不再使用。参数定义见 src/drivers/adc/ads1115/ads1115_params.yaml布尔类型、默认值 0、修改后需要重启生效reboot_required: true。命令行用法ads1115 command [arguments...] Commands: start [-I] Internal I2C bus(es) (onboard sensors; shared bus only if -b is given) [-X] External I2C bus(es) (connector sensors, including shared buses) [-b val] board-specific bus (defaultall) (external SPI: n-th bus (default1)) [-f val] bus frequency in kHz [-q] quiet startup (no message if no device found) [-a val] I2C address default: 72 stop status print status info源码级要点默认地址 72即 0x48这是 ADS1115 的常见默认 I2C 地址探测机制probe() 说明该芯片没有 ID 寄存器驱动通过读取低/高阈值寄存器并与出厂默认值0xFF7F0080比对来识别芯片采样配置readChannel() 将通道配置为 PGA ±6.144V、单次转换模式、250 SPS 采样率并以 4 分之一采样间隔轮询就绪状态见 init() 中的ScheduleOnInterval(SAMPLE_INTERVAL / 4, ...)。外部 I2C ADCADS7128 与 TLA2528这两款驱动均通过 I2C 连接外部多通道 ADC 芯片源码分别位于 src/drivers/adc/ads7128 与 src/drivers/adc/tla2528。ADS7128ADS7128 command [arguments...] Commands: start [-I] Internal I2C bus(es) (onboard sensors; shared bus only if -b is given) [-X] External I2C bus(es) (connector sensors, including shared buses) [-b val] board-specific bus (defaultall) (external SPI: n-th bus (default1)) [-f val] bus frequency in kHz [-q] quiet startup (no message if no device found) [-a val] I2C address default: 16 stop status print status info从 ads7128_main.cpp 的print_usage()与主函数可知其默认 I2C 频率为 400 kHz默认地址为0x10十进制 16。驱动以DRV_ADC_DEVTYPE_ADS7128作为设备类型标识通过I2CSPIDriverBase框架实现实例管理与状态打印。TLA2528TLA2528 command [arguments...] Commands: start [-I] Internal I2C bus(es) (onboard sensors; shared bus only if -b is given) [-X] External I2C bus(es) (connector sensors, including shared buses) [-b val] board-specific bus (defaultall) (external SPI: n-th bus (default1)) [-f val] bus frequency in kHz [-q] quiet startup (no message if no device found) stop status print status info与 ADS7128 类似见 tla2528_main.cppTLA2528 默认 I2C 频率同样为 400 kHz、默认地址0x10但命令行不提供-a地址参数地址直接以默认值0x10初始化设备类型为DRV_ADC_DEVTYPE_TLA2528。外部 SPI ADCADS7953ads7953驱动源码位于 src/drivers/adc/ads7953通过 SPI 总线连接外部 ADS7953 芯片是文档中唯一使用 SPI 而非 I2C 的 ADC 驱动ads7953 command [arguments...] Commands: start [-s] Internal SPI bus(es) (onboard sensors; shared bus only if -b is given) [-S] External SPI bus (connector sensors, including shared buses) [-b val] board-specific bus (defaultall) (external SPI: n-th bus (default1)) [-c val] chip-select pin (for internal SPI) or index (for external SPI) [-m val] SPI mode [-f val] bus frequency in kHz [-q] quiet startup (no message if no device found) stop status print status info从 ads7953_main.cpp 可以确认其默认配置SPI 模式为SPIDEV_MODE0默认 SPI 频率为 10 MHz10 * 1000 * 1000Hz设备类型为DRV_ADC_DEVTYPE_ADS7953。启动时可指定片选引脚内部 SPI或片选索引外部 SPI、SPI 模式与总线频率-s/-S分别对应内部/外部 SPI 总线。命令行参数速查与总线选择五个 ADC 驱动共享同一套由BusCLIArguments解析的命令行参数体系均通过px4_platform_common/getopt.h的parseDefaultArguments()解析归纳如下参数含义适用驱动-I内部 I2C 总线板载传感器仅在同时给出-b时共享总线ads1115、ads7128、tla2528-X外部 I2C 总线连接器传感器含共享总线ads1115、ads7128、tla2528-s内部 SPI 总线ads7953-S外部 SPI 总线ads7953-b val板级总线默认 all外部 SPI 时为第 n 条总线默认 1全部-c val片选引脚内部 SPI或索引外部 SPIads7953-m valSPI 模式ads7953-f val总线频率kHz全部-q静默启动未找到设备时不打印消息全部-a valI2C 地址ads1115默认 72、ads7128默认 16总线选择遵循 PX4 驱动惯例-I/-s面向板载传感器总线-X/-S面向连接器外置总线-b用于精确指定某条板级总线。start、stop、status是全部驱动共有的基本命令。如何启用与编译配置外部 ADC 驱动的可用性由 Kconfig 体系控制。src/drivers/adc/Kconfig 通过rsource */Kconfig递归引入各子驱动的 Kconfig 项如src/drivers/adc/ads1115/Kconfig板卡配置文件中以CONFIG_DRIVERS_ADC_ADS1115之类的开关决定是否编译进固件。以 ADS1115 为例其运行时开关是ADC_ADS1115_EN参数默认关闭、重启生效启用后内部 ADC 不再参与采样适合 PilotPi、CUAV Nora 这类没有内置模数转换器的飞控板。总结PX4 的 ADC 驱动栈层次清晰adcboard_adc负责板载采样与system_power电源监测ads1115、ads7128、tla2528通过 I2C、ads7953通过 SPI 扩展外部采样能力所有数据统一通过adc_reportuORB 消息向上层供电。掌握了本文的命令行用法、总线参数语义和各驱动的默认配置地址、频率、SPI 模式即可在实际板卡上完成 ADC 的启动、探测、自检与状态排查。赞分享嵌入式物联网机器人自动驾驶智能硬件【免费下载链接】PX4-AutopilotPX4 Autopilot Software项目地址https://gitcode.com/gh_mirrors/px/PX4-Autopilot点击查看免费下载相关推荐Arduino-ESP32外设驱动详解GPIO、ADC、I2C、SPI实战应用Arduino ESP32外设驱动详解GPIO、ADC、I2C、SPI实战应用 引言为什么选择Arduino ESP32进行嵌入式开发 还在为ESP32复嵌入式物联网驱动开发RIOT 外设自检指南使用 Peripheral Selftest Shield 全面测试 ADC/GPIO/I2C/PWM/SPI/UARTRIOT 外设自检指南使用 Peripheral Selftest Shield 全面测试 ADC/GPIO/I2C/PWM/SPI/UART 导读 本文基于物联网嵌入式操作系统实时系统RT-Thread 中 SAMC21J18A BSP 深入解析从芯片特性到 CAN-FD、ADC 与 I2C 实战RT Thread 中 SAMC21J18A BSP 深入解析从芯片特性到 CAN FD、ADC 与 I2C 实战 导读 本文以 RT Thread 仓库中操作系统嵌入式物联网嵌入式OSRTOS上一篇B站视频转文字工具bili2text解锁视频内容价值的三层技术架构下一篇bili2textB站视频转文字神器三步解锁知识宝藏创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
