From b52b161d092258d37be8e357c33522ad7d8cf435 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Sat, 29 Jan 2011 21:59:45 +0100 Subject: provide access to the maximum speed and acceleration from user code and iomap --- AT91SAM7S256/Source/c_cmd.c | 8 ++++++++ AT91SAM7S256/Source/c_cmd.h | 4 +++- AT91SAM7S256/Source/c_output.c | 1 + AT91SAM7S256/Source/c_output.iom | 4 ++-- AT91SAM7S256/Source/d_output.c | 8 ++++++++ AT91SAM7S256/Source/d_output.h | 1 + 6 files changed, 23 insertions(+), 3 deletions(-) diff --git a/AT91SAM7S256/Source/c_cmd.c b/AT91SAM7S256/Source/c_cmd.c index 5370652..87b3e24 100644 --- a/AT91SAM7S256/Source/c_cmd.c +++ b/AT91SAM7S256/Source/c_cmd.c @@ -267,6 +267,8 @@ TYPE_CODE IO_TYPES_OUT[IO_OUT_FIELD_COUNT] = TC_SLONG, //IO_OUT_BLOCK_TACH_COUNT TC_SLONG, //IO_OUT_ROTATION_COUNT TC_UBYTE, //IO_OUT_OPTIONS + TC_SBYTE, //IO_OUT_MAX_SPEED + TC_SBYTE, //IO_OUT_MAX_ACCELERATION //IO_OUT1 TC_UBYTE, //IO_OUT_FLAGS @@ -285,6 +287,8 @@ TYPE_CODE IO_TYPES_OUT[IO_OUT_FIELD_COUNT] = TC_SLONG, //IO_OUT_BLOCK_TACH_COUNT TC_SLONG, //IO_OUT_ROTATION_COUNT TC_UBYTE, //IO_OUT_OPTIONS + TC_SBYTE, //IO_OUT_MAX_SPEED + TC_SBYTE, //IO_OUT_MAX_ACCELERATION //IO_OUT2 TC_UBYTE, //IO_OUT_FLAGS @@ -303,6 +307,8 @@ TYPE_CODE IO_TYPES_OUT[IO_OUT_FIELD_COUNT] = TC_SLONG, //IO_OUT_BLOCK_TACH_COUNT TC_SLONG, //IO_OUT_ROTATION_COUNT TC_UBYTE, //IO_OUT_OPTIONS + TC_SBYTE, //IO_OUT_MAX_SPEED + TC_SBYTE, //IO_OUT_MAX_ACCELERATION }; @@ -1112,6 +1118,8 @@ void cCmdInit(void* pHeader) IO_PTRS_OUT[IO_OUT_BLOCK_TACH_COUNT + i * IO_OUT_FPP] = (void*)&(pOut->BlockTachoCount); IO_PTRS_OUT[IO_OUT_ROTATION_COUNT + i * IO_OUT_FPP] = (void*)&(pOut->RotationCount); IO_PTRS_OUT[IO_OUT_OPTIONS + i * IO_OUT_FPP] = (void*)&(pOut->Options); + IO_PTRS_OUT[IO_OUT_MAX_SPEED + i * IO_OUT_FPP] = (void*)&(pOut->MaxSpeed); + IO_PTRS_OUT[IO_OUT_MAX_ACCELERATION + i * IO_OUT_FPP] = (void*)&(pOut->MaxAcceleration); } //Initialize IO_PTRS_IN diff --git a/AT91SAM7S256/Source/c_cmd.h b/AT91SAM7S256/Source/c_cmd.h index 0b65764..c6e5267 100644 --- a/AT91SAM7S256/Source/c_cmd.h +++ b/AT91SAM7S256/Source/c_cmd.h @@ -196,9 +196,11 @@ enum IO_OUT_BLOCK_TACH_COUNT, IO_OUT_ROTATION_COUNT, IO_OUT_OPTIONS, + IO_OUT_MAX_SPEED, + IO_OUT_MAX_ACCELERATION, }; -#define IO_OUT_FPP 16 +#define IO_OUT_FPP 18 #define IO_OUT_FIELD_COUNT (IO_OUT_FPP * NO_OF_OUTPUTS) // diff --git a/AT91SAM7S256/Source/c_output.c b/AT91SAM7S256/Source/c_output.c index a016361..52f7b31 100644 --- a/AT91SAM7S256/Source/c_output.c +++ b/AT91SAM7S256/Source/c_output.c @@ -134,6 +134,7 @@ void cOutputCtrl(void) { pOut->Flags &= ~UPDATE_PID_VALUES; dOutputSetPIDParameters(Tmp, pOut->RegPParameter, pOut->RegIParameter, pOut->RegDParameter); + dOutputSetMax(Tmp, pOut->MaxSpeed, pOut->MaxAcceleration); } } } diff --git a/AT91SAM7S256/Source/c_output.iom b/AT91SAM7S256/Source/c_output.iom index 09b935e..276bcba 100644 --- a/AT91SAM7S256/Source/c_output.iom +++ b/AT91SAM7S256/Source/c_output.iom @@ -74,8 +74,8 @@ typedef struct UBYTE Overloaded; /* R - True if the motor has been overloaded within speed control regulation */ SBYTE SyncTurnParameter; /* RW - Holds the turning parameter need within MoveBlock */ UBYTE Options; - UBYTE SpareTwo; - UBYTE SpareThree; + SBYTE MaxSpeed; /* RW - Maximum speed for absolute regulation, or 0 for no limit */ + SBYTE MaxAcceleration; /* RW - Maximum acceleration for absolute regulation, or 0 for no limit */ }OUTPUT; diff --git a/AT91SAM7S256/Source/d_output.c b/AT91SAM7S256/Source/d_output.c index 60b9151..408d26c 100644 --- a/AT91SAM7S256/Source/d_output.c +++ b/AT91SAM7S256/Source/d_output.c @@ -291,6 +291,14 @@ void dOutputSetPIDParameters(UBYTE MotorNr, UBYTE NewRegPParameter, UBYTE NewReg pMD->RegDParameter = NewRegDParameter; } +/* Set maximum speed and acceleration */ +void dOutputSetMax(UBYTE MotorNr, SBYTE NewMaxSpeed, SBYTE NewMaxAcceleration) +{ + MOTORDATA * pMD = &(MotorData[MotorNr]); + pMD->MotorMaxSpeed = NewMaxSpeed; + pMD->MotorMaxAcceleration = NewMaxAcceleration; +} + /* Set new regulation time */ void dOutputSetRegulationTime(UBYTE NewRegulationTime) { diff --git a/AT91SAM7S256/Source/d_output.h b/AT91SAM7S256/Source/d_output.h index ca81ecf..f27204b 100644 --- a/AT91SAM7S256/Source/d_output.h +++ b/AT91SAM7S256/Source/d_output.h @@ -79,6 +79,7 @@ void dOutputResetTachoLimit(UBYTE MotorNr); void dOutputResetBlockTachoLimit(UBYTE MotorNr); void dOutputResetRotationCaptureCount(UBYTE MotorNr); void dOutputSetPIDParameters(UBYTE MotorNr, UBYTE NewRegPParameter, UBYTE NewRegIParameter, UBYTE NewRegDParameter); +void dOutputSetMax(UBYTE MotorNr, SBYTE NewMaxSpeed, SBYTE NewMaxAcceleration); void dOutputSetRegulationTime(UBYTE NewRegulationTime); void dOutputSetRegulationOptions(UBYTE NewRegulationOptions); -- cgit v1.2.3