Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r229341f9eb23fec730cdf9b1f8f3960de2daf384 -r166d929af60e9051ca100b6914d0bc0af76576b5 --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 229341f9eb23fec730cdf9b1f8f3960de2daf384) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 166d929af60e9051ca100b6914d0bc0af76576b5) @@ -35,6 +35,10 @@ #define ENERGIZED 1 ///< 1 for energized valve. #define ALL_VALVES_DEENERGIZED 0x0000 ///< 0 in U16 bit field for all valves. +#define VALVE_PWM_PERIOD 50 ///< Valve PWM Period in 0.1 us res ( 20kHz ) +#define VALVE_PWM_LOW ( VALVE_PWM_PERIOD * 0.2 ) ///< Valve low PWM percentage +#define VALVE_PWM_PULL_IN 100 ///< Valve 'strike' period at 100% PWM in ms + #define MAX_VALVE_STATE_MISMATCH_TIMER_COUNT (100 / TASK_PRIORITY_INTERVAL ) ///< Maximum time commanded valves state can fail to match read back valve states in a row. #define VALVES_STATE_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< Interval ( ms / task time) at which valves states are published on CAN bus. #define DATA_PUBLISH_COUNTER_START_COUNT 50 ///< Data publish counter start count. @@ -80,7 +84,10 @@ void initValves( void ) { U32 i; + U16 valvePWMEnable; + U08 valveUFPWMEnable; + // initialize commanded valve states for ( i = 0; i < DD_NUM_OF_VALVES; i++ ) { @@ -94,6 +101,14 @@ valveSensedStates[ i ].ovInitData = DEENERGIZED; valveSensedStates[ i ].ovData = DEENERGIZED; valveSensedStates[ i ].override = OVERRIDE_RESET; + if ( i <= LAST_HYD_VALVE ) + { + valvePWMEnable |= 0x01 << i; + } + else if ( ( i >= FIRST_UF_VALVE ) && ( i <= LAST_UF_VALVE ) ) + { + valveUFPWMEnable |= 0x01 << ( i - FIRST_UF_VALVE ); + } } //Initialize the commanded valve states @@ -104,6 +119,70 @@ valvesStatesPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; // reset valves states publication timer readCommandedValveStates(); + // initially set valve PWM configuration and enable + setFPGAD14PWMPullIn( VALVE_PWM_PULL_IN ); + setFPGAD14PWMLow( VALVE_PWM_LOW ); + setFPGAD14PWMPeriod( VALVE_PWM_PERIOD ); + + setFPGAD52PWMPullIn( VALVE_PWM_PULL_IN ); + setFPGAD52PWMLow( VALVE_PWM_LOW ); + setFPGAD52PWMPeriod( VALVE_PWM_PERIOD ); + + setFPGAD8PWMPullIn( VALVE_PWM_PULL_IN ); + setFPGAD8PWMLow( VALVE_PWM_LOW ); + setFPGAD8PWMPeriod( VALVE_PWM_PERIOD ); + + setFPGAD54PWMPullIn( VALVE_PWM_PULL_IN ); + setFPGAD54PWMLow( VALVE_PWM_LOW ); + setFPGAD54PWMPeriod( VALVE_PWM_PERIOD ); + + setFPGAD53PWMPullIn( VALVE_PWM_PULL_IN ); + setFPGAD53PWMLow( VALVE_PWM_LOW ); + setFPGAD53PWMPeriod( VALVE_PWM_PERIOD ); + + setFPGAD34PWMPullIn( VALVE_PWM_PULL_IN ); + setFPGAD34PWMLow( VALVE_PWM_LOW ); + setFPGAD34PWMPeriod( VALVE_PWM_PERIOD ); + + setFPGAD64PWMPullIn( VALVE_PWM_PULL_IN ); + setFPGAD64PWMLow( VALVE_PWM_LOW ); + setFPGAD64PWMPeriod( VALVE_PWM_PERIOD ); + + setFPGAD31PWMPullIn( VALVE_PWM_PULL_IN ); + setFPGAD31PWMLow( VALVE_PWM_LOW ); + setFPGAD31PWMPeriod( VALVE_PWM_PERIOD ); + + setFPGAD65PWMPullIn( VALVE_PWM_PULL_IN ); + setFPGAD65PWMLow( VALVE_PWM_LOW ); + setFPGAD65PWMPeriod( VALVE_PWM_PERIOD ); + + setFPGAD35PWMPullIn( VALVE_PWM_PULL_IN ); + setFPGAD35PWMLow( VALVE_PWM_LOW ); + setFPGAD35PWMPeriod( VALVE_PWM_PERIOD ); + + setFPGAD40PWMPullIn( VALVE_PWM_PULL_IN ); + setFPGAD40PWMLow( VALVE_PWM_LOW ); + setFPGAD40PWMPeriod( VALVE_PWM_PERIOD ); + + setFPGAD47PWMPullIn( VALVE_PWM_PULL_IN ); + setFPGAD47PWMLow( VALVE_PWM_LOW ); + setFPGAD47PWMPeriod( VALVE_PWM_PERIOD ); + + setFPGAD3PWMPullIn( VALVE_PWM_PULL_IN ); + setFPGAD3PWMLow( VALVE_PWM_LOW ); + setFPGAD3PWMPeriod( VALVE_PWM_PERIOD ); + + setFPGAM4PWMPullIn( VALVE_PWM_PULL_IN ); + setFPGAM4PWMLow( VALVE_PWM_LOW ); + setFPGAM4PWMPeriod( VALVE_PWM_PERIOD ); + + setFPGAUFValvePWMPullIn( VALVE_PWM_PULL_IN ); + setFPGAUFValvePWMLow( VALVE_PWM_LOW ); + setFPGAUFValvePWMPeriod( VALVE_PWM_PERIOD ); + + setFPGAValvePWMEnable( valvePWMEnable ); + setFPGAUFValvePWMEnable( valveUFPWMEnable ); + // initially set all valves to de-energized state via FPGA setFPGAValveStates( commandedValvesStates ); setFPGABCValveStates( commandedBCValveStates );