EZR
Dependencies: CRC16 FreescaleIAP FreescaleWatchdog GGSProtocol LM75B PIMA Parameters PersistentCircularQueue SerialNumberV2COM mbed-dev-watchdog_2016_03_04
Fork of smartRamalKW by
sensor.cpp@23:85202a52482d, 2015-10-20 (annotated)
- 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?
User | Revision | Line number | New 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 | } |