/* * amplif.c * * Created on: 18 мая 2021 г. * Author: Toporov */ #include "main.h" #include "flash.h" #include "my.h" extern __IO UserData_TypeDef pardata; extern __IO uint16_t CorrWord[2][20]; uint16_t DVD; extern __IO uint32_t faseClbr; extern __IO bool clbr; float kNormToDAC; int OffsetKuDisplay; //------------------------------------------------------ // Конфигурация и коррекция канала преобразования //------------------------------------------------------ void SetAndCorrect(void) { float fKU, sens_f; uint32_t k; switch(pardata.IIN) { case CHARGE: // ZAR HAL_GPIO_WritePin(GPIOB, (A2_Pin | A3_Pin), GPIO_PIN_RESET); if(pardata.IKU < Ku1) { HAL_GPIO_WritePin(GPIOB, A0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, A1_Pin, GPIO_PIN_SET); } else if(pardata.IKU > Ku100) // >= x200 { HAL_GPIO_WritePin(GPIOB, A0_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, A1_Pin, GPIO_PIN_RESET); } else { HAL_GPIO_WritePin(GPIOB, A0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, A1_Pin, GPIO_PIN_RESET); } break; case ICP: // ICP if(pardata.IKU Ku100) // >= x200 { HAL_GPIO_WritePin(GPIOB, A0_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, A1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, (A2_Pin | A3_Pin), GPIO_PIN_SET); } else { HAL_GPIO_WritePin(GPIOB, A0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, A1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, A2_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, A3_Pin, GPIO_PIN_RESET); } break; } switch(pardata.IKU) {//todo case Ku0_1: case Ku1: // 0.1, 1 HAL_GPIO_WritePin(GPIOB, (A4_Pin | A5_Pin | A6_Pin), GPIO_PIN_RESET); break; case Ku0_2: case Ku2: // 0.2, 2 HAL_GPIO_WritePin(GPIOB, A4_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, (A5_Pin | A6_Pin), GPIO_PIN_RESET); break; case Ku0_5: case Ku5: // 0.5, 5 HAL_GPIO_WritePin(GPIOB, A5_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, (A4_Pin | A6_Pin), GPIO_PIN_RESET); break; case Ku10: // 10 HAL_GPIO_WritePin(GPIOB, A6_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, (A4_Pin | A5_Pin), GPIO_PIN_SET); break; case Ku20: case Ku200: // 20, 200 HAL_GPIO_WritePin(GPIOB, (A4_Pin | A6_Pin), GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, A5_Pin, GPIO_PIN_RESET); break; case Ku50: case Ku500: // 50, 500 HAL_GPIO_WritePin(GPIOB, (A5_Pin | A6_Pin), GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, A4_Pin, GPIO_PIN_RESET); break; case Ku100: case Ku1000: // 100, 1000 HAL_GPIO_WritePin(GPIOB, (A4_Pin | A5_Pin | A6_Pin), GPIO_PIN_SET); break; } if(clbr) { HAL_GPIO_WritePin(GPIOB, (A7_Pin | A8_Pin), GPIO_PIN_SET); //HP 2HZ HAL_GPIO_WritePin(GPIOB, A9_Pin, GPIO_PIN_RESET); //HP 2HZ HAL_GPIO_WritePin(GPIOB, (A10_Pin | A11_Pin | A12_Pin), GPIO_PIN_SET); //LP 100kHz } else { switch(pardata.IFV) // HPF { case Hp0_2: // 0,2 Hz HAL_GPIO_WritePin(GPIOB, (A7_Pin | A8_Pin | A9_Pin), GPIO_PIN_RESET); break; case Hp0_3: // 0,3 Hz HAL_GPIO_WritePin(GPIOB, A7_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, (A8_Pin | A9_Pin), GPIO_PIN_RESET); break; case Hp1: // 1 Hz HAL_GPIO_WritePin(GPIOB, A8_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, (A7_Pin | A9_Pin), GPIO_PIN_RESET); break; case Hp2: // 2 Hz HAL_GPIO_WritePin(GPIOB, (A7_Pin | A8_Pin), GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, A9_Pin, GPIO_PIN_RESET); break; case Hp10: // 10 Hz HAL_GPIO_WritePin(GPIOB, A9_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, (A7_Pin | A8_Pin), GPIO_PIN_RESET); break; } switch(pardata.IFN) //LPF { case Lp200: // 200 Hz HAL_GPIO_WritePin(GPIOB, (A10_Pin | A11_Pin | A12_Pin), GPIO_PIN_RESET); break; // 500 Hz case Lp500: HAL_GPIO_WritePin(GPIOB, A10_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, (A11_Pin | A12_Pin), GPIO_PIN_RESET); break; case Lp1000: // 1 kHz HAL_GPIO_WritePin(GPIOB, A11_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, (A10_Pin | A12_Pin), GPIO_PIN_RESET); break; case Lp5000: // 5 kHz HAL_GPIO_WritePin(GPIOB, (A10_Pin | A11_Pin), GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, A12_Pin, GPIO_PIN_RESET); break; case Lp10000: // 10 kHz HAL_GPIO_WritePin(GPIOB, A12_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, (A10_Pin | A11_Pin), GPIO_PIN_RESET); break; case Lp20000: // 20 kHz HAL_GPIO_WritePin(GPIOB, (A12_Pin | A10_Pin), GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, A11_Pin, GPIO_PIN_RESET); break; case Lp50000: // 50 kHz HAL_GPIO_WritePin(GPIOB, (A12_Pin | A11_Pin), GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, A10_Pin, GPIO_PIN_RESET); break; case Lp100000: // 100 kHz HAL_GPIO_WritePin(GPIOB, (A10_Pin | A11_Pin | A12_Pin), GPIO_PIN_SET); break; } } fKU = (float) CorrWord[pardata.IIN][pardata.IKU]; /*k = (uint32_t) (pardata.IKS * 100 + pardata.IKD * 10 + pardata.IKE); pardata.KCOND = (float) k; pardata.KCOND += 0.001f; pardata.KCOND *= 0.01f; fKU /= pardata.KCOND; //скорректиованное значение Ku fKU += 0.5f;*/ /* fKU /= pardata.SENS; while(fKU < 1.0f) { fKU *= 10; } while(fKU > 4095.4f) { fKU /= 10; } fKU += 0.5f; DVD = (uint16_t) fKU; if(DVD > 0xfff) { DVD = 0xfff; } */ if (pardata.SENS>=0.0001&&pardata.SENS<0.001) {OffsetKuDisplay=0; kNormToDAC=pardata.SENS*10000;} // такие значения не допустимы else if (pardata.SENS>=0.001&&pardata.SENS<0.01){OffsetKuDisplay=0; kNormToDAC=pardata.SENS*1000;} else if (pardata.SENS>=0.01&&pardata.SENS<0.1){OffsetKuDisplay=3; kNormToDAC=pardata.SENS*100;} else if (pardata.SENS>=0.1&&pardata.SENS<1){OffsetKuDisplay=6; kNormToDAC=pardata.SENS*10;} else if (pardata.SENS>=1&&pardata.SENS<10){OffsetKuDisplay=9; kNormToDAC=pardata.SENS/1;} else if (pardata.SENS>=10&&pardata.SENS<100){OffsetKuDisplay=12; kNormToDAC=pardata.SENS/10;} else if (pardata.SENS>=100&&pardata.SENS<1000){OffsetKuDisplay=15; kNormToDAC=pardata.SENS/100;} else if (pardata.SENS>=1000&&pardata.SENS<10000){OffsetKuDisplay=18; kNormToDAC=pardata.SENS/1000;} else if (pardata.SENS>=10000&&pardata.SENS<100000){OffsetKuDisplay=21; kNormToDAC=pardata.SENS/10000;} //void setDAC(void) //from 1210 DVD = fKU/kNormToDAC; // Делим коректировочнный множитель на коэфициент WRDAC(); // Load RDAC } void initCalibr(void) { pardata.IKE = 0; pardata.IKD = 0; pardata.IKS = 1; pardata.IFV = Hp1; pardata.IFN = Lp100000; switch(faseClbr) { case 0: // CHARGE 0.1 pardata.IIN = CHARGE; pardata.IKU = Ku0_1; break; case 1: // CHARGE 0.2 pardata.IIN = CHARGE; pardata.IKU = Ku0_2; break; case 2: // CHARGE 0.5 pardata.IIN = CHARGE; pardata.IKU = Ku0_5; break; case 3: // CHARGE 1 pardata.IIN = CHARGE; pardata.IKU = Ku1; break; case 4: // CHARGE 2 pardata.IIN = CHARGE; pardata.IKU = Ku2; break; case 5: // CHARGE 5 pardata.IIN = CHARGE; pardata.IKU = Ku5; break; case 6: // CHARGE 10 pardata.IIN = CHARGE; pardata.IKU = Ku10; break; case 7: // CHARGE 20 pardata.IIN = CHARGE; pardata.IKU = Ku20; break; case 8: // CHARGE 50 pardata.IIN = CHARGE; pardata.IKU = Ku50; break; case 9: // CHARGE 100 pardata.IIN = CHARGE; pardata.IKU = Ku100; break; case 10:// CHARGE 200 pardata.IIN = CHARGE; pardata.IKU = Ku200; break; case 11:// CHARGE 500 pardata.IIN = CHARGE; pardata.IKU = Ku500; break; case 12:// CHARGE 1000 pardata.IIN = CHARGE; pardata.IKU = Ku1000; break; case 13: // ICP 1 pardata.IIN = ICP; pardata.IKU = Ku1; break; case 14: // ICP 2 pardata.IIN = ICP; pardata.IKU = Ku2; break; case 15: // ICP 5 pardata.IIN = ICP; pardata.IKU = Ku5; break; case 16: // ICP 10 pardata.IIN = ICP; pardata.IKU = Ku10; break; case 17: // ICP 20 pardata.IIN = ICP; pardata.IKU = Ku20; break; case 18: // ICP 50 pardata.IIN = ICP; pardata.IKU = Ku50; break; case 19: // ICP 100 pardata.IIN = ICP; pardata.IKU = Ku100; break; case 20: // ICP 200 pardata.IIN = ICP; pardata.IKU = Ku200; break; case 21: // ICP 500 pardata.IIN = ICP; pardata.IKU = Ku500; break; case 22: // ICP 1000 pardata.IIN = ICP; pardata.IKU = Ku1000; break; } clbr = true; SetAndCorrect(); } void WrCor(void) { SetAndCorrect(); wrCorr(); } //****************************************************************************** // Запись в номирующий усилитель //****************************************************************************** void WRDAC(void) { uint8_t i; uint16_t dvd = DVD; dvd <<= 4; for(i = 0; i < 12; i++) { if(dvd & 0x8000) HAL_GPIO_WritePin(GPIOB, STD_Pin, GPIO_PIN_SET); else HAL_GPIO_WritePin(GPIOB, STD_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, SCK_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, SCK_Pin, GPIO_PIN_SET); dvd <<= 1; } HAL_GPIO_WritePin(GPIOB, FL_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, FL_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, STD_Pin, GPIO_PIN_SET); }