2021年1月4日月曜日

JetsonNanoでPWM生成(C++にて)

あけましておめでとうございます🎉 
昨年はとんでもない年でしたね...(今年も落ち着いていないが...
 皆さんもしっかり免疫つけてウィルスに負けない体づくりをしていきましょうね!

 さて、今年お初(ほとんど更新してない)はJetsonNanoでPWM生成です。
 肝な部分としてはC++でやっている点でしょうか? 
Pythonは多いですけど、C++の記事は埋もれてるのかわかりませんが、 
日本語のブログがなかったので書いていこうかと思います。  

  1. まず、Jetsonのハードウェアな設定部分を変えないと行けないので変更します。
     「jetson pinmux pwm io tools」とかでググってください。(投げやり
    そのツール内で32、33ピンの設定を変えておいてください。(PWMにね

  2. いよいよコードの部分を触ります。
    JetsonGPIOをpull&make&installしてください。
    (README.MDに書いてあるヨ

  3. samples/simple_pwm.cppを編集して任意のPWMを生成してみます。
  4. 69行目にある
    
      GPIO::PWM p(output_pin, 50);
      
    第一引数は出力ピン(JetsonNanoは32,33番ピンのみ対応)、
    第二引数は周期(Hz)です。

    次に、70行目の
    
      p.start(50);
      
    引数に出力するduty比を0~100で入力。
    もとのソースだとdoubleになってるから0~1.0かとおもたけど違うみたい?(オシロで確認)

  5. これでコンパイル
    g++ simple_pwm.cpp -o simple_pwm -lJetsonGPIO


  6. 実行して出力されたかを確認してね★(オシロスコープやらテスターやらLEDやら
READMEによると権限周りもさわらないといけないってあったけど、 私は触らなくても行けました??(念の為やっておいたほうがいいと思います。)
まぁ、記事が少ないってことはニッチってことですかね?
私がこれをやろうと思い立った経緯としまして、
ROSのHardwareInterfaceを作ろうとして、
Pythonで媒介するノードを立てるのもなぁ...と思って
ダメ元で調べたらライブラリがあったので使ってみよー!となったわけです。
ニッチな皆様のお力に慣れたら幸いです。(笑)

PWMはマイコンで出せって?
それは言わないお約束♥
ちなみにロータリーエンコーダ付きのモーター使ってるのでstm32もついてますヽ(・ω・)/ズコー

ROS2やらなきゃ...(万年言ってる
ros2_controllerの正式版&gazeboが対応したらやるから(震え声