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.
Fork of LGstaandart by
SPI.c@213:9953db9543d6, 2017-07-26 (annotated)
- Committer:
- Kovalev_D
- Date:
- Wed Jul 26 13:24:39 2017 +0000
- Revision:
- 213:9953db9543d6
- Parent:
- 212:8d6784491bae
- Child:
- 214:4c70e452c491
work
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| igor_v | 0:8ad47e2b6f00 | 1 | #include "Global.h" |
| igor_v | 0:8ad47e2b6f00 | 2 | struct SPI Spi; |
| Kovalev_D | 112:4a96133a1311 | 3 | //unsigned int Temp_AMP; |
| Kovalev_D | 96:1c8536458119 | 4 | unsigned int Temp_AMP64P; |
| Kovalev_D | 196:f76dbc081e63 | 5 | int ttt=1; |
| Kovalev_D | 99:3d8f206ceac2 | 6 | unsigned int Count_AMP, ADD_AMP, Cur_Amp; |
| Kovalev_D | 99:3d8f206ceac2 | 7 | int Znak_Amp; |
| Kovalev_D | 109:ee0cff33ad3b | 8 | int AD_Regul = 0; |
| Kovalev_D | 190:289514f730ee | 9 | int temp9,tempADC5; |
| Kovalev_D | 148:7ce8c1fd00f7 | 10 | int AD_MAX=0; |
| Kovalev_D | 196:f76dbc081e63 | 11 | int k=0,l=0,r=0,n=0;//счетчики для регулировки периметра |
| Kovalev_D | 188:4c523cc373cc | 12 | int flagmod=0,Bdelta; |
| Kovalev_D | 191:40028201ddad | 13 | int start=10; |
| Kovalev_D | 197:7a05523bf588 | 14 | int dispersion=0,side=1,tempstrafe=15000; |
| Kovalev_D | 86:398da56ef751 | 15 | unsigned int Temp_ADC_2; |
| Kovalev_D | 86:398da56ef751 | 16 | unsigned int Temp_ADC_3; |
| Kovalev_D | 86:398da56ef751 | 17 | unsigned int Temp_ADC_4; |
| Kovalev_D | 86:398da56ef751 | 18 | unsigned int Temp_ADC_5; |
| Kovalev_D | 147:1aed74f19a8f | 19 | unsigned int TempA; |
| Kovalev_D | 158:0c8342e1837a | 20 | unsigned int TempTermLM; |
| Kovalev_D | 211:ac8251b067d2 | 21 | unsigned int conuntPLS; |
| Kovalev_D | 197:7a05523bf588 | 22 | int ADC5Old,ADCDIF=0; |
| Kovalev_D | 197:7a05523bf588 | 23 | int DACModReg; |
| Kovalev_D | 197:7a05523bf588 | 24 | int SinPls=0,SinMns=0; |
| Kovalev_D | 213:9953db9543d6 | 25 | int timer=750; |
| Kovalev_D | 197:7a05523bf588 | 26 | unsigned int ADC5New; |
| Kovalev_D | 95:dd51e577e114 | 27 | unsigned int Buff_ADC_1 [32]; |
| Kovalev_D | 95:dd51e577e114 | 28 | unsigned int Buff_ADC_2 [32]; |
| Kovalev_D | 95:dd51e577e114 | 29 | unsigned int Buff_ADC_3 [32]; |
| Kovalev_D | 95:dd51e577e114 | 30 | unsigned int Buff_ADC_4 [32]; |
| igor_v | 51:81f47b817071 | 31 | |
| Kovalev_D | 213:9953db9543d6 | 32 | int RegulADC,DeltaRegul,tempDeltaRegul; |
| Kovalev_D | 197:7a05523bf588 | 33 | unsigned int Buff_ADC_5 [512]; |
| Kovalev_D | 197:7a05523bf588 | 34 | unsigned int BuffADC_16Point [64]; |
| Kovalev_D | 197:7a05523bf588 | 35 | unsigned int BuffADC_32Point [64]; |
| Kovalev_D | 197:7a05523bf588 | 36 | unsigned int BuffADC_64Point [64]; |
| Kovalev_D | 197:7a05523bf588 | 37 | unsigned int BuffADC_32PointD [64]; |
| Kovalev_D | 197:7a05523bf588 | 38 | unsigned int Buff_Restored_Mod [64]; |
| Kovalev_D | 197:7a05523bf588 | 39 | |
| Kovalev_D | 197:7a05523bf588 | 40 | unsigned int PulseADC_16Point; |
| Kovalev_D | 197:7a05523bf588 | 41 | unsigned int PulseADC_32Point; |
| Kovalev_D | 197:7a05523bf588 | 42 | unsigned int PulseADC_64Point; |
| Kovalev_D | 197:7a05523bf588 | 43 | unsigned int PulseADC_32PointD; |
| Kovalev_D | 197:7a05523bf588 | 44 | |
| Kovalev_D | 197:7a05523bf588 | 45 | |
| igor_v | 31:c783288001b5 | 46 | unsigned int Buff_AMP [256]; |
| Kovalev_D | 96:1c8536458119 | 47 | unsigned int Buff_AMP64P [256]; |
| Kovalev_D | 211:ac8251b067d2 | 48 | unsigned int TypeMod=2; |
| Kovalev_D | 197:7a05523bf588 | 49 | unsigned int ModArraySin [64] = {50,55,59,64,68,73,77,81,85,88,91,94,96,98,99,99,100,99,99,98,96,94,91,88,85,81,77,73,68,64,59,55,50,45,41,36,32,27,23,19,16,12,9,7,4,2,1,1,0,1,1,2,4,7,9,12,16,19,23,27,32,36,41,45}; |
| Kovalev_D | 197:7a05523bf588 | 50 | unsigned int ModArrayTriangle [64]; |
| Kovalev_D | 197:7a05523bf588 | 51 | unsigned int ModArraySaw [64]; |
| Kovalev_D | 197:7a05523bf588 | 52 | unsigned int Mod=0; |
| Kovalev_D | 197:7a05523bf588 | 53 | |
| Kovalev_D | 197:7a05523bf588 | 54 | void InitMOD(void) |
| Kovalev_D | 197:7a05523bf588 | 55 | { |
| Kovalev_D | 209:224e7331a061 | 56 | for (int i = 0; i < 64; i++ ) |
| Kovalev_D | 197:7a05523bf588 | 57 | { |
| Kovalev_D | 209:224e7331a061 | 58 | if(i<32) { ModArrayTriangle[i]=Mod; Mod+=3;} |
| Kovalev_D | 209:224e7331a061 | 59 | else { ModArrayTriangle[i]=Mod; Mod-=3;} |
| Kovalev_D | 197:7a05523bf588 | 60 | } |
| Kovalev_D | 197:7a05523bf588 | 61 | |
| Kovalev_D | 207:d1ce992f5d17 | 62 | for (int i = 0; i < 16; i++ ) |
| Kovalev_D | 197:7a05523bf588 | 63 | { |
| Kovalev_D | 197:7a05523bf588 | 64 | ModArraySaw[i]=Mod; |
| Kovalev_D | 207:d1ce992f5d17 | 65 | Mod+=1; |
| Kovalev_D | 197:7a05523bf588 | 66 | } |
| Kovalev_D | 197:7a05523bf588 | 67 | } |
| Kovalev_D | 197:7a05523bf588 | 68 | void Modulator(void) |
| Kovalev_D | 197:7a05523bf588 | 69 | { |
| Kovalev_D | 209:224e7331a061 | 70 | if(!MODFlag) |
| Kovalev_D | 209:224e7331a061 | 71 | { |
| Kovalev_D | 197:7a05523bf588 | 72 | switch(TypeMod) |
| Kovalev_D | 197:7a05523bf588 | 73 | { |
| Kovalev_D | 211:ac8251b067d2 | 74 | case 0: LPC_DAC->DACR = (ModArraySin [(CountV64-2)&0x3f]*Gyro.ModAmp); break; |
| Kovalev_D | 197:7a05523bf588 | 75 | case 1: LPC_DAC->DACR = (ModArraySaw [CountV64]*Gyro.ModAmp); break; |
| Kovalev_D | 211:ac8251b067d2 | 76 | case 2: LPC_DAC->DACR = (ModArrayTriangle [(CountV64-2)&0x3f]*Gyro.ModAmp); break; |
| Kovalev_D | 197:7a05523bf588 | 77 | } |
| Kovalev_D | 209:224e7331a061 | 78 | } |
| Kovalev_D | 197:7a05523bf588 | 79 | } |
| Kovalev_D | 197:7a05523bf588 | 80 | void PLCRegul(void) |
| Kovalev_D | 208:19150d2b528f | 81 | { |
| Kovalev_D | 211:ac8251b067d2 | 82 | unsigned int temp, Temp_Dac_B=0,Side=0; |
| Kovalev_D | 208:19150d2b528f | 83 | static int CountFaza; |
| Kovalev_D | 211:ac8251b067d2 | 84 | |
| Kovalev_D | 211:ac8251b067d2 | 85 | |
| Kovalev_D | 211:ac8251b067d2 | 86 | // Temp_Dac_B=(0xffff-Spi.DAC_B); |
| Kovalev_D | 211:ac8251b067d2 | 87 | if(conuntPLS<10) |
| Kovalev_D | 211:ac8251b067d2 | 88 | { |
| Kovalev_D | 209:224e7331a061 | 89 | for (CountFaza = 0; CountFaza <32; CountFaza++ ) SinPls+= BuffADC_64Point[ (CountFaza + Gyro.PLC_Phase) & 0x3f]; |
| Kovalev_D | 209:224e7331a061 | 90 | for (CountFaza = 32; CountFaza <64; CountFaza++) SinMns+= BuffADC_64Point[ (CountFaza + Gyro.PLC_Phase) & 0x3f]; |
| Kovalev_D | 211:ac8251b067d2 | 91 | conuntPLS++; |
| Kovalev_D | 211:ac8251b067d2 | 92 | } |
| Kovalev_D | 211:ac8251b067d2 | 93 | else |
| Kovalev_D | 211:ac8251b067d2 | 94 | { |
| Kovalev_D | 211:ac8251b067d2 | 95 | conuntPLS=0; |
| Kovalev_D | 211:ac8251b067d2 | 96 | Gyro.PLC_Eror = SinMns-SinPls; |
| Kovalev_D | 211:ac8251b067d2 | 97 | if(Gyro.RgConA&0x8) |
| Kovalev_D | 211:ac8251b067d2 | 98 | { |
| Kovalev_D | 211:ac8251b067d2 | 99 | if(Gyro.PLC_Eror>0) {Spi.DAC_B+=Gyro.PLC_Gain;} |
| Kovalev_D | 211:ac8251b067d2 | 100 | else {Spi.DAC_B-=Gyro.PLC_Gain;} |
| Kovalev_D | 211:ac8251b067d2 | 101 | } |
| Kovalev_D | 211:ac8251b067d2 | 102 | if(Gyro.PLC_Eror>0) {Gyro.PLC_Eror_count++;} |
| Kovalev_D | 211:ac8251b067d2 | 103 | else {Gyro.PLC_Eror_count--;} |
| Kovalev_D | 211:ac8251b067d2 | 104 | |
| Kovalev_D | 211:ac8251b067d2 | 105 | if(Gyro.LG_Type==1) |
| Kovalev_D | 211:ac8251b067d2 | 106 | { |
| Kovalev_D | 211:ac8251b067d2 | 107 | if ( Spi.DAC_B < Gyro.HighTreshold ) Spi.DAC_B = (Gyro.ResetLevelHeat); |
| Kovalev_D | 211:ac8251b067d2 | 108 | else if ( Spi.DAC_B > Gyro.DownTreshold ) Spi.DAC_B = (Gyro.ResetLevelCool); |
| Kovalev_D | 211:ac8251b067d2 | 109 | |
| Kovalev_D | 211:ac8251b067d2 | 110 | } |
| Kovalev_D | 211:ac8251b067d2 | 111 | else |
| Kovalev_D | 211:ac8251b067d2 | 112 | { |
| Kovalev_D | 211:ac8251b067d2 | 113 | if ( Spi.DAC_B < 10300 ) Spi.DAC_B = 32000; //проверка на переваливание за границу. |
| Kovalev_D | 211:ac8251b067d2 | 114 | else if ( Spi.DAC_B > 57000 ) Spi.DAC_B = 32000; |
| Kovalev_D | 211:ac8251b067d2 | 115 | } |
| Kovalev_D | 211:ac8251b067d2 | 116 | |
| Kovalev_D | 211:ac8251b067d2 | 117 | SinPls=0; |
| Kovalev_D | 197:7a05523bf588 | 118 | SinMns=0; |
| Kovalev_D | 211:ac8251b067d2 | 119 | } |
| Kovalev_D | 197:7a05523bf588 | 120 | } |
| Kovalev_D | 197:7a05523bf588 | 121 | |
| Kovalev_D | 208:19150d2b528f | 122 | |
| Kovalev_D | 209:224e7331a061 | 123 | void PLCRegul250(void) |
| Kovalev_D | 209:224e7331a061 | 124 | { |
| Kovalev_D | 209:224e7331a061 | 125 | unsigned int temp; |
| Kovalev_D | 209:224e7331a061 | 126 | static int CountFaza; |
| Kovalev_D | 209:224e7331a061 | 127 | temp = MODCount; |
| Kovalev_D | 209:224e7331a061 | 128 | for (CountFaza = 0; CountFaza <32; CountFaza++ ) SinPls+= BuffADC_64Point[ (CountFaza + Gyro.PLC_Phase) & 0x3f]; |
| Kovalev_D | 209:224e7331a061 | 129 | for (CountFaza = 32; CountFaza <64; CountFaza++) SinMns+= BuffADC_64Point[ (CountFaza + Gyro.PLC_Phase) & 0x3f]; |
| Kovalev_D | 209:224e7331a061 | 130 | Gyro.PLC_Eror = SinMns-SinPls; |
| Kovalev_D | 211:ac8251b067d2 | 131 | /* sprintf((Time)," %d %d %d %d %d\r\n",Spi.ADC5, Spi.DAC_B, SinPls, SinMns, Gyro.PLC_Eror); |
| Kovalev_D | 209:224e7331a061 | 132 | WriteCon(Time);*/ |
| Kovalev_D | 209:224e7331a061 | 133 | if(Gyro.RgConA&0x8) |
| Kovalev_D | 209:224e7331a061 | 134 | { |
| Kovalev_D | 209:224e7331a061 | 135 | if(Gyro.PLC_Eror>0) {Spi.DAC_B+=1 * Gyro.PLC_Gain;} |
| Kovalev_D | 209:224e7331a061 | 136 | else {Spi.DAC_B-=1 * Gyro.PLC_Gain;} |
| Kovalev_D | 209:224e7331a061 | 137 | } |
| Kovalev_D | 209:224e7331a061 | 138 | if(Gyro.PLC_Eror>0) {Gyro.PLC_Eror_count++;} |
| Kovalev_D | 209:224e7331a061 | 139 | else {Gyro.PLC_Eror_count--;} |
| Kovalev_D | 209:224e7331a061 | 140 | |
| Kovalev_D | 209:224e7331a061 | 141 | if ( Spi.DAC_B < 10300 ) Spi.DAC_B = 32000; //проверка на переваливание за границу. |
| Kovalev_D | 209:224e7331a061 | 142 | else if ( Spi.DAC_B > 57000 ) Spi.DAC_B = 32000; |
| igor_v | 110:6406b7ac0442 | 143 | |
| Kovalev_D | 209:224e7331a061 | 144 | SinPls=0; |
| Kovalev_D | 209:224e7331a061 | 145 | SinMns=0; |
| Kovalev_D | 209:224e7331a061 | 146 | } |
| Kovalev_D | 211:ac8251b067d2 | 147 | void HFORegul(void) |
| Kovalev_D | 213:9953db9543d6 | 148 | { |
| Kovalev_D | 213:9953db9543d6 | 149 | |
| Kovalev_D | 211:ac8251b067d2 | 150 | RegulADC=32767-Spi.ADC5; |
| Kovalev_D | 213:9953db9543d6 | 151 | DeltaRegul+=((Gyro.HFO_ref-RegulADC)); |
| Kovalev_D | 213:9953db9543d6 | 152 | //tempDeltaRegul+=((Gyro.HFO_ref-RegulADC)); |
| Kovalev_D | 213:9953db9543d6 | 153 | //if(DeltaRegul>50)DeltaRegul=50; |
| Kovalev_D | 213:9953db9543d6 | 154 | |
| Kovalev_D | 213:9953db9543d6 | 155 | if(timer) timer--; |
| Kovalev_D | 213:9953db9543d6 | 156 | else |
| Kovalev_D | 213:9953db9543d6 | 157 | { |
| Kovalev_D | 213:9953db9543d6 | 158 | /*sprintf((Time),"%d %d %d %d %d %d \r\n", Gyro.HFO_Min , Spi.DAC_A,Gyro.HFO_Max,tempDeltaRegul>>10, Spi.DAC_B, Gyro.CuruAngle); |
| Kovalev_D | 213:9953db9543d6 | 159 | WriteCon(Time); |
| Kovalev_D | 213:9953db9543d6 | 160 | Gyro.CuruAngle=0;*/ |
| Kovalev_D | 213:9953db9543d6 | 161 | //tempDeltaRegul=0; |
| Kovalev_D | 211:ac8251b067d2 | 162 | if(Gyro.RgConA&0x2) |
| Kovalev_D | 211:ac8251b067d2 | 163 | { |
| Kovalev_D | 213:9953db9543d6 | 164 | DeltaRegul=DeltaRegul>>10; |
| Kovalev_D | 213:9953db9543d6 | 165 | tempDeltaRegul=DeltaRegul>>10; |
| Kovalev_D | 211:ac8251b067d2 | 166 | Spi.DAC_A-=DeltaRegul*Gyro.HFO_Gain; |
| Kovalev_D | 213:9953db9543d6 | 167 | timer=10; |
| Kovalev_D | 213:9953db9543d6 | 168 | } |
| Kovalev_D | 213:9953db9543d6 | 169 | else DeltaRegul=0; |
| Kovalev_D | 213:9953db9543d6 | 170 | } |
| Kovalev_D | 213:9953db9543d6 | 171 | if(Spi.DAC_A>Gyro.HFO_Min-1) Spi.DAC_A=Gyro.HFO_Min-2; |
| Kovalev_D | 213:9953db9543d6 | 172 | else if(Spi.DAC_A<Gyro.HFO_Max+1) Spi.DAC_A=Gyro.HFO_Max+2; |
| Kovalev_D | 211:ac8251b067d2 | 173 | |
| Kovalev_D | 211:ac8251b067d2 | 174 | } |
| Kovalev_D | 208:19150d2b528f | 175 | |
| Kovalev_D | 208:19150d2b528f | 176 | |
| Kovalev_D | 208:19150d2b528f | 177 | |
| Kovalev_D | 208:19150d2b528f | 178 | // Spi.DAC_B-=ADCDIF>>6; |
| Kovalev_D | 208:19150d2b528f | 179 | |
| Kovalev_D | 147:1aed74f19a8f | 180 | void ADS_Acum(void) |
| Kovalev_D | 147:1aed74f19a8f | 181 | { |
| Kovalev_D | 157:1069c80f4944 | 182 | Spi.ADC_NewData = 0; |
| Kovalev_D | 209:224e7331a061 | 183 | // Gyro.Termo = (unsigned int)(((Spi.ADC1>>1) + Gyro.Tmp_OffsetT4) * Gyro.Tmp_scaleT4); |
| Kovalev_D | 209:224e7331a061 | 184 | Gyro.Termo = (unsigned int)(Spi.ADC1>>1); |
| Kovalev_D | 209:224e7331a061 | 185 | Gyro.IN1_Accum += Spi.ADC2; |
| Kovalev_D | 209:224e7331a061 | 186 | Gyro.IN2_Accum += Spi.ADC3; |
| Kovalev_D | 209:224e7331a061 | 187 | // Gyro.DeltaT = (unsigned int)(((Spi.ADC4>>1) + Gyro.Tmp_OffsetT5) * Gyro.Tmp_scaleT5); |
| Kovalev_D | 209:224e7331a061 | 188 | Gyro.DeltaT = (unsigned int)(Spi.ADC4>>1); |
| Kovalev_D | 208:19150d2b528f | 189 | |
| Kovalev_D | 172:ef7bf1663645 | 190 | TempA = (0xffff - Spi.ADC5); // перевернем знак и умножим на два (было 32000...0 стало 0 ...32000 /*сдвиг(<<1) стало 0 ...64000*/) |
| Kovalev_D | 211:ac8251b067d2 | 191 | Gyro.TermLM = Spi.ADC1; |
| Kovalev_D | 157:1069c80f4944 | 192 | Gyro.ADF_Accum += TempA; |
| Kovalev_D | 157:1069c80f4944 | 193 | Gyro.ADS_Accum += TempA; |
| Kovalev_D | 208:19150d2b528f | 194 | /// Gyro.ADS_AccumTermLM+=TempTermLM; |
| Kovalev_D | 157:1069c80f4944 | 195 | Gyro.ADF_Count ++; |
| Kovalev_D | 157:1069c80f4944 | 196 | Gyro.ADS_Count ++; |
| Kovalev_D | 209:224e7331a061 | 197 | Gyro.ADM_Count ++; |
| Kovalev_D | 209:224e7331a061 | 198 | /* sprintf((Time),"%d %d\r\n",((Gyro.In1>>1) - 0x4fff),(Spi.DAC_B-0x4fff)); |
| Kovalev_D | 209:224e7331a061 | 199 | WriteCon(Time);*/ |
| Kovalev_D | 209:224e7331a061 | 200 | if (Gyro.ADM_Count > 255) { |
| Kovalev_D | 209:224e7331a061 | 201 | Gyro.In1 = Gyro.IN1_Accum>>8; |
| Kovalev_D | 209:224e7331a061 | 202 | Gyro.In2 = Gyro.IN2_Accum>>8; |
| Kovalev_D | 209:224e7331a061 | 203 | Gyro.IN1_Accum=0; |
| Kovalev_D | 209:224e7331a061 | 204 | Gyro.IN2_Accum=0; |
| Kovalev_D | 209:224e7331a061 | 205 | Gyro.ADM_Count=0; |
| Kovalev_D | 147:1aed74f19a8f | 206 | |
| Kovalev_D | 209:224e7331a061 | 207 | } |
| Kovalev_D | 207:d1ce992f5d17 | 208 | if (Gyro.ADF_Count > 15) { // если прошло 16 тактов виброподвеса |
| Kovalev_D | 172:ef7bf1663645 | 209 | Gyro.AD_Fast = Gyro.ADF_Accum << 11; //обновляем данные и приводим в один масштаб |
| Kovalev_D | 157:1069c80f4944 | 210 | Gyro.ADF_Count = 0;// |
| Kovalev_D | 157:1069c80f4944 | 211 | Gyro.ADF_Accum = 0; |
| Kovalev_D | 157:1069c80f4944 | 212 | Gyro.ADF_NewData = 1; |
| Kovalev_D | 157:1069c80f4944 | 213 | } |
| Kovalev_D | 207:d1ce992f5d17 | 214 | if (Gyro.ADS_Count > 255) { // если прошло 256 тактов виброподвеса |
| Kovalev_D | 172:ef7bf1663645 | 215 | Gyro.AD_Slow = Gyro.ADS_Accum << 7; //обновляем данные и приводим в один масштаб |
| Kovalev_D | 211:ac8251b067d2 | 216 | // Gyro.TermLM = Gyro.ADS_AccumTermLM << 3; |
| Kovalev_D | 157:1069c80f4944 | 217 | Gyro.ADS_Count = 0; |
| Kovalev_D | 157:1069c80f4944 | 218 | Gyro.ADS_Accum = 0; |
| Kovalev_D | 158:0c8342e1837a | 219 | Gyro.ADS_AccumTermLM=0; |
| Kovalev_D | 207:d1ce992f5d17 | 220 | Gyro.ADS_NewData = 1; |
| Kovalev_D | 209:224e7331a061 | 221 | } |
| Kovalev_D | 147:1aed74f19a8f | 222 | } |
| igor_v | 114:5cc38a53d8a7 | 223 | void SPI_Exchange(void) // новая функция чтения, в нецй не должно быть ничего лишнего |
| Kovalev_D | 157:1069c80f4944 | 224 | { |
| Kovalev_D | 157:1069c80f4944 | 225 | unsigned int DummySPI; |
| Kovalev_D | 197:7a05523bf588 | 226 | //unsigned int ADC5Dif; |
| Kovalev_D | 197:7a05523bf588 | 227 | ADC5New = LPC_SSP0->DR;// Чтение АЦП |
| Kovalev_D | 207:d1ce992f5d17 | 228 | //Spi.ADC5_Accum += LPC_SSP0->DR; |
| igor_v | 110:6406b7ac0442 | 229 | Spi.ADC4_Accum += LPC_SSP0->DR; |
| igor_v | 110:6406b7ac0442 | 230 | Spi.ADC3_Accum += LPC_SSP0->DR; |
| igor_v | 110:6406b7ac0442 | 231 | Spi.ADC2_Accum += LPC_SSP0->DR; |
| igor_v | 110:6406b7ac0442 | 232 | Spi.ADC1_Accum += LPC_SSP0->DR; |
| Kovalev_D | 207:d1ce992f5d17 | 233 | Spi.ADC5_Accum += ADC5New; |
| Kovalev_D | 209:224e7331a061 | 234 | |
| Kovalev_D | 207:d1ce992f5d17 | 235 | while (LPC_SSP0->SR & RX_SSP_notEMPT) |
| Kovalev_D | 207:d1ce992f5d17 | 236 | { |
| Kovalev_D | 170:d099c3025f87 | 237 | DummySPI = LPC_SSP0->DR; //если буфер SPI не пуст.//очистить буфер. |
| Kovalev_D | 157:1069c80f4944 | 238 | } |
| Kovalev_D | 112:4a96133a1311 | 239 | DAC_OutPut(); |
| Kovalev_D | 157:1069c80f4944 | 240 | if (CountV31 == 0) { // просто фильтруем по 32 точкам. |
| Kovalev_D | 197:7a05523bf588 | 241 | // выставояем бит, что есть новы данные |
| Kovalev_D | 157:1069c80f4944 | 242 | Spi.ADC1 = Spi.ADC1_Accum >> 5; // подгоотавливаем данные (в той эе сетке) те ADC1 0..65535 |
| Kovalev_D | 157:1069c80f4944 | 243 | Spi.ADC2 = Spi.ADC2_Accum >> 5; |
| Kovalev_D | 157:1069c80f4944 | 244 | Spi.ADC3 = Spi.ADC3_Accum >> 5; |
| Kovalev_D | 157:1069c80f4944 | 245 | Spi.ADC4 = Spi.ADC4_Accum >> 5; |
| Kovalev_D | 157:1069c80f4944 | 246 | Spi.ADC5 = Spi.ADC5_Accum >> 5; |
| Kovalev_D | 157:1069c80f4944 | 247 | Spi.ADC1_Accum = 0; // сбрасывкем аккамулятор |
| Kovalev_D | 157:1069c80f4944 | 248 | Spi.ADC2_Accum = 0; |
| Kovalev_D | 157:1069c80f4944 | 249 | Spi.ADC3_Accum = 0; |
| Kovalev_D | 157:1069c80f4944 | 250 | Spi.ADC4_Accum = 0; |
| Kovalev_D | 157:1069c80f4944 | 251 | Spi.ADC5_Accum = 0; |
| Kovalev_D | 157:1069c80f4944 | 252 | Spi.ADC_NewData = 1; |
| Kovalev_D | 209:224e7331a061 | 253 | |
| Kovalev_D | 207:d1ce992f5d17 | 254 | } |
| Kovalev_D | 197:7a05523bf588 | 255 | |
| Kovalev_D | 209:224e7331a061 | 256 | if(!MODFlag) BuffADC_64Point[CountV64]=ADC5New; |
| Kovalev_D | 197:7a05523bf588 | 257 | Buff_ADC_5[CountV255] = (0x7fff-ADC5New)<<2; |
| Kovalev_D | 113:8be429494918 | 258 | |
| Kovalev_D | 112:4a96133a1311 | 259 | } |
| Kovalev_D | 113:8be429494918 | 260 | |
| Kovalev_D | 190:289514f730ee | 261 | void ShowMod(void)//технологическая функция для просмотра в ориджине мод на всем диапазпне цап |
| Kovalev_D | 158:0c8342e1837a | 262 | { |
| Kovalev_D | 158:0c8342e1837a | 263 | |
| Kovalev_D | 158:0c8342e1837a | 264 | ////////////////////////////////////////////////////////////////////////////////////////////////// |
| Kovalev_D | 158:0c8342e1837a | 265 | //////////////////////////////////смотрим все моды///////////////////////////////////////////////// |
| Kovalev_D | 158:0c8342e1837a | 266 | /////////////////////////////////////////////////////////////////////////////////////////////////// |
| Kovalev_D | 197:7a05523bf588 | 267 | if(dispersion>5) |
| Kovalev_D | 197:7a05523bf588 | 268 | { |
| Kovalev_D | 197:7a05523bf588 | 269 | if( (Gyro.PLC_Lern<60000)&&(Gyro.PLC_Error2Mode >1))//пробигаем по нескольким значениям цап(60*0х3с=0хВВ8) для определения максимальной амплитуды. |
| Kovalev_D | 158:0c8342e1837a | 270 | { |
| Kovalev_D | 158:0c8342e1837a | 271 | Gyro.PLC_Error2Mode--; |
| Kovalev_D | 158:0c8342e1837a | 272 | Gyro.PLC_Lern++; |
| Kovalev_D | 197:7a05523bf588 | 273 | Spi.DAC_B += tempstrafe*side; |
| Kovalev_D | 197:7a05523bf588 | 274 | if(side>0)side=(-1); |
| Kovalev_D | 197:7a05523bf588 | 275 | else side = 1; |
| Kovalev_D | 197:7a05523bf588 | 276 | tempstrafe-=40; |
| Kovalev_D | 197:7a05523bf588 | 277 | dispersion=0; |
| Kovalev_D | 168:f4a6abb18358 | 278 | } |
| Kovalev_D | 197:7a05523bf588 | 279 | else {Gyro.LogPLC=0;} |
| Kovalev_D | 197:7a05523bf588 | 280 | } |
| Kovalev_D | 197:7a05523bf588 | 281 | else dispersion++; |
| Kovalev_D | 197:7a05523bf588 | 282 | sprintf((Time),"%d %d %d %d \r\n", Gyro.CuruAngle, Spi.DAC_B, Gyro.AD_Slow, Gyro.Termo); |
| Kovalev_D | 197:7a05523bf588 | 283 | Gyro.CuruAngle=0; |
| Kovalev_D | 197:7a05523bf588 | 284 | WriteCon(Time); |
| Kovalev_D | 158:0c8342e1837a | 285 | } |
| Kovalev_D | 209:224e7331a061 | 286 | void ShowMod2(void)//технологическая функция для просмотра в ориджине мод на всем диапазпне цап |
| Kovalev_D | 209:224e7331a061 | 287 | { |
| Kovalev_D | 211:ac8251b067d2 | 288 | if(dispersion>3) |
| Kovalev_D | 211:ac8251b067d2 | 289 | { |
| Kovalev_D | 213:9953db9543d6 | 290 | unsigned int step = 50, ENDMOD=65400; |
| Kovalev_D | 209:224e7331a061 | 291 | sprintf((Time),"%d %d %d %d %d %d %d\r\n", Gyro.CuruAngle, Spi.DAC_B, Gyro.AD_Slow, Spi.ADC5, 0xfFFf-Spi.ADC1, Spi.ADC1, Gyro.Termo); |
| Kovalev_D | 209:224e7331a061 | 292 | Gyro.CuruAngle=0; |
| Kovalev_D | 209:224e7331a061 | 293 | WriteCon(Time); |
| Kovalev_D | 213:9953db9543d6 | 294 | Spi.DAC_B+=step; |
| Kovalev_D | 213:9953db9543d6 | 295 | if(Spi.DAC_B>ENDMOD) |
| Kovalev_D | 211:ac8251b067d2 | 296 | { |
| Kovalev_D | 211:ac8251b067d2 | 297 | Gyro.LogMod=0; |
| Kovalev_D | 211:ac8251b067d2 | 298 | PlcON |
| Kovalev_D | 213:9953db9543d6 | 299 | Spi.DAC_B = 48000; |
| Kovalev_D | 211:ac8251b067d2 | 300 | } |
| Kovalev_D | 211:ac8251b067d2 | 301 | dispersion=0; |
| Kovalev_D | 209:224e7331a061 | 302 | } |
| Kovalev_D | 211:ac8251b067d2 | 303 | else dispersion++; |
| Kovalev_D | 191:40028201ddad | 304 | } |
| Kovalev_D | 112:4a96133a1311 | 305 | void DAC_OutPut(void)//выдача в цапы |
| igor_v | 0:8ad47e2b6f00 | 306 | { |
| Kovalev_D | 208:19150d2b528f | 307 | if(Gyro.RgConA&0x10) Modulator(); |
| Kovalev_D | 157:1069c80f4944 | 308 | LPC_SSP0->DR=0x5555; |
| igor_v | 31:c783288001b5 | 309 | LPC_SSP0->DR=0x5555; |
| igor_v | 31:c783288001b5 | 310 | LPC_SSP0->DR=0x5555; |
| igor_v | 0:8ad47e2b6f00 | 311 | |
| Kovalev_D | 209:224e7331a061 | 312 | if (CountV31 & 1) |
| Kovalev_D | 209:224e7331a061 | 313 | { //если нечетный такт то |
| Kovalev_D | 197:7a05523bf588 | 314 | LPC_SSP0->DR = WRITE_DAC0; //e.команда для ЦАП_0 передавать. |
| igor_v | 31:c783288001b5 | 315 | LPC_SSP0->DR = (Spi.DAC_A); //e. передача 12 бит |
| Kovalev_D | 209:224e7331a061 | 316 | } |
| Kovalev_D | 209:224e7331a061 | 317 | else |
| Kovalev_D | 209:224e7331a061 | 318 | { //если такт четный. |
| Kovalev_D | 157:1069c80f4944 | 319 | LPC_SSP0->DR = WRITE_DAC1 ; //e.команда для ЦАП_1 передавать. |
| Kovalev_D | 205:775d54fdf646 | 320 | LPC_SSP0->DR = (Spi.DAC_B); |
| igor_v | 31:c783288001b5 | 321 | } |
| Kovalev_D | 112:4a96133a1311 | 322 | } |
| Kovalev_D | 112:4a96133a1311 | 323 | |
| Kovalev_D | 112:4a96133a1311 | 324 | |
| Kovalev_D | 113:8be429494918 | 325 | |
| Kovalev_D | 113:8be429494918 | 326 | |
| Kovalev_D | 113:8be429494918 | 327 | |
| Kovalev_D | 113:8be429494918 | 328 |
