0

TI-Luminary Micro の Stellaris ステッピング モーター RDK を使用しています。必要に応じて右のフォーラムに移動してください。C# を使用して開発したアプリケーションとデバイスを接続するために、USB シリアル インターフェイスを使用しています。現在、アプリケーションから制御コマンドを送信することに固執しています。次のコマンドを送信することで、ステッピング モーターを開始および停止できます。しかし、目標歩数/秒を設定したいと思います。必要なターゲット ステップでコマンド制御パケットを形成する方法がわかりません。したがって、これに関するヘルプは大歓迎です。

コード:

//To startMotor:

byte[] StartMotorRequest = new byte[] {0xff,0x07,0x13,0x14,0x00,0xcf,0xff,
0x04,0x30,0xcd,0xff,0x09,0x13,0x08,0x00,0xd0,0x30,0x0e,0xcf };
 _serialPort.Write(StartMotorRequest, 0, StartMotorRequest.Length);

//To StopMotor:

byte[] StopMotorRequest = new byte[] { 0xff,0x04,0x31,0xcc};
_serialPort.Write(StopMotorRequest, 0, StopMotorRequest.Length);

ありがとうございました、

バラジ R

4

1 に答える 1

0

Stellaris - ステッピング モーター コントローラー RDK - USB シリアル インターフェイスとコンピューター - 使用方法の詳細

ここでは、USB シリアル インターフェイスを使用して、ステッピング モーターとアプリケーションをインターフェイスするための簡単なチュートリアルを示します。

コマンドは、次の形式でモーター ドライブに送信されます。

{tag} {length} {command} {オプションのコマンド データ バイト} {checksum}

  • {tag} バイトは 0xff です。
  • {length} バイトには、{tag} で始まり {checksum} で終わるコマンド パケットの全体の長さが含まれます。最大パケット長は 255 バイトです。
  • {command} バイトは、送信されるコマンドです。コマンドに基づいて、オプションのコマンド データ バイトが続く場合があります。
  • {checksum} バイトは、コマンド パケット (チェックサムを含む) 内のすべてのバイトの合計がゼロになるような値です。これは、コマンド パケットを検証し、ターゲットがホストによって送信されるコマンド ストリームと同期できるようにするために使用されます。
  • チェックサム バイトの値は、ゼロから残りの値をすべて減算することで計算できます。つまり、コマンドが 0x01 の場合です。チェックサム バイトは、[0-(ff+04+01)]= 0xfc として計算できます。

したがって、データ バイトのない 0x01 コマンドは次のように送信されます。

0xff 0x04 0x01 0xfc

事前定義された目標ステップ/秒でモーターを始動するには

CMD_RUN = 0x30 TAG_CMD = 0xff

説明: モーターがまだ実行されていない場合、現在のパラメーター セットに基づいてモーターの実行を開始します。

指示:

TAG_CMD 0x04 CMD_RUN {チェックサム}

CMD_SET_PARAM_VALUE

説明: パラメータの値を設定します。1 バイトより大きい値を持つパラメーターの場合、パラメーター値のすべてのバイトを指定する必要はありません。提供されない value バイト (つまり、より重要なバイト) は、ゼロが送信されたかのように扱われます。パラメータ値に必要以上のバイトが指定された場合、余分なバイトは無視されます。

指示:

TAG_CMD {長さ} CMD_SET_PARAM_VALUE {パラメータ} {値} [{値} ...] {チェックサム}

PARAM_TARGET_POS 0x08

説明: モーターの目標位置を指定します。

PARAM_USE_ONBOARD_UI 0x1e

説明: オンボード ユーザー インターフェイスをアクティブにするか非アクティブにするかを指定します。


C# のサンプル コードで、目標ステップ数/秒がプリロードされたモーターを開始および停止する

private void InitializeSerialPort()
        {
            try
            {
                String ComPortName = ComPortCB.Text;
                ComPortName = ComPortName.Trim();
                _serialPort = new SerialPort(ComPortName, 115200, Parity.None, 8, StopBits.One);
                _serialPort.Handshake = Handshake.None;
                _serialPort.WriteTimeout = 500;
                _serialPort.ReadTimeout = 500;
                _serialPort.Open();
                _serialPort.Close();
                _SerialPortInitialization = true;
            }
            catch (NullReferenceException excpt)
            {
                MessageBox.Show(excpt.Message);
            }
        }

public static void StartStepperMotor()
        {
            try
            {
                if (!_serialPort.IsOpen)
                    _serialPort.Open();

                byte[] StartMotorRequest = new byte[] { 0xff, 0x04, 0x30, 0xcd };
                byte[] SetParamTargetPosition = new byte[] { 0xFF, 0x09, 0x13, 0x08, 0x00, 0x50, 0xC3, 0x00, 0xCA };

                byte[] GetDataItems;
                GetDataItems = new byte[] { 0xff, 0x06, 0x13, 0x1e, 0x00, 0xca };
                _serialPort.Write(GetDataItems, 0, GetDataItems.Length);

                _serialPort.Write(StartMotorRequest, 0, StartMotorRequest.Length);
                _serialPort.Write(SetParamTargetPosition, 0, SetParamTargetPosition.Length);
                //_serialPort.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
            }
        }

public static void StopStepperMotor()
        {
            try
            {
                if (!_serialPort.IsOpen)
                    _serialPort.Open();

                byte[] StopMotorRequest = new byte[] { 0xff, 0x04, 0x31, 0xcc };
                _serialPort.Write(StopMotorRequest, 0, StopMotorRequest.Length);
                //_serialPort.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
            }
        }

private void RotateStepperMotor(int RequiredAngle)
    {
        try
        {
            if (!_serialPort.IsOpen)
                _serialPort.Open();

            ushort Steps = RequiredAngle;
            byte TargetPositionLSB = (byte)(Steps & 0xFFu);
            byte TargetPositionMSB = (byte)((Steps >> 8) & 0xFFu);

            byte CheckSumByte;
            CheckSumByte = (byte)(0 - (0xFF + 0x09 + 0x13 + 0x08 + TargetPositionLSB + TargetPositionMSB));


            byte[] GetDataItems;
            GetDataItems = new byte[] { 0xff, 0x06, 0x13, 0x1e, 0x00, 0xca };
            _serialPort.Write(GetDataItems, 0, GetDataItems.Length);

            byte[] StartMotorRequest = new byte[] { 0xff, 0x04, 0x30, 0xcd };
            byte[] SetParamTargetPosition = new byte[] { 0xFF, 0x09, 0x13, 0x08, 0x00, TargetPositionLSB, TargetPositionMSB, 0x00, CheckSumByte };

            _serialPort.Write(StartMotorRequest, 0, StartMotorRequest.Length);
            _serialPort.Write(SetParamTargetPosition, 0, SetParamTargetPosition.Length);

            _serialPort.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
        }

    }
于 2014-03-28T14:09:10.540 に答える