2026年7月13日月曜日

LiDARを使った相対速度計(その7)

 TSD20は思いのほか小さかった。コネクタも小さいので抜き差しすると壊しそうだ。接続線も簡単に切れそうに細い。

TSD20では測定頻度を毎秒50回を含む他の頻度に変更するのも上手く行った。

 TSD20を空に向けると測定値は20000mmとなり、マニュアルにあるような50000mmでは無い。これはTSD50のマニュアル記述の使い回しで修正を失念したのかな。

LiDARにUARTでSTOPコマンドを送ると1秒1回程度の頻度で次のデータを自発的に送ってくる(6番目の0xf0はチェックサムだ)。 

5a 0f 02 ff ff f0

 これが何を意味しているのかマニュアルに記述が無く、ネット情報も無く皆目分からない。たぶん Keep Alive 的な性格を持っているものと推察する。

 

さて、TSD10やTSD20ではUARTインターフェイスで上手く行ったが、一方TSD50では毎秒500回という固定した測定頻度の関係で9600bpsではデータを送りきれない。そこでI2Cインターフェイスに挑戦する事にした。併せてPICを容量の大きいPIC16F18326に変えるが、それに伴い2個目のUARTが搭載されていないのでI2C専用となる。

PICとのインターフェイスでLiDARでデフォルトのUARTを選んだ場合、UARTは全二重通信なのでデータはLiDAR主導で測定頻度に従って勝手に送られてくる。またLiDARへのコマンドの送信とレスポンスの受信も送信側の勝手なタイミングで行われる。一方、I2Cの場合はポーリング方式なのでマスター(PIC)側主導でデータを転送する必要がある。

従ってUARTではPICはLiDARから勝手に送られてくるデータを受信し処理すればよいが、一方I2Cを使う場合はPIC主導で定期的にデータを取得し、その結果を処理する必要がある。つまりUARTとI2Cではソフトの造りが違ってくる。

I2Cを使ったデータ転送は具体的にはLiDARの内部レジスタのデータの読み出し/書込みという操作である。I2Cを使う場合は、LiDARの内部レジスタの書き換えは500Hzの測定毎に行われると思われるが、それとデータ取得の関係(タイミング)についてデータシートには何も説明が無く、やってみないと結果は分からない。

LiDARのI2Cアドレスについてもマニュアルの説明では0x52と書いてあるが説明図では0x54(0b010101xx)みたいに見える。これも試してみないと分らないが、後のチェックで0x52が正解であることが分った。

(続く)

  

0 件のコメント:

コメントを投稿