差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 | |||
digi:arm-embedded:ccmp2:encoder_dts [2025/03/31 22:32] – robin | digi:arm-embedded:ccmp2:encoder_dts [2025/03/31 23:44] (当前版本) – robin | ||
---|---|---|---|
行 177: | 行 177: | ||
{{: | {{: | ||
- | 补充:用cubeMX生成的设备树发现,和smartIOMUX一样,是用AF8,因此,只能用input capture direct mode来操作 | + | 补充:用cubeMX生成的设备树发现,和smartIOMUX一样,是用AF8,因此,如果用ch3, |
+ | |||
+ | 根据AI给的说法:虽然也可以把将CH3和CH4配置为输入捕获模式,在中断或轮询中读取捕获值,计算脉冲数和方向,或是通过软件逻辑模拟正交编码器的计数和方向判断,但这样实时性较差,占用CPU资源,适合低速场景。 | ||
+ | 因此能用上专用的encoder的模式肯定效率高一些 | ||
+ | |||
+ | 一个完整的电机控制的设备树的例子参考如下,可根据板子情况参考: | ||
+ | < | ||
+ | / { | ||
+ | // 配置时钟(确保定时器时钟源正确) | ||
+ | clocks { | ||
+ | // 假设TIM1使用APB2时钟(需根据实际时钟树配置) | ||
+ | tim1_clk: tim1-clk { | ||
+ | # | ||
+ | compatible = " | ||
+ | clock-frequency = < | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | // PWM控制器配置(TIM1通道1用于PWM输出) | ||
+ | pwm_motor: pwm-motor { | ||
+ | compatible = " | ||
+ | #pwm-cells = < | ||
+ | reg = < | ||
+ | clocks = <& | ||
+ | status = " | ||
+ | |||
+ | pwm@0 { | ||
+ | // 通道1(TIM1_CH1)作为PWM输出 | ||
+ | reg = < | ||
+ | st, | ||
+ | st, | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | // 编码器接口(TIM3通道1和2用于正交编码器) | ||
+ | encoder_motor: | ||
+ | compatible = " | ||
+ | reg = < | ||
+ | st, | ||
+ | st, | ||
+ | clocks = <& | ||
+ | status = " | ||
+ | }; | ||
+ | |||
+ | // 霍尔传感器GPIO中断(可选,用于无刷电机换相) | ||
+ | hall_sensor { | ||
+ | compatible = " | ||
+ | hall-u { | ||
+ | label = " | ||
+ | gpios = <& | ||
+ | linux,code = < | ||
+ | }; | ||
+ | hall-v { /* 类似配置 */ }; | ||
+ | hall-w { /* 类似配置 */ }; | ||
+ | }; | ||
+ | |||
+ | // ADC配置(用于电流采样,可选) | ||
+ | adc_motor: adc-motor { | ||
+ | compatible = " | ||
+ | reg = < | ||
+ | vref-supply = <& | ||
+ | st, | ||
+ | status = " | ||
+ | }; | ||
+ | }; | ||
+ | </ |