NOVA electronics Inc. MCX514 -
250
-
250
-
// Waiting for termination of driving
void waitdrive(int Axis) {
unsigned short rrData;
ReadReg0(&rrData);
// Reads RR0
while ((rrData & Axis)) {
// If during the driving
ReadReg0(&rrData);
// Reads RR0
}
}
// Waiting for termination of split pulse
void waitsplit(int Axis) {
unsigned short rrData;
ReadReg3(1, Axis, &rrData);
// Reads RR3 Page1
while ((rrData & 0x0800)) {
// If split pulse is in operation
ReadReg3(1, Axis, &rrData);
// Reads RR3 Page1
}
}
//////////////////////////////////////////////////////////////////////////////////
// Operation example functions
//////////////////////////////////////////////////////////////////////////////////
// Automatic home search
// Performs
“
Example 1 Home search using a home signal
”
in
“
2.5.8 Examples of Automatic Home Search
”
.
void homesrch(void ) {
WriteReg2(MCX514_AXIS_X, 0x0800);
// Home signal logical setting STOP1 Low active
// Enables hardware limit
SetModeFilter(MCX514_AXIS_X, 0x0A0F);
// STOP1 Enables the filter
// Filter delay 512
μ
sec
SetModeHMSrch1(MCX514_AXIS_X, 0x8037); // Step
4
Execution
// Step
3
Non-execution
// Step
2
Execution
// Detection signal STOP1
// Search direction
-
direction
// LP,RP clear Disable
// DCC clear Disable
// Step
1
Execution
// Detection signal STOP1
// Search direction
-
direction
SetModeHMSrch2(MCX514_AXIS_X, 0x0000); // Timer between steps Disable
// At the termination of home search, LP, RP clear Disable
SetAcc(MCX514_AXIS_X, 95000);
// Acceleration 95,000 pps/sec
SetStartSpd(MCX514_AXIS_X, 1000);
// Initial speed 1000pps
SetSpeed(MCX514_AXIS_X, 20000);
// Speed of step 1 and 4 20000pps
SetHomeSpd(MCX514_AXIS_X, 500);
// Speed of step 2 500pps
SetPulse(MCX514_AXIS_X, 3500);
// Offset driving pulse count 3500
ExeHMSRC(MCX514_AXIS_X);
// Automatic home search execution
waitdrive(MCX514_AXIS_X);
// Waiting for termination of driving
}
// All axes S-curve acceleration / deceleration driving
void drive(void ) {
SetStartSpd(MCX514_AXIS_ALL, 10);
// Initial speed 10pps
SetSpeed(MCX514_AXIS_ALL, 40000);
// Drive speed 40Kpps
SetAcc(MCX514_AXIS_ALL, 536870911);
// Acceleration (maximum in specification)
SetJerk(MCX514_AXIS_ALL, 89300);
// Jerk 89.3Kpps/sec2
SetPulse(MCX514_AXIS_ALL, 70000);
// Drive pulse
number 70000
SetLp(MCX514_AXIS_ALL, 0);
// Logical position counter Clear
WriteReg3(MCX514_AXIS_ALL, 0x0004);
// Specifies S-curve acceleration/deceleration driving
ExeDRVRL(MCX514_AXIS_ALL);
// Relative position driving
waitdrive(MCX514_AXIS_ALL);
// Waiting for termination of driving
}