MCU命令

  • Mcu

    • Printer::connect

      • send_event("klippy:mcu_identify")

        • 1) Probe

        • 2) mcu

          • SerialReader::connect_uart(有波特率情况)

        • 3) temperature

        • 4) tmc

          • SerialReader::connect_pipe(无波特率情况)

        • 5)DirZCtl

    • pin_type

      • 1)endstop

      • 2) digital_out

      • 3) pwm

      • 4) adc

    • 分支主题 3

      • klippy:ready

        • PrinterStats::HandleReady

          • BaseStats::Stats

            • ToolHead::Stats

              • mcu::check_active

    • MCU命令

      • 1、含义

        • 上位机软件发送到微控制器的,并由微控制器负责执行的底层命令

      • 2、格式

        • 见protocol文件

        • 以printf风格的语法描述

      • 3、启动命令

        • 采取某些一次性的命令来配置微控制器及其片上设备

        • 常见启动命令

          • set_digital_out pin=%u value=%c

            • 将指定的引脚配置为数字输出GPIO,并将其设置为低电平(value=0)或高电平(value=1)

            • 可以用于配置LED的初始值和配置步进驱动器微步进引脚的初始值

          • set_pwm_out pin=%u cycle_ticks=%u value=%hu

            • 将立即配置指定的引脚,使其使用硬件的脉宽调制(PWM)和给定的cycle_ticks.

            • 可以用于配置启用CPU和喷嘴冷却风扇

        • 底层微控制器配置

          • 微控制器的大多数命令在成功调用之前需要进行初始化设置。

          • 当主机第一次连接到微控制时,它总是从获得一个数据字典开始。

          • 获得数据字典后,主机将检查微控制器是否处于“已配置”状态,如果不是,就进行配置,配置包括以下几个阶段。

            • 1、get_config

              • 主机首先检查微控制器是否已经被配置。

            • 2、allocate_oids count=%c

              • 任何以 "config_"开头的命令都会创建一个新的微控制器对象,并将给定的oid赋予它。

            • 3、finalize_config crc=%u

              • finalize_config命令将微控制器从未配置状态转换为已配置状态。

        • 常见的微控制器对象

          • 1、config_digital_out oid=%c pin=%u value=%c default_value=%c max_duration=%u

            • 为给定的GPIO'pin'创建一个内部微控制器对象。该引脚将被配置为数字输出模式,并被设置为'value'指定的初始值(0为低,1为高)

          • 2、config_pwm_out oid=%c pin=%u cycle_ticks=%u value=%hu default_value=%hu max_duration=%u

            • 为基于硬件的PWM引脚创建一个内部对象,主机可以定期刷新

          • 3、config_analog_in oid=%c pin=%u

            • 将一个引脚配置为模拟输入采样模式。一旦配置完成,就可以使用query_analog_in命令(见下文)以固定的时间间隔对该引脚进行采样。

          • 4、config_stepper oid=%c step_pin=%c dir_pin=%c invert_step=%c step_pulse_ticks=%u

            • 命令创建一个内部步进器对象

          • 5、config_endstop oid=%c pin=%c pull_up=%c stepper_count=%c

            • 创建一个内部步进器对象

            • 它用于指定限位开关的引脚,并启用 "homing "操作(见下面的endstop_home命令)

          • 6、config_spi oid=%c bus=%u pin=%u mode=%u rate=%u shutdown_msg=%*s

            • 创建了一个内部SPI对象

            • 它与spi_transfer和spi_send命令一起使用

          • 7、config_spi_without_cs oid=%c bus=%u mode=%u rate=%u shutdown_msg=%*s

            • 类似于config_spi,但是没有CS引脚的定义。它对没有芯片选择线的SPI设备很有用

        • 常用运行命令

          • 1、set_digital_out_pwm_cycle oid=%c cycle_ticks=%u

            • 将数字输出引脚(由config_digital_out创建)配置为使用 "软件PWM"

          • 2、queue_digital_out oid=%c clock=%u on_ticks=%u

            • 将安排在设定的时钟时间内改变数字输出GPIO引脚。要使用这条命令,必须在微控制器配置过程中发出具有相同‘oid’参数的 'config_digital_out' 命令

          • 3、queue_pwm_out oid=%c clock=%u value=%hu

            • 安排改变一个硬件PWM输出引脚

          • 4、query_analog_in oid=%c clock=%u sample_ticks=%u sample_count=%c rest_ticks=%u min_value=%hu max_value=%hu

            • 设置了一个对模拟输入的循环采样

        • 步进器命令

          • 1、queue_step oid=%c interval=%u count=%hu add=%hi

            • 指定的步进电机输出'count'个步数,'interval'是每步之间的时钟数间隔

          • 2、set_next_step_dir oid=%c dir=%c

            • 指定了下一个queue_step命令将使用的dir_pin的值。

          • 3、reset_step_clock oid=%c clock=%u

            • 通常情况下步进时序是相对于给定步进的上一步。这条命令重置了时钟,使下一步是相对于提供的 'clock' 时间。通常主机只在打印开始时发送此命令。

          • 4、stepper_get_position oid=%c

            • 使微控制器生成一个 "stepper_position "响应消息,其中包含步进器的当前位置。该位置是dir=1时产生的总步数减去dir=0时的总步数

          • 5、endstop_home oid=%c clock=%u sample_ticks=%u sample_count=%c rest_ticks=%u pin_value=%c

            • 用于步进电机 "homing"操作

        • 运动队列

          • 每个queue_step命令都利用了微控制器 "move queue "中的一个条目。这个队列是在它收到 "finalize_config "命令时分配的,它在 "config "响应信息中报告可用队列条目的数量

          • 在发送queue_step命令之前,主机有责任确保队列中有可用空间。这需要主机通过计算每个queue_step命令完成的时间并相应地安排新的queue_step命令来实现

        • SPI命令

          • 1、spi_transfer oid=%c data=%*s

            • 使微控制器向 'oid '指定的spi设备发送 'data' ,并生成一个 "spi_transfer_response "的响应消息,其中包括传输期间返回的数据。

          • 2、spi_send oid=%c data=%*s

            • 这个命令与 "spi_transfer "类似,但它不产生 "spi_transfer_response "消息。

posted @ 2025-05-21 09:58  hbg-rohens  阅读(64)  评论(0)    收藏  举报