Due to the U.S. Thanksgiving holiday, please expect delayed responses during the week of 11/22.

This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

F28027FのUART(SCI)について

Other Parts Discussed in Thread: LAUNCHXL-F28027F, BOOSTXL-DRV8305EVM, DRV8305

LAUNCHXL-F28027FとBOOSTXL-DRV8305EVMを使用してモータードライバを作っています。

lab05bを元にして、FASTエンコーダの推定結果を外部に出力したくて、SCIを使いたいと考えています。

SCIでの基本的な読み書きは出来るのですが取りこぼしが多いため、FIFOを有効にしています。

ところが、電源投入した起動時に正しく初期化できずに、決まって変な文字列を出力を出した後ホールドして応答しなくなってしまいます。リセットスイッチによってリセットをした後は正常に働くようになります。

この起動時の問題を解決したく、英語版Communityに投稿してみたのですが、英語力の問題か意の通じた返答は得られませんでした。どなたか、お分かりになる方いらっしゃいませんでしょうか?

もしくは、他にFASTエンコーダの値を外部出力するための良い方法をご存知の方はいらっしゃいませんでしょうか?

  • ご質問を、SCIの受信ポートの接続先、手順、通信内容等、
    もう少し具体的に書かれては如何でしょうか。

    以下、送受信ポートはLaunchXLに搭載されたエミュレータ
    ICのシリアルポートに接続されている、PCとLaunchXLとは
    USB接続されていて、通信相手はPC上のアプリケーション。

    Power ONは、PCにLaunchXLをUSB接続する事で行なわれると、
    推測しての回答です。

    ボードの再リセットで、以降は正常に動作するとの事です
    ので、27F側のファームウェアには大きな問題は無い様に
    思えます。

    原因を、下記のとおり推定致しました。

    接続先がPCとのUSB接続手続き中に、27F側でSCIを初期化
    してしまっている為に、USB-シリアル変換器として使用
    しているポートの過渡的な状態を受信ポートが受け取って
    しまっていませんか。

    また、送信先との間で、通信プロトコルをお決め頂いて
    いるのであれば、手順に乱れが生じている事は有りません
    か(XON/OFFも含めて、相手が送信可の合図を待ってる等)。

    対策ですが、SCIの初期化に入る前に、待ち時間を設けて、
    ポートの状態が安定する迄、お待ち頂く方法をお試し下
    さい。

    特に、相手がPCであれば、通信が可能になる迄の時間は、
    27F側から見ると、かなり長く見えると思います。

    以上、ご検討下さい。
  • ご回答ありがとうございます。

    なるほど、PC側の初期化の間に接続しようとして問題が起きている、かもしれないのですね。確認してみます。

    >ご質問を、SCIの受信ポートの接続先、手順、通信内容等、もう少し具体的に書かれては如何でしょうか。

    SCIの接続先は、

    1.LaunchPadのUSB変換を介してPC側のUSB-COMポート,

    2.TX,RXピンからRS485ICを通して、PC側でUSB-RS485変換器を通してCOMポート

    などで試しています。

    手順は、

    LaunchPadの電源はBOOSTXL-DRV8305EVMから供給されるものを使い、USB(JTAGエミュレータ)側は絶縁しています。

    USBケーブルは、電源投入前に接続しています。

    通信内容は、

    単なる短い固定のテキストメッセージです。

    ソースコードは、Ti Employeeの方の書かれたサンプルコード

    https://github.com/256shadesofgrey/instaspin_foc-SCI-eCAP

    をほぼそのまま使っていますが、一か所だけFIFOを使うために、

    #define SCI_FIFO 1

    を入れています。

    halHandle = HAL_init(&hal,sizeof(hal));

    の前にSleepを入れてテストしたいと思います。

  • halHandleの初期化の前にwaitを入れる方法を試してみましたが、うまく動きませんでした。

    sleepのうまい入れ方が分からなかったので、

    for文で1000~100000回ほどループを回して無駄な時間を入れてみたのですが、

    小さい時間では状況は変わらず、大きくするとSCIだけでなくDRV8305の初期化も上手くされないようです。

  • 解決されない場合は恐れ入りますが下記CSCへご質問頂けます様お願い致します。