Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r83352606f453107c3ac4636c8da0e8a65b17c723 -re8cd5cfca4acc41b33c012e4d8aa6e76f0c3c661 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 83352606f453107c3ac4636c8da0e8a65b17c723) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision e8cd5cfca4acc41b33c012e4d8aa6e76f0c3c661) @@ -238,6 +238,7 @@ { setMainPrimaryHeaterPWM ( HEATERS_MIN_DUTY_CYCLE ); setSmallPrimaryHeaterPWM ( HEATERS_MIN_DUTY_CYCLE ); + primaryHeatersExecState = PRIMARY_HEATERS_EXEC_STATE_OFF; } /*********************************************************************//** @@ -389,7 +390,7 @@ { startPrimaryHeater(); state = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; - temporaryStartROPump(); + //temporaryStartROPump(); temporaryStartFan(); } //state = PRIMARY_HEATERS_EXEC_STATE_CONTROL_TO_TARGET; @@ -472,7 +473,7 @@ temporaryStartROPump(); temporaryStartFan(); } - //state = TRIMMER_HEATER_EXEC_STATE_CONTROL_TO_TARGET; + state = TRIMMER_HEATER_EXEC_STATE_CONTROL_TO_TARGET; } // TODO remove this code for testing @@ -574,7 +575,9 @@ } else if ( heater == TRIMMER_HEATER ) { - // TODO setup the trimmer heater + F32 inletTemperatrue = getTemperatureValue ( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR ); + trimmerHeaterDutyCycle = fabs(trimmerHeaterTargetTemperature - inletTemperatrue) * DELTA_TEMP_TO_PWM_DUTY_CYCLE_CONVERSION; + resetPIController ( PI_CONTROLLER_ID_TRIMMER_HEATER, trimmerHeaterDutyCycle ); } } @@ -594,19 +597,19 @@ { #ifdef DEBUG_ENABLED { - char debugTempStr[ 256 ]; - sprintf( debugTempStr, "MPDuty: %6.2f, SPDuty: %6.2f, THDuty: %6.2f, TPi: %6.2f, TPo: %6.2f, TD1: %6.2f, " - "TD2: %6.2f, TRo: %6.2f, TDi: %6.2f, TPh: %6.2f, TTh: %6.2f, PTarg: %6.2f\r\n", - mainPrimaryHeaterDutyCycle, smallPrimaryHeaterDutyCycle, trimmerHeaterDutyCycle, - getTemperatureValue ( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ), - getTemperatureValue ( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR ), - getTemperatureValue ( TEMPSENSORS_CONDUCTIVITY_SENSOR_1_TEMP_SENSOR ), - getTemperatureValue ( TEMPSENSORS_CONDUCTIVITY_SENSOR_2_TEMP_SENSOR ), - getTemperatureValue ( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR ), - getTemperatureValue ( TEMPSENSORS_INLET_DIALYSATE_TEMP_SENSOR ), - getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP_SENSOR ), - getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP_SESNOR ), - primaryHeaterTargetTemperature ); + char debugTempStr[ 256 ]; + sprintf( debugTempStr, "MPDuty: %6.2f, SPDuty: %6.2f, THDuty: %6.2f, TPi: %6.2f, TPo: %6.2f, TD1: %6.2f, " + "TD2: %6.2f, TRo: %6.2f, TDi: %6.2f, TPh: %6.2f, TTh: %6.2f, PTarg: %6.2f, TTarg: %6.2f\r\n", + mainPrimaryHeaterDutyCycle, smallPrimaryHeaterDutyCycle, trimmerHeaterDutyCycle, + getTemperatureValue ( TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_CONDUCTIVITY_SENSOR_1_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_CONDUCTIVITY_SENSOR_2_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_INLET_DIALYSATE_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP_SENSOR ), + getTemperatureValue ( TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP_SESNOR ), + primaryHeaterTargetTemperature, trimmerHeaterTargetTemperature); sendDebugData ( (U08*)debugTempStr, strlen(debugTempStr) ); } #endif Index: firmware/App/Controllers/TemperatureSensors.c =================================================================== diff -u -r5206a101e662f660baaf6dc919441916c4a4c966 -re8cd5cfca4acc41b33c012e4d8aa6e76f0c3c661 --- firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision 5206a101e662f660baaf6dc919441916c4a4c966) +++ firmware/App/Controllers/TemperatureSensors.c (.../TemperatureSensors.c) (revision e8cd5cfca4acc41b33c012e4d8aa6e76f0c3c661) @@ -353,15 +353,6 @@ BOOL isADCValid = TRUE; F32 temperature; - - // TODO For testing only. REMOVE - /*adc = adc & MASK_OFF_U32_MSB; - temperature = getADC2TempConversion ( adc, - tempSensorsConstants [ TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ] [ ADC_READ_GAIN_INDEX ], - tempSensorsConstants [ TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ] [ ADC_READ_REF_RESISTANCE_INDEX ], - tempSensorsConstants [ TEMPSENSORS_INLET_PRIMARY_HEATER_TEMP_SENSOR ] [ ADC_READ_0_DEG_RESISTANCE_INDEX ] );*/ - // TODO for testing only. REMOVE - /* * check if the index is not the heaters * Mask the values accordingly @@ -593,8 +584,8 @@ processADCRead( TEMPSENSORS_OUTLET_PRIMARY_HEATER_TEMP_SENSOR, getFPGATPoTemp(), getFPGARTDErrorCount(), getFPGARTDReadCount() ); processADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_1_TEMP_SENSOR, getFPGACD1Temp(), 0, 0 ); processADCRead( TEMPSENSORS_CONDUCTIVITY_SENSOR_2_TEMP_SENSOR, getFPGACD2Temp(), 0, 0 ); - //processADCRead( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR, getFPGATHDoTemp() ); - //processADCRead( TEMPSENSORS_INLET_DIALYSATE_TEMP_SENSOR, getFPGATDiTemp() ); + processADCRead( TEMPSENSORS_OUTLET_REDUNDANCY_TEMP_SENSOR, getFPGATHDoTemp(), 0, 0 ); + processADCRead( TEMPSENSORS_INLET_DIALYSATE_TEMP_SENSOR, getFPGATDiTemp(), 0, 0 ); //processADCRead( TEMPSENSORS_PRIMARY_HEATER_INTERNAL_TEMP_SENSOR, getFPGAPrimaryHeaterTemp() ); //processADCRead( TEMPSENSORS_TRIMMER_HEATER_INTERNAL_TEMP_SESNOR, getFPGATrimmerHeaterTemp() ); Index: firmware/App/Services/FPGA.c =================================================================== diff -u -r31b53220d894e272a8f9a8a49d3c9110150489db -re8cd5cfca4acc41b33c012e4d8aa6e76f0c3c661 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision 31b53220d894e272a8f9a8a49d3c9110150489db) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision e8cd5cfca4acc41b33c012e4d8aa6e76f0c3c661) @@ -42,9 +42,9 @@ #define FPGA_PAGE_SIZE 256 #define FPGA_EXPECTED_ID 0x60 -#define FPGA_HEADER_START_ADDR 256 // TODO - update these after re-arranging w/ Randy -#define FPGA_BULK_READ_START_ADDR 262 -#define FPGA_BULK_WRITE_START_ADDR 2 +#define FPGA_HEADER_START_ADDR 0x0000 +#define FPGA_BULK_READ_START_ADDR 0x0100 +#define FPGA_BULK_WRITE_START_ADDR 0x0010 #define FPGA_WRITE_CMD_BUFFER_LEN (FPGA_PAGE_SIZE+8) #define FPGA_READ_CMD_BUFFER_LEN 8 @@ -75,81 +75,86 @@ #pragma pack(push,1) typedef struct { - U08 fpgaId; - U08 fpgaRev; + U08 fpgaId; ///< Reg 0. FPGA ID code. Checked against expected value at power up to verify basic FPGA communication and operation. + U08 fpgaRev; ///< Reg 1. FPGA revision being reported. } FPGA_HEADER_T; // read only on FPGA typedef struct // TODO - add all sensor readings to this structure per FPGA register map { - U32 fpgaLCA1; - U32 fpgaLCA2; - U32 fpgaADC1Temp; + U32 fpgaLCA1; ///< Reg 256. ADC1 channel 0 - load cell A1. + U32 fpgaLCB1; ///< Reg 260. ADC1 channel 1 - load cell B1. + U32 fpgaADC1Temp; ///< Reg 264. ADC1 channel 2 - internal temperature. - U32 fpgaLCB1; - U32 fpgaLCB2; - U32 fpgaADC2Temp; + U32 fpgaLCA2; ///< Reg 268. ADC2 channel 0 - load cell A2. + U32 fpgaLCB2; ///< Reg 272. ADC2 channel 1 - load cell B2. + U32 fpgaADC2Temp; ///< Reg 276. ADC2 channel 2 - internal temperature. - U32 fpgaCD1Temp; // Conductivity sensor 1 in the mixing area - U32 fpgaCD2Temp; - U32 fpgaTPiTemp; - U32 fpgaTPoTemp; - U32 fpgaRTDTemp; + U32 fpgaCD1; ///< Reg 280. ADC RTD channel 0 - conductivity sensor 1. + U32 fpgaCD2; ///< Reg 284. ADC RTD channel 1 - conductivity sensor 2. + U32 fpgaTPoTemp; ///< Reg 288. ADC RTD channel 2 - conductivity sensor CPi temperature. + U32 fpgaTPiTemp; ///< Reg 292. ADC RTD channel 3 - conductivity sensor CPo temperature. + U32 fpgaRTDTemp; ///< Reg 296. ADC RTD channel 4 - internal temperature. - U32 fpgaTHDo; // TRo - U32 fpgaTHDoTemp; + U32 fpgaTHDo; ///< Reg 300. ADC THDo channel 0 - temperature. + U32 fpgaTHDoTemp; ///< Reg 304. ADC THDo channel 1 - internal temperature. - U32 fpgaTDi; - U32 fpgaTDiTemp; // Dialysate inlet sensor + U32 fpgaTDi; ///< Reg 308. ADC TDi channel 0 - temperature. + U32 fpgaTDiTemp; ///< Reg 312. ADC TDi channel 1 - internal temperature. - U32 fpgaCPoEc; - U32 fpgaCPoTds; + U32 fpgaCPo; ///< Reg 316. Conductivity CPo. + U32 fpgaCPi; ///< Reg 320. Conductivity CPi. - U16 fpgaStatus; + U16 fpgaPrimaryHeaterIntTemp; ///< Reg 324. Primary heater temperature. + U16 fpgaPrimaryHeaterIntJunctionTemp; ///< Reg 326. Primary heater internal temperature. + U16 fpgaTrimmerHeaterIntTemp; ///< Reg 328. Trimmer heater temperature. + U16 fpgaTrimmerHeaterIntJunctionTemp; ///< Reg 330. Trimmer heater internal temperature. - U16 fpgaPrimaryHeaterIntTemp; - U16 fpgaPrimaryHeaterIntJunctionTemp; - U16 fpgaTrimmerHeaterIntTemp; - U16 fpgaTrimmerHeaterIntJunctionTemp; + U16 fpgaDrainPumpSpeed; ///< Reg 332. Drain pump speed feedback. + U16 fpgaROFlowRate; ///< Reg 334. RO flow. - U16 fpgaDrainPumpSpeed; - U16 fpgaROFlowRate; - U16 fpgaValveStates; + U16 accelX; ///< Reg 336. Accelerometer X axis data. + U16 accelY; ///< Reg 338. Accelerometer Y axis data. + U16 accelZ; ///< Reg 340. Accelerometer Z axis data. + U16 accelXMax; ///< Reg 342. Accelerometer X axis max data (since last read). + U16 accelYMax; ///< Reg 344. Accelerometer Y axis max data (since last read). + U16 accelZMax; ///< Reg 346. Accelerometer Z axis max data (since last read). + U16 accelFaultRegister; ///< Reg 348. Accelerometer fault register. + U16 accelSampleCounter; ///< Reg 350. Accelerometer sample count. - U08 fpgaIOErrorCntProcessor; - U08 fpgaIOErrorCntPC; - U08 fpgaADC1ReadCnt; - U08 fpgaADC1ErrorCnt; - U08 fpgaADC2ReadCnt; - U08 fpgaADC2ErrorCnt; - U08 fpgaRTDReadCnt; - U08 fpgaRTDErrorCnt; - U08 fpgaTHDoReadCnt; - U08 fpgaTHDoErrorCnt; - U08 fpgaTDiReadCnt; - U08 fpgaTDiErrorCnt; - U08 fpgaPrimaryHeaterFlags; - U08 fpgaPrimaryHeaterReadCnt; - U08 fpgaTrimmerHeaterFlags; - U08 fpgaTrimmerHeaterReadCnt; - U08 fpgaCPoTempConf; - U08 fpgaCPoSanityData; - U08 fpgaCPoReadCnt; - U08 fpgaCPoErrorCnt; + U08 fpgaIOErrorCntProcessor; ///< Reg 352. + U08 fpgaIOErrorCntPC; ///< Reg 353. + U08 fpgaADC1ReadCnt; ///< Reg 354. + U08 fpgaADC1ErrorCnt; ///< Reg 355. + U08 fpgaADC2ReadCnt; ///< Reg 356. + U08 fpgaADC2ErrorCnt; ///< Reg 357. + U08 fpgaRTDReadCnt; ///< Reg 358. + U08 fpgaRTDErrorCnt; ///< Reg 359. + U08 fpgaTHDoReadCnt; ///< Reg 360. + U08 fpgaTHDoErrorCnt; ///< Reg 361. + U08 fpgaTDiReadCnt; ///< Reg 362. + U08 fpgaTDiErrorCnt; ///< Reg 363. + U08 fpgaPrimaryHeaterFlags; ///< Reg 364. + U08 fpgaPrimaryHeaterReadCnt; ///< Reg 365. + U08 fpgaTrimmerHeaterFlags; ///< Reg 366. + U08 fpgaTrimmerHeaterReadCnt; ///< Reg 367. + U08 fpgaCPoFault; ///< Reg 368. + U08 fpgaCPoReadCnt; ///< Reg 369. + U08 fpgaCPoErrorCnt; ///< Reg 370. + U08 fpgaCPiFault; ///< Reg 371. + U08 fpgaCPiReadCnt; ///< Reg 372. + U08 fpgaCPiErrorCnt; ///< Reg 373. + U08 fpgaCP1CP2Fault; ///< Reg 374. + U08 fpgaReserved1; ///< Reg 375. + + U16 fpgaValveStates; ///< Reg 376. } DG_FPGA_SENSORS_T; typedef struct { - U16 fpgaCPoProbeType; +// U16 fpgaCPoProbeType; +// U16 fpgaCPiProbeType; U16 fpgaDrainPumpSetSpeed; U16 fpgaValveStates; - //U08 fpgaID; - //U08 fpgaRev; - //U08 fpgaADC1Control; - //U08 fpgaDiag; - //U08 fpgaADC2Control; - //U08 fpgaRTDControl; - //U08 fpgaTHDoControl; - //U08 fpgaTDiControl; } FPGA_ACTUATORS_T; #pragma pack(pop) @@ -218,8 +223,12 @@ memset( &fpgaHeader, 0, sizeof(FPGA_HEADER_T) ); memset( &fpgaSensorReadings, 0, sizeof(DG_FPGA_SENSORS_T) ); memset( &fpgaActuatorSetPoints, 0, sizeof(FPGA_ACTUATORS_T) ); - fpgaActuatorSetPoints.fpgaValveStates = 0x015F; // TODO - temporary init per Blaine while testing - remove later. + // TODO Remove the below line + // Initialize the valves + fpgaActuatorSetPoints.fpgaValveStates = 0x015F; + // TODO Remove the above line + // initialize fpga comm buffers memset( &fpgaWriteCmdBuffer, 0, FPGA_WRITE_CMD_BUFFER_LEN ); memset( &fpgaReadCmdBuffer, 0, FPGA_READ_CMD_BUFFER_LEN ); @@ -499,8 +508,8 @@ // construct read command to read 3 registers starting at address 0 fpgaReadCmdBuffer[ 0 ] = FPGA_READ_CMD_CODE; - fpgaReadCmdBuffer[ 1 ] = 0x06; // start at FPGA address 6 - fpgaReadCmdBuffer[ 2 ] = 0x00; + fpgaReadCmdBuffer[ 1 ] = GET_LSB_OF_WORD( FPGA_HEADER_START_ADDR ); + fpgaReadCmdBuffer[ 2 ] = GET_MSB_OF_WORD( FPGA_HEADER_START_ADDR ); fpgaReadCmdBuffer[ 3 ] = sizeof(FPGA_HEADER_T); crc = crc16( fpgaReadCmdBuffer, FPGA_READ_CMD_HDR_LEN ); fpgaReadCmdBuffer[ 4 ] = GET_MSB_OF_WORD( crc ); @@ -585,17 +594,17 @@ // construct bulk write command to write actuator data registers starting at address 3 (TODO - change address later) fpgaWriteCmdBuffer[ 0 ] = FPGA_WRITE_CMD_CODE; - fpgaWriteCmdBuffer[ 1 ] = 0x00; // start at FPGA address 0 - fpgaWriteCmdBuffer[ 2 ] = 0x00; + fpgaWriteCmdBuffer[ 1 ] = GET_LSB_OF_WORD( FPGA_BULK_WRITE_START_ADDR ); + fpgaWriteCmdBuffer[ 2 ] = GET_MSB_OF_WORD( FPGA_BULK_WRITE_START_ADDR ); fpgaWriteCmdBuffer[ 3 ] = sizeof(FPGA_ACTUATORS_T); memcpy( &( fpgaWriteCmdBuffer[ FPGA_WRITE_CMD_HDR_LEN ] ), &fpgaActuatorSetPoints, sizeof( FPGA_ACTUATORS_T ) ); crc = crc16( fpgaWriteCmdBuffer, FPGA_WRITE_CMD_HDR_LEN + sizeof( FPGA_ACTUATORS_T ) ); fpgaWriteCmdBuffer[ FPGA_WRITE_CMD_HDR_LEN + sizeof( FPGA_ACTUATORS_T ) ] = GET_MSB_OF_WORD( crc ); fpgaWriteCmdBuffer[ FPGA_WRITE_CMD_HDR_LEN + sizeof( FPGA_ACTUATORS_T ) + 1 ] = GET_LSB_OF_WORD( crc ); // construct bulk read command to read sensor data registers starting at address 8 fpgaReadCmdBuffer[ 0 ] = FPGA_READ_CMD_CODE; - fpgaReadCmdBuffer[ 1 ] = 0x00; // start at FPGA address 0x100 (256) - fpgaReadCmdBuffer[ 2 ] = 0x01; + fpgaReadCmdBuffer[ 1 ] = GET_LSB_OF_WORD( FPGA_BULK_READ_START_ADDR ); + fpgaReadCmdBuffer[ 2 ] = GET_MSB_OF_WORD( FPGA_BULK_READ_START_ADDR ); fpgaReadCmdBuffer[ 3 ] = sizeof(DG_FPGA_SENSORS_T); crc = crc16( fpgaReadCmdBuffer, FPGA_READ_CMD_HDR_LEN ); fpgaReadCmdBuffer[ 4 ] = GET_MSB_OF_WORD( crc ); @@ -902,9 +911,9 @@ * 7 - VDr.\n * 8 - VPi.\n * 9 - VSP.\n - * 10- VR1.\n - * 11- VR2.\n - * 12..15 - reserved or unused. + * 10..11 - reserved (spare).\n + * 12- VPd.\n + * 13..15 - reserved or unused. * @details * Inputs : none * Outputs : fpgaActuatorSetPoints.fpgaValveStates @@ -976,7 +985,7 @@ *************************************************************************/ U16 getFPGAStatus( void ) { - return fpgaSensorReadings.fpgaStatus; + return 0;//fpgaSensorReadings.fpgaStatus; } /*********************************************************************//** @@ -1120,7 +1129,7 @@ *************************************************************************/ U32 getFPGACD1Temp( void ) { - return fpgaSensorReadings.fpgaCD1Temp; + return 0;//fpgaSensorReadings.fpgaCD1Temp; } /*********************************************************************//** @@ -1135,7 +1144,7 @@ *************************************************************************/ U32 getFPGACD2Temp( void ) { - return fpgaSensorReadings.fpgaCD2Temp; + return 0;//fpgaSensorReadings.fpgaCD2Temp; } /*********************************************************************//** @@ -1180,7 +1189,7 @@ *************************************************************************/ U32 getFPGATHDoTemp( void ) { - return fpgaSensorReadings.fpgaTHDoTemp; + return fpgaSensorReadings.fpgaTHDo; } /*********************************************************************//** @@ -1346,6 +1355,3 @@ { return fpgaSensorReadings.fpgaTrimmerHeaterReadCnt; } - - - Index: firmware/App/Tasks/TaskGeneral.c =================================================================== diff -u -r83352606f453107c3ac4636c8da0e8a65b17c723 -re8cd5cfca4acc41b33c012e4d8aa6e76f0c3c661 --- firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 83352606f453107c3ac4636c8da0e8a65b17c723) +++ firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision e8cd5cfca4acc41b33c012e4d8aa6e76f0c3c661) @@ -50,10 +50,10 @@ execSystemCommTx(); // Primary heaters state machine - //execPrimaryHeaters(); + execPrimaryHeaters(); // Trimmer heater state machine - execTrimmerHeater(); + //execTrimmerHeater(); // toggle GPIO to indicate general task has executed // gioToggleBit( gioPORTB, 1 );