370 lines
8.9 KiB
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);
|
|
}
|
|
|
|
|