public void UpdateConfiguration(PoKeysStepperBoardConfiguration config) { StepperBoardConfig = config; // Configure pulse engine with 8 axes PE.PulseEngineEnabled = 8; PE.PulseGeneratorType = (byte)(0 | (1 << 7)); // Using external pulse generator with IO PE.ChargePumpEnabled = 0; // Don't use charge pump output //config.EmergencySwitchPin = 0; // No Emergency Switch Pin // // 0 - disabled i.e. none // // 1 - default input Pin 55 // // 10 + 10-based pin ID PE.EmergencySwitchPolarity = (byte)(StepperBoardConfig.InvertEmergencySwitchPolarity ? 1 : 0); poKeysDevice.PEv2_SetupPulseEngine(ref PE); // Configure axes... for (int i = 0; i < 8; i++) { // // Set Axis Configuration variables // PE.AxisEnabledInvertMask[i] = 1; // Use inverted axis enabled signal for PoStep drivers ??? PE.AxesConfig[i] = (byte)(ePEv2_AxisConfig.aoENABLED | ePEv2_AxisConfig.aoINTERNAL_PLANNER | ePEv2_AxisConfig.aoPOSITION_MODE); // Use Position mode poKeysDevice.PEv2_GetStatus(ref PE); // Get Status just to DEBUG - Remove for F4toPokeys code // // Enable Soft Limits for steppers with STOPs // - Need to determine which steppers need this from the Config GUI // PE.AxesConfig[i] |= (int)ePEv2_AxisConfig.aoSOFT_LIMIT_ENABLED; poKeysDevice.PEv2_GetStatus(ref PE); // Get Status just to DEBUG - Remove for F4toPokeys code // // My stepper is wired backwards so I added this. // We may want to have a REVERSE Direction option as GUI Config Option // if (StepperBoardConfig.AxisConfig[i].Inverted) { PE.AxesConfig[i] |= (int)ePEv2_AxisConfig.aoINVERTED; } if (StepperBoardConfig.AxisConfig[i].HomeInverted) { PE.AxesConfig[i] |= (int)ePEv2_AxisConfig.aoINVERTED_HOME; } if (StepperBoardConfig.AxisConfig[i].HasHomeSwitch) { PE.PinHomeSwitch[i] = (byte)StepperBoardConfig.AxisConfig[i].PinHomeSwitch; PE.AxesSwitchConfig[i] = (byte)ePEv2_AxisSwitchOptions.aoSWITCH_HOME; } else { PE.PinHomeSwitch[i] = 0; PE.AxesSwitchConfig[i] = (byte)(ePEv2_AxisSwitchOptions.aoSWITCH_HOME | ePEv2_AxisSwitchOptions.aoSWITCH_INVERT_HOME); } poKeysDevice.PEv2_GetStatus(ref PE); // Get Status just to DEBUG - Remove for F4toPokeys code // // Set Axis Switch Configuration variables // PE.AxesSwitchConfig[i] = (int)(ePEv2_AxisSwitchOptions.aoSWITCH_HOME | ePEv2_AxisSwitchOptions.aoSWITCH_INVERT_HOME); poKeysDevice.PEv2_GetStatus(ref PE); // Get Status just to DEBUG - Remove for F4toPokeys code // // Set Axis Variables // // // GUI Configuration Option // - If stepper is 360 degree with a HOME switch we need a GUI configuration option that the pin for the axis. // if (StepperBoardConfig.AxisConfig[i].HasHomeSwitch) { PE.PinHomeSwitch[i] = (byte)StepperBoardConfig.AxisConfig[i].PinHomeSwitch;// Convert.ToByte(i + 8); // For testing, use Pins 8 - 15 as Home Switches for stepper 0 - 7 } else { PE.PinHomeSwitch[i] = 0; } //config.PinHomeSwitch[i] = 8; // #Matevz#: select pin 8 for the home switch for this single axis PE.HomingSpeed[i] = (byte)StepperBoardConfig.AxisConfig[i].HomingSpeed; // 50; // #Matevz#: homing speed is 50% of the maximum speed PE.HomingReturnSpeed[i] = (byte)StepperBoardConfig.AxisConfig[i].HomingReturnSpeed; // 20; // #Matevz#: homing return speed is 20% of the homing speed (therefore 10% of the max speed) PE.MaxSpeed[i] = StepperBoardConfig.AxisConfig[i].MaxSpeed; // 10; // Max speed: 15 kHz PE.MaxAcceleration[i] = StepperBoardConfig.AxisConfig[i].MaxAcceleration; // 0.010f; // Acceleration: 15 kHz / s PE.MaxDecceleration[i] = StepperBoardConfig.AxisConfig[i].MaxDecceleration; // 0.010f; // Acceleration: 15 kHz / s // // Set Soft Limits to 315 degree (3780 steps) X27 stepper position limits PE.SoftLimitMaximum[i] = StepperBoardConfig.AxisConfig[i].SoftLimitMaximum; // 3780; // 315 degree PE.SoftLimitMinimum[i] = StepperBoardConfig.AxisConfig[i].SoftLimitMinimum; // 0; // 0 degree PE.param1 = (byte)i; // Set parameter param1 to the bit mask to indicate what have the above Axis Configs set // // Write (Set) above Axis Configuration // poKeysDevice.PEv2_SetAxisConfiguration(ref PE); // Configure the axis } }