Anton Boyt
/
ADC_acs712
ADC_acs712
main.cpp@1:73c1e8f734a4, 2015-02-16 (annotated)
- Committer:
- margadon
- Date:
- Mon Feb 16 07:55:22 2015 +0000
- Revision:
- 1:73c1e8f734a4
- Parent:
- 0:99e1e788eb9a
ACS712
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
margadon | 0:99e1e788eb9a | 1 | #include "mbed.h" |
margadon | 0:99e1e788eb9a | 2 | |
margadon | 0:99e1e788eb9a | 3 | //Serial pc(D8, D2);/* Serial1 tx rx */ |
margadon | 0:99e1e788eb9a | 4 | Serial pc(USBTX, USBRX); // tx, rx |
margadon | 0:99e1e788eb9a | 5 | AnalogIn analog_value(PA_0); |
margadon | 0:99e1e788eb9a | 6 | DigitalOut myled(LED1); |
margadon | 0:99e1e788eb9a | 7 | |
margadon | 0:99e1e788eb9a | 8 | Ticker t1,t2,tprint; |
margadon | 0:99e1e788eb9a | 9 | long *p1;// указатель на массив значений ADC |
margadon | 0:99e1e788eb9a | 10 | long massAdc[100],massAdcMain[100] ; //массив значений ADC и массив для усреднения в main |
margadon | 0:99e1e788eb9a | 11 | // значения измеренные АЦП value0- среднее, value - выпрямленное Raw - неусредненное |
margadon | 0:99e1e788eb9a | 12 | long value, value0, valueRaw0, valueRaw, value2; |
margadon | 0:99e1e788eb9a | 13 | int zeroLevelAdc=0; |
margadon | 1:73c1e8f734a4 | 14 | int max,min,amp; |
margadon | 0:99e1e788eb9a | 15 | int aver; |
margadon | 0:99e1e788eb9a | 16 | |
margadon | 0:99e1e788eb9a | 17 | //обработчик который формирует массив значений ADC по которому усредняется |
margadon | 0:99e1e788eb9a | 18 | long massHandler(long incom/*входная вел*/, int n/*длина массива*/){ |
margadon | 0:99e1e788eb9a | 19 | int average=0; |
margadon | 1:73c1e8f734a4 | 20 | p1=massAdc; |
margadon | 0:99e1e788eb9a | 21 | for (int i=n-1;i>0;i--){ |
margadon | 0:99e1e788eb9a | 22 | massAdc[i]=massAdc[i-1]; |
margadon | 0:99e1e788eb9a | 23 | average=average+massAdc[i]; |
margadon | 0:99e1e788eb9a | 24 | } |
margadon | 0:99e1e788eb9a | 25 | massAdc[0]=incom; |
margadon | 0:99e1e788eb9a | 26 | average=(average+massAdc[0])/n; |
margadon | 0:99e1e788eb9a | 27 | return average; |
margadon | 0:99e1e788eb9a | 28 | }; |
margadon | 1:73c1e8f734a4 | 29 | |
margadon | 1:73c1e8f734a4 | 30 | //long massHandler2(long incom/*входная вел*/, int n/*длина массива*/){ |
margadon | 1:73c1e8f734a4 | 31 | /* |
margadon | 1:73c1e8f734a4 | 32 | int average=0; |
margadon | 1:73c1e8f734a4 | 33 | p1=massAdc; |
margadon | 1:73c1e8f734a4 | 34 | for (int i=n-1;i>0;i--){ |
margadon | 1:73c1e8f734a4 | 35 | massAdc[i]=massAdc[i-1]; |
margadon | 1:73c1e8f734a4 | 36 | average=average+massAdc[i]; |
margadon | 1:73c1e8f734a4 | 37 | } |
margadon | 1:73c1e8f734a4 | 38 | massAdc[0]=incom; |
margadon | 1:73c1e8f734a4 | 39 | average=(average+massAdc[0])/n; |
margadon | 1:73c1e8f734a4 | 40 | return average; |
margadon | 1:73c1e8f734a4 | 41 | }; |
margadon | 1:73c1e8f734a4 | 42 | */ |
margadon | 0:99e1e788eb9a | 43 | // обработчик усреднения для цикла main |
margadon | 1:73c1e8f734a4 | 44 | long maxMinCount(long incom/*входная вел*/, int n/*длина массива*/) |
margadon | 0:99e1e788eb9a | 45 | { |
margadon | 0:99e1e788eb9a | 46 | int average=0; |
margadon | 1:73c1e8f734a4 | 47 | max=0,min=10000; |
margadon | 0:99e1e788eb9a | 48 | for (int i=n-1;i>0;i--) |
margadon | 0:99e1e788eb9a | 49 | { |
margadon | 1:73c1e8f734a4 | 50 | if (massAdcMain[i]>max){max=massAdcMain[i];} |
margadon | 1:73c1e8f734a4 | 51 | if (massAdcMain[i]<min){min=massAdcMain[i];}// else min=massAdcMain[i-1]; |
margadon | 0:99e1e788eb9a | 52 | massAdcMain[i]=massAdcMain[i-1]; |
margadon | 0:99e1e788eb9a | 53 | average=average+massAdcMain[i]; |
margadon | 0:99e1e788eb9a | 54 | } |
margadon | 1:73c1e8f734a4 | 55 | if (min==0)amp=40; else amp=max-min; |
margadon | 0:99e1e788eb9a | 56 | massAdcMain[0]=incom; |
margadon | 0:99e1e788eb9a | 57 | average=(average+massAdcMain[0])/n; |
margadon | 1:73c1e8f734a4 | 58 | return amp; |
margadon | 0:99e1e788eb9a | 59 | }; |
margadon | 1:73c1e8f734a4 | 60 | //* |
margadon | 0:99e1e788eb9a | 61 | void measure0() |
margadon | 0:99e1e788eb9a | 62 | { |
margadon | 0:99e1e788eb9a | 63 | valueRaw=(((analog_value.read_u16()>>4)));// в миллиамперах - надо умножить на 4.4 |
margadon | 1:73c1e8f734a4 | 64 | zeroLevelAdc=massHandler(valueRaw,3); |
margadon | 1:73c1e8f734a4 | 65 | aver = maxMinCount(zeroLevelAdc,20); |
margadon | 0:99e1e788eb9a | 66 | } |
margadon | 1:73c1e8f734a4 | 67 | //*/ |
margadon | 1:73c1e8f734a4 | 68 | void printt(){pc.printf("%d\r\n",aver);} // по тикеру печатает на графике |
margadon | 0:99e1e788eb9a | 69 | |
margadon | 0:99e1e788eb9a | 70 | int main() |
margadon | 0:99e1e788eb9a | 71 | { |
margadon | 1:73c1e8f734a4 | 72 | t1.attach(&measure0, 0.1); // раз в 100 мсек запускает измерение тока для выч. нуля (2 выборки на период сетевого напр-я) |
margadon | 1:73c1e8f734a4 | 73 | tprint.attach(&printt,0.2); |
margadon | 0:99e1e788eb9a | 74 | //t2.attach(&measure,1.5);// раз в 4 мсек запускает измерение тока |
margadon | 1:73c1e8f734a4 | 75 | //p1=massAdc; // в p1 зап-ся адрес первого элемента массива зн-ий ADC |
margadon | 0:99e1e788eb9a | 76 | while(1) |
margadon | 0:99e1e788eb9a | 77 | { |
margadon | 1:73c1e8f734a4 | 78 | |
margadon | 1:73c1e8f734a4 | 79 | if (amp>45) myled=1; else myled=0; |
margadon | 0:99e1e788eb9a | 80 | } |
margadon | 1:73c1e8f734a4 | 81 | } |
margadon | 1:73c1e8f734a4 | 82 |