我是与Stellaris步进电机RDK从TI-发光微.如果需要的话把我移到右边论坛。我使用与我用C#开发的应用程序进行接口。目前,我不得不从我的应用程序中发送控制命令。我可以通过发送以下命令来启动和停止步进电机。但我想设定目标步骤/秒。我不明白如何形成一个命令控制包与所需的目标步骤。因此,任何有关这方面的帮助都是非常感谢的。
代码:
//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);谢谢,
Balaji.R
发布于 2014-03-28 14:09:10
带计算机的Stellaris -步进电机控制器RDK- USB串行接口.使用细节
这里是一个简单的教程,让您的步进电机与您的应用程序使用USB串行接口。
命令以下列格式发送到电机驱动器:
{tag} {length} { command } {可选命令数据字节}{校验和}
因此,不带数据字节的0x01命令将按以下方式发送:
0xff 0x04 0x01 0xfc
用预定义的目标步骤/秒启动电机
CMD_RUN = 0x30 TAG_CMD = 0xff
描述:如果电机尚未运行,则根据当前参数集启动电机运行。
命令:
TAG_CMD 0x04 CMD_RUN {校验和} CMD_SET_PARAM_VALUE
描述:设置参数的值。对于值大于单个字节的参数,并不需要提供参数值的所有字节;未提供的值字节(即更重要的字节)被视为传递了零。如果提供比参数值所需的字节更多的字节,则将忽略额外的字节。
命令:
TAG_CMD {length} CMD_SET_PARAM_VALUE {param} {value} {value} .{校验和} PARAM_TARGET_POS 0x08
描述:指定电机的目标位置。
PARAM_USE_ONBOARD_UI 0x1e
说明:指定星上用户界面应该是活动的还是非活动的.
C#中启动和停止带有目标步骤/Sec预加载电机的示例代码
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!");
}
}https://stackoverflow.com/questions/22497950
复制相似问题