2016-04-02 1 views
0

Я знаю, что оба 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.

ответ

0

Я проверил overlay used for the 3D printer cape и внесли некоторые изменения. Новый оверлей работает и даже создает папки pwm с пользовательскими именами, а не только P9_16_PWM, лежащими по умолчанию.

/dts-v1/; 
/plugin/; 

/{ 
    compatible = "ti,beaglebone", "ti,beaglebone-black"; 

    /* identification */ 
    part-number = "CAR_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"; 

    // Each PWM pin is it's own node, even though they are on the same module 
    [email protected] { 
     target = <&am33xx_pinmux>; 
     __overlay__ { 
      car_steering_pins: pinmux_car_steering_pins { // STEERING PIN 
       pinctrl-single,pins = <0x048 0x6>; /* P9_14 (ZCZ ball U14) | MODE 6 */ 
      }; 
         car_motor_pins: pinmux_car_motor_pins {  // MOTOR CONTROL PIN 
           pinctrl-single,pins = <0x04c 0x6>; /* P9_16 (ZCZ ball T14) | MODE 6 */ 
      }; 
     }; 
    }; 

    [email protected] { 
     target = <&ocp>; 
     __overlay__ { 
      car_pwm_helper { 
       car_steering {  // Directory Will Be Called this 
        compatible = "pwm_test"; // unknown ??? 
        pinctrl-names = "default"; // unknown ??? 
        pinctrl-0 = <&car_steering_pins>; 
        pwms  = <&ehrpwm1 0 20000000 1>; // Module 0 at 20MHz ... unsure what last 1 is? 
        pwm-names = "STEER_P9_14"; 
        enabled  = <1>;  // enable plz 
        polarity  = <0>;  // 0=normal, 1=inverse 
        duty  = <0>;  // initial duty 
        status  = "okay"; // be ok plz? 
       }; 
       car_motor {  // Directory will be called this 
        compatible = "pwm_test"; 
        pinctrl-names = "default"; 
        pinctrl-0 = <&car_motor_pins>; 
        pwms  = <&ehrpwm1 1 20000000 1>; // Module 1 at 20MHz ... unsure what last 1 is? 
        pwm-names = "MOTOR_P9_16"; 
        enabled  = <1>;  // enable plz 
        polarity  = <0>;  // 0=normal, 1=inverse 
        duty  = <0>;  // initial duty 
        status  = "okay"; // be ok plz? 
       }; 
      }; 
     }; 
    }; 
}; 

Все еще не уверены в том, что делает несколько строк, но это работает, поэтому наш проект может двигаться вперед. Отвечая на мой вопрос, чтобы, возможно, это помогло кому-то другому.

Смежные вопросы