2022-09-23 09:56:32 +02:00
|
|
|
/*
|
|
|
|
* SusConverter.h
|
|
|
|
*
|
|
|
|
* Created on: Sep 22, 2022
|
|
|
|
* Author: marius
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef MISSION_CONTROLLER_ACS_SUSCONVERTER_H_
|
|
|
|
#define MISSION_CONTROLLER_ACS_SUSCONVERTER_H_
|
|
|
|
|
2022-10-06 15:38:23 +02:00
|
|
|
#include <fsfw/datapoollocal/LocalPoolVector.h>
|
2022-09-23 09:56:32 +02:00
|
|
|
#include <stdint.h>
|
|
|
|
|
2022-10-06 15:38:23 +02:00
|
|
|
#include "AcsParameters.h"
|
|
|
|
|
|
|
|
class SusConverter {
|
2022-09-23 09:56:32 +02:00
|
|
|
public:
|
2022-10-06 15:38:23 +02:00
|
|
|
SusConverter() {}
|
|
|
|
|
2022-10-10 16:02:57 +02:00
|
|
|
bool checkSunSensorData(const uint16_t susChannel[6]);
|
2022-09-23 09:56:32 +02:00
|
|
|
|
2022-10-10 16:02:57 +02:00
|
|
|
void calcAngle(const uint16_t susChannel[6]);
|
2022-10-06 15:38:23 +02:00
|
|
|
void calibration(const float coeffAlpha[9][10], const float coeffBeta[9][10]);
|
|
|
|
float* calculateSunVector();
|
2022-09-23 09:56:32 +02:00
|
|
|
|
2022-10-10 16:02:57 +02:00
|
|
|
float* getSunVectorSensorFrame(const uint16_t susChannel[6], const float coeffAlpha[9][10],
|
2022-10-06 15:38:23 +02:00
|
|
|
const float coeffBeta[9][10]);
|
2022-09-23 09:56:32 +02:00
|
|
|
|
|
|
|
private:
|
2022-10-06 15:38:23 +02:00
|
|
|
float alphaBetaRaw[2]; //[°]
|
|
|
|
// float coeffAlpha[9][10];
|
|
|
|
// float coeffBeta[9][10];
|
|
|
|
float alphaBetaCalibrated[2]; //[°]
|
|
|
|
float sunVectorBodyFrame[3]; //[-]
|
|
|
|
|
|
|
|
bool validFlag[12] = {returnvalue::OK, returnvalue::OK, returnvalue::OK, returnvalue::OK,
|
|
|
|
returnvalue::OK, returnvalue::OK, returnvalue::OK, returnvalue::OK,
|
|
|
|
returnvalue::OK, returnvalue::OK, returnvalue::OK, returnvalue::OK};
|
|
|
|
|
|
|
|
static const uint8_t GNDREF = 4;
|
|
|
|
uint16_t susChannelValueCheckHigh =
|
2022-09-23 09:56:32 +02:00
|
|
|
4096; //=2^12[Bit]high borderline for the channel values of one sun sensor for validity Check
|
2022-10-06 15:38:23 +02:00
|
|
|
uint8_t susChannelValueCheckLow =
|
2022-09-23 09:56:32 +02:00
|
|
|
0; //[Bit]low borderline for the channel values of one sun sensor for validity Check
|
2022-10-06 15:38:23 +02:00
|
|
|
uint16_t susChannelValueSumHigh =
|
2022-09-23 09:56:32 +02:00
|
|
|
100; // 4096[Bit]high borderline for check if the sun sensor is illuminated by the sun or by
|
|
|
|
// the reflection of sunlight from the moon/earth
|
2022-10-06 15:38:23 +02:00
|
|
|
uint8_t susChannelValueSumLow =
|
2022-09-23 09:56:32 +02:00
|
|
|
0; //[Bit]low borderline for check if the sun sensor is illuminated
|
|
|
|
// by the sun or by the reflection of sunlight from the moon/earth
|
2022-09-27 11:06:11 +02:00
|
|
|
uint8_t completeCellWidth = 140,
|
|
|
|
halfCellWidth = 70; //[°] Width of the calibration cells --> necessary for checking in
|
2022-09-23 09:56:32 +02:00
|
|
|
// which cell a data point should be
|
2022-10-06 15:38:23 +02:00
|
|
|
uint16_t susChannelValueSum = 0;
|
2022-09-23 09:56:32 +02:00
|
|
|
|
|
|
|
AcsParameters acsParameters;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif /* MISSION_CONTROLLER_ACS_SUSCONVERTER_H_ */
|