EZR

Dependencies:   CRC16 FreescaleIAP FreescaleWatchdog GGSProtocol LM75B PIMA Parameters PersistentCircularQueue SerialNumberV2COM mbed-dev-watchdog_2016_03_04

Fork of smartRamalKW by Equipe Firmware V2COM

Committer:
tpadovani
Date:
Mon Oct 19 20:34:15 2015 +0000
Revision:
22:b66e36356dd4
Parent:
16:cae76dbd681f
Child:
23:85202a52482d
debug condicional

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tpadovani 5:1bc98277c257 1 #include "sensor.h"
tpadovani 5:1bc98277c257 2
tpadovani 8:e8d86c66283c 3 extern AnalogIn voltage[];
tpadovani 22:b66e36356dd4 4 extern DigitalOut ledLoad;
tpadovani 5:1bc98277c257 5 extern ParametersBlock APP_PARAMETERS;
tpadovani 5:1bc98277c257 6
tpadovani 8:e8d86c66283c 7 Ticker tickerSamples;
tpadovani 8:e8d86c66283c 8 Timeout samplesTimeout;
tpadovani 8:e8d86c66283c 9 unsigned char currentChannel;
tpadovani 8:e8d86c66283c 10 float sample[DEFAULT_SAMPLES];
tpadovani 8:e8d86c66283c 11 int currentSample;
tpadovani 8:e8d86c66283c 12 bool finished;
tpadovani 8:e8d86c66283c 13 bool timeout;
tpadovani 8:e8d86c66283c 14
tpadovani 22:b66e36356dd4 15 float getInstVoltage(unsigned char channel){
tpadovani 8:e8d86c66283c 16 currentChannel = channel;
tpadovani 8:e8d86c66283c 17 currentSample = 0;
tpadovani 8:e8d86c66283c 18 finished = false;
tpadovani 8:e8d86c66283c 19 timeout = false;
tpadovani 8:e8d86c66283c 20 tickerSamples.attach_us(&readSample, APP_PARAMETERS.SAMPLES_DELAY_US);
tpadovani 8:e8d86c66283c 21 samplesTimeout.attach_us(&timeoutReadingSamples, (DEFAULT_SAMPLES + 2) * APP_PARAMETERS.SAMPLES_DELAY_US);
tpadovani 8:e8d86c66283c 22
tpadovani 8:e8d86c66283c 23 while(!finished && !timeout){
tpadovani 8:e8d86c66283c 24 wait(0.1f);
tpadovani 8:e8d86c66283c 25 }
tpadovani 8:e8d86c66283c 26
tpadovani 22:b66e36356dd4 27 float resp = calculateRMS(APP_PARAMETERS.SAMPLES_VOLTAGE_ANG_COEF.floatValue, APP_PARAMETERS.SAMPLES_VOLTAGE_LIN_COEF.floatValue);
tpadovani 16:cae76dbd681f 28 float limit = 0;
tpadovani 16:cae76dbd681f 29 if(channel == 0){
tpadovani 16:cae76dbd681f 30 limit = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH0_V;
tpadovani 16:cae76dbd681f 31 } else{
tpadovani 16:cae76dbd681f 32 limit = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH1_V;
tpadovani 16:cae76dbd681f 33 }
tpadovani 16:cae76dbd681f 34 if(resp < limit){
tpadovani 16:cae76dbd681f 35 return 0;
tpadovani 16:cae76dbd681f 36 } else{
tpadovani 16:cae76dbd681f 37 return resp;
tpadovani 16:cae76dbd681f 38 }
tpadovani 8:e8d86c66283c 39 }
tpadovani 8:e8d86c66283c 40
tpadovani 22:b66e36356dd4 41 float getInstCurrent(){
tpadovani 22:b66e36356dd4 42 currentChannel = 2;
tpadovani 22:b66e36356dd4 43 currentSample = 0;
tpadovani 22:b66e36356dd4 44 finished = false;
tpadovani 22:b66e36356dd4 45 timeout = false;
tpadovani 22:b66e36356dd4 46 tickerSamples.attach_us(&readSample, APP_PARAMETERS.SAMPLES_DELAY_US);
tpadovani 22:b66e36356dd4 47 samplesTimeout.attach_us(&timeoutReadingSamples, (DEFAULT_SAMPLES + 2) * APP_PARAMETERS.SAMPLES_DELAY_US);
tpadovani 22:b66e36356dd4 48
tpadovani 22:b66e36356dd4 49 while(!finished && !timeout){
tpadovani 22:b66e36356dd4 50 wait(0.1f);
tpadovani 22:b66e36356dd4 51 }
tpadovani 22:b66e36356dd4 52
tpadovani 22:b66e36356dd4 53 float resp = calculateRMS(APP_PARAMETERS.SAMPLES_CURRENT_ANG_COEF.floatValue, APP_PARAMETERS.SAMPLES_CURRENT_LIN_COEF.floatValue);
tpadovani 22:b66e36356dd4 54 float limit = APP_PARAMETERS.LIMITE_CORRENTE_ZERO_A;
tpadovani 22:b66e36356dd4 55 if(resp < limit){
tpadovani 22:b66e36356dd4 56 return 0;
tpadovani 22:b66e36356dd4 57 } else{
tpadovani 22:b66e36356dd4 58 return resp;
tpadovani 22:b66e36356dd4 59 }
tpadovani 22:b66e36356dd4 60 }
tpadovani 22:b66e36356dd4 61
tpadovani 22:b66e36356dd4 62 bool getSensorState(unsigned char channel){
tpadovani 22:b66e36356dd4 63 if(getInstVoltage(channel) > APP_PARAMETERS.LIMITE_TENSAO_SENSOR_V){
tpadovani 22:b66e36356dd4 64 if(channel == APP_PARAMETERS.LOAD_CHANNEL){
tpadovani 22:b66e36356dd4 65 ledLoad = LED_ON;
tpadovani 22:b66e36356dd4 66 }
tpadovani 7:fe8e827f4d1b 67 return SENSOR_COM_FORNECIMENTO;
tpadovani 7:fe8e827f4d1b 68 } else{
tpadovani 22:b66e36356dd4 69 if(channel == APP_PARAMETERS.LOAD_CHANNEL){
tpadovani 22:b66e36356dd4 70 ledLoad = LED_OFF;
tpadovani 22:b66e36356dd4 71 }
tpadovani 7:fe8e827f4d1b 72 return SENSOR_SEM_FORNECIMENTO;
tpadovani 7:fe8e827f4d1b 73 }
tpadovani 5:1bc98277c257 74 }
tpadovani 8:e8d86c66283c 75
tpadovani 8:e8d86c66283c 76 void readSample(){
tpadovani 8:e8d86c66283c 77 sample[currentSample++] = voltage[currentChannel];
tpadovani 8:e8d86c66283c 78 if(currentSample == DEFAULT_SAMPLES){
tpadovani 8:e8d86c66283c 79 finished = true;
tpadovani 8:e8d86c66283c 80 samplesTimeout.detach();
tpadovani 8:e8d86c66283c 81 tickerSamples.detach();
tpadovani 8:e8d86c66283c 82 }
tpadovani 8:e8d86c66283c 83 }
tpadovani 8:e8d86c66283c 84
tpadovani 8:e8d86c66283c 85 void timeoutReadingSamples(){
tpadovani 8:e8d86c66283c 86 tickerSamples.detach();
tpadovani 8:e8d86c66283c 87 timeout = true;
tpadovani 8:e8d86c66283c 88 }
tpadovani 8:e8d86c66283c 89
tpadovani 22:b66e36356dd4 90 float calculateRMS(float angCoef, float linCoef){
tpadovani 8:e8d86c66283c 91 float rms = 0;
tpadovani 8:e8d86c66283c 92 for(int i=0; i < DEFAULT_SAMPLES; i++){
tpadovani 22:b66e36356dd4 93 sample[i] = abs(sample[i]*angCoef + linCoef);
tpadovani 8:e8d86c66283c 94 rms += sample[i]*sample[i];
tpadovani 8:e8d86c66283c 95 }
tpadovani 9:e501499af4ef 96 rms = rms / DEFAULT_SAMPLES;
tpadovani 8:e8d86c66283c 97 return sqrt(rms);
tpadovani 8:e8d86c66283c 98 }