ADC_acs712

Dependencies:   mbed

Committer:
margadon
Date:
Mon Feb 16 07:55:22 2015 +0000
Revision:
1:73c1e8f734a4
Parent:
0:99e1e788eb9a
ACS712

Who changed what in which revision?

UserRevisionLine numberNew 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