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:
Tue Oct 20 21:53:16 2015 +0000
Revision:
23:85202a52482d
Parent:
22:b66e36356dd4
Child:
24:69e7e7079915
correcao na leitura de tensao da carga e verificacao de retorno de potencial

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 23:85202a52482d 63 unsigned char lineChannel = channel == 1 ? 0 : 1;
tpadovani 23:85202a52482d 64 float line = getInstVoltage(lineChannel);
tpadovani 23:85202a52482d 65 float load = getInstVoltage(channel);
tpadovani 23:85202a52482d 66
tpadovani 23:85202a52482d 67 if(load > (line + line*APP_PARAMETERS.LIMITE_TENSAO_SENSOR_V/100)){
tpadovani 23:85202a52482d 68 ledLoad = LED_ON;
tpadovani 7:fe8e827f4d1b 69 return SENSOR_COM_FORNECIMENTO;
tpadovani 7:fe8e827f4d1b 70 } else{
tpadovani 23:85202a52482d 71 ledLoad = LED_OFF;
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 }