Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
adc.cpp
00001 //------------------------------------------------------------------------------- 00002 // 00003 // Treehouse Designs Inc. 00004 // Colorado Springs, Colorado 00005 // 00006 // Copyright (c) 2016 by Treehouse Designs Inc. 00007 // Copyright (c) 2018 by Agility Power Systems Inc. 00008 // 00009 // This code is the property of Treehouse Designs, Inc. (Treehouse) and 00010 // Agility Power Systems Inc. (Agility) and may not be redistributed 00011 // in any form without prior written permission from 00012 // both copyright holders, Treehouse and Agility. 00013 // 00014 // The above copyright notice and this permission notice shall be included in 00015 // all copies or substantial portions of the Software. 00016 // 00017 // 00018 //------------------------------------------------------------------------------- 00019 // 00020 // REVISION HISTORY: 00021 // 00022 // $Author: $ 00023 // $Rev: $ 00024 // $Date: $ 00025 // $URL: $ 00026 // 00027 //------------------------------------------------------------------------------- 00028 00029 #include "mbed.h" 00030 #include "adc_defs.h" 00031 #include "adc.h" 00032 #include "all_io.h" 00033 00034 void initADC(void){ 00035 00036 //Auto-zero current values 00037 struct adcValues adcVals = getADCresults(); 00038 00039 CURRENT_12_OFFSET = adcVals.i12; 00040 00041 } 00042 00043 /******************************************************************************* 00044 getADCresults 00045 *******************************************************************************/ 00046 struct adcValues getADCresults(void){ 00047 00048 double v48x = 0; 00049 double v12x = 0; 00050 double i12x = 0; 00051 double test_vx = 0; 00052 00053 struct adcValues avals; 00054 unsigned int loopCounter = LOOP_COUNTER; 00055 00056 for(unsigned int i=0;i<loopCounter;i++){ 00057 v48x = v48x + VIN48.read_u16(); 00058 v12x = v12x + VIN12.read_u16(); 00059 i12x = i12x + IIN12.read_u16(); 00060 test_vx = test_vx + TESTERPIN.read_u16(); 00061 } 00062 avals.test_v = test_vx/loopCounter; 00063 avals.v48 = v48x/loopCounter; 00064 avals.v12 = v12x/loopCounter; 00065 avals.i12 = i12x/loopCounter; 00066 00067 return avals; 00068 } 00069 00070 /******************************************************************************* 00071 getADCvolts 00072 *******************************************************************************/ 00073 struct adcValues getADCvolts(void){ 00074 00075 unsigned int v48x = 0; 00076 unsigned int v12x = 0; 00077 unsigned int test_vx = 0; 00078 00079 struct adcValues avals; 00080 00081 for(unsigned int i=0;i<100;i++){ 00082 v48x = v48x + VIN48.read_u16(); 00083 v12x = v12x + VIN12.read_u16(); 00084 test_vx = test_vx + TESTERPIN.read_u16(); 00085 } 00086 avals.test_v = test_vx/100; 00087 avals.v48 = v48x/100; 00088 avals.v12 = v12x/100; 00089 00090 return avals; 00091 } 00092 00093 /******************************************************************************* 00094 getADCamps 00095 *******************************************************************************/ 00096 struct adcValues getADCamps(void){ 00097 00098 unsigned int i12x = 0; 00099 00100 struct adcValues avals; 00101 00102 for(unsigned int i=0;i<100;i++){ 00103 i12x = i12x + IIN12.read_u16(); 00104 } 00105 avals.i12 = i12x/100; 00106 00107 return avals; 00108 } 00109 00110 /******************************************************************************* 00111 calcDisplayValues 00112 *******************************************************************************/ 00113 struct displayValues calcDisplayValues(struct adcValues avals){ 00114 00115 struct displayValues dvals; 00116 00117 if(!raw){ 00118 dvals.v48f = VOLTAGE_48_FACTOR*avals.v48; 00119 dvals.v12f = VOLTAGE_12_FACTOR*avals.v12; 00120 //dvals.i48f = ((avals.i48-CURRENT_48_OFFSET)/CURRENT_48_DIV_FACTOR)-CURRENT_CONTROL_OFFSET; 00121 00122 // The adc results are linear above CURRENT_48_DIV_THRESH5. Only apply a linear correction to it above that threshold. 00123 // The multiple correction factors below CURRENT_48_DIV_THRESH5 linearize the curve below CURRENT_48_DIV_THRESH5. 00124 /*if(abs((avals.i48-CURRENT_48_OFFSET)) > CURRENT_48_DIV_THRESH5){ 00125 dvals.i48f = (avals.i48-CURRENT_48_OFFSET)/CURRENT_48_DIV_FACTOR5; 00126 }else if(abs((avals.i48-CURRENT_48_OFFSET)) > CURRENT_48_DIV_THRESH4){ 00127 dvals.i48f = (avals.i48-CURRENT_48_OFFSET)/CURRENT_48_DIV_FACTOR4; 00128 }else if(abs((avals.i48-CURRENT_48_OFFSET)) > CURRENT_48_DIV_THRESH3){ 00129 dvals.i48f = (avals.i48-CURRENT_48_OFFSET)/CURRENT_48_DIV_FACTOR3; 00130 }else if(abs((avals.i48-CURRENT_48_OFFSET)) > CURRENT_48_DIV_THRESH2){ 00131 dvals.i48f = (avals.i48-CURRENT_48_OFFSET)/CURRENT_48_DIV_FACTOR2; 00132 }else if(abs((avals.i48-CURRENT_48_OFFSET)) > CURRENT_48_DIV_THRESH1){ 00133 dvals.i48f = (avals.i48-CURRENT_48_OFFSET)/CURRENT_48_DIV_FACTOR1; 00134 }else{ 00135 dvals.i48f = (avals.i48-CURRENT_48_OFFSET)/CURRENT_48_DIV_FACTOR0; 00136 } 00137 00138 dvals.i24f = (avals.i24-CURRENT_24_OFFSET)/CURRENT_24_DIV_FACTOR; 00139 */ 00140 // The adc results are linear above CURRENT_12_DIV_THRESH5. Only apply a linear correction to it above that threshold. 00141 // The multiple correction factors below CURRENT_12_DIV_THRESH5 linearize the curve below CURRENT_12_DIV_THRESH5. 00142 if(abs((avals.i12-CURRENT_12_OFFSET)) > CURRENT_12_DIV_THRESH5){ 00143 dvals.i12f = (avals.i12-CURRENT_12_OFFSET)/CURRENT_12_DIV_FACTOR5; 00144 }else if(abs((avals.i12-CURRENT_12_OFFSET)) > CURRENT_12_DIV_THRESH4){ 00145 dvals.i12f = (avals.i12-CURRENT_12_OFFSET)/CURRENT_12_DIV_FACTOR4; 00146 }else if(abs((avals.i12-CURRENT_12_OFFSET)) > CURRENT_12_DIV_THRESH3){ 00147 dvals.i12f = (avals.i12-CURRENT_12_OFFSET)/CURRENT_12_DIV_FACTOR3; 00148 }else if(abs((avals.i12-CURRENT_12_OFFSET)) > CURRENT_12_DIV_THRESH2){ 00149 dvals.i12f = (avals.i12-CURRENT_12_OFFSET)/CURRENT_12_DIV_FACTOR2; 00150 }else if(abs((avals.i12-CURRENT_12_OFFSET)) > CURRENT_12_DIV_THRESH1){ 00151 dvals.i12f = (avals.i12-CURRENT_12_OFFSET)/CURRENT_12_DIV_FACTOR1; 00152 }else{ 00153 dvals.i12f = (avals.i12-CURRENT_12_OFFSET)/CURRENT_12_DIV_FACTOR0; 00154 } 00155 dvals.test_v = VOLTAGE_12_FACTOR*avals.test_v; 00156 }else{ 00157 //dvals.v48f = 1.0*avals.v48-CURRENT_CONTROL_OFFSET; 00158 dvals.v48f = 1.0*avals.v48; 00159 dvals.v12f = 1.0*avals.v12; 00160 dvals.i12f = 1.0*avals.i12; 00161 dvals.test_v = 1.0*avals.test_v; 00162 } 00163 return dvals; 00164 }
Generated on Tue Dec 6 2022 18:48:20 by
1.7.2