A141/Core/Src/amplif.c

370 lines
8.9 KiB
C

/*
* 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<Ku1){
pardata.IKU=Ku1;
}
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);
}