Я знаю, что оба PWM1A и PWM1B должны иметь одинаковый период, но использование по умолчанию перекрытий не позволяет мне изменить период после загрузки. Я думал, что загрузка обоих контактов одновременно на одном оверлее может решить эту проблему, позволяя мне установить период для обоих, поскольку они мультиплексированы. Я пытаюсь подключить сервопривод к P9_16 и P9_14 (EHRPWM1A и EHRPWM1B), поэтому они оба нуждаются в том же периоде, но не 5000US в оверлей по умолчанию.Как установить период PWM в оверлее дерева устройств
Вот оверлей я до сих пор:
/dts-v1/;
/plugin/;
/{
compatible = "ti,beaglebone", "ti,beaglebone-black";
/* identification */
part-number = "car_pwm_controls";
version = "00A0";
/* state the resources this cape uses */
exclusive-use =
/* the pin header uses */
"P9.14", /* pwm: ehrpwm1A - STEERING */
"P9.16", /* pwm: ehrpwm1B - MOTOR */
/* the hardware IP uses */
"ehrpwm1A",
"ehrpwm1B";
[email protected] {
target = <&am33xx_pinmux>;
__overlay__ {
car_pwm_controls_pins: pinmux_pwm_controls_pins {
pinctrl-single,pins = <
0x048 0x6 /* P9_14 (ZCZ ball U14) | MODE 6 */
0x04c 0x6 /* P9_16 (ZCZ ball T14) | MODE 6 */
>;
};
};
};
[email protected] {
target = <&ocp>;
__overlay__ {
car_pwm_helper {
compatible = "pwm_test";
pinctrl-names = "default";
pinctrl-0 = <&car_pwm_controls_pins>;
car_motor {
pwms = <&ehrpwm1 0 20000000 1>;
pwm-names = "PWM_P9_14";
enabled = <1>;
duty = <0>;
status = "okay";
};
car_steering {
pwms = <&ehrpwm1 1 20000000 1>;
pwm-names = "PWM_P9_16";
enabled = <1>;
duty = <0>;
status = "okay";
};
};
};
};
};
Я действительно не уверен во второй части (фрагмент1), и это первый раз, когда я написал нетривиальное наложение, которое больше, чем просто один вывод или простой gpio.
Я видел как ответ here, так и here, но мне любопытно, как сделать эту работу с наложением, и если это лучшее решение? Основная проблема заключается в том, что, хотя этот накладной компилятор не загружается и не устанавливает штыри PWM.