A141/Core/Src/amplif.c

370 lines
8.9 KiB
C
Raw Normal View History

new file: .cproject new file: .gitignore new file: .mxproject new file: .project new file: .settings/com.atollic.truestudio.debug.hardware_device.prefs new file: .settings/language.settings.xml new file: .settings/org.eclipse.cdt.managedbuilder.core.prefs new file: .settings/org.eclipse.core.resources.prefs new file: A141 Amplifier.elf.launch new file: Amplifier.elf.launch new file: Amplifier.ioc new file: Core/Inc/flash.h new file: Core/Inc/gpio.h new file: Core/Inc/main.h new file: Core/Inc/my.h new file: Core/Inc/stm32l0xx_hal_conf.h new file: Core/Inc/stm32l0xx_it.h new file: Core/Inc/tim.h new file: Core/Inc/usart.h new file: Core/Src/amplif.c new file: Core/Src/flash.c new file: Core/Src/gpio.c new file: Core/Src/main.c new file: Core/Src/stm32l0xx_hal_msp.c new file: Core/Src/stm32l0xx_it.c new file: Core/Src/syscalls.c new file: Core/Src/system_stm32l0xx.c new file: Core/Src/tim.c new file: Core/Src/usart.c new file: Debug/A141 Amplifier.list new file: Debug/A141 Amplifier.map new file: Debug/Amplifier.list new file: Debug/Amplifier.map new file: Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l072xx.h new file: Drivers/CMSIS/Device/ST/STM32L0xx/Include/stm32l0xx.h new file: Drivers/CMSIS/Device/ST/STM32L0xx/Include/system_stm32l0xx.h new file: Drivers/CMSIS/Include/cmsis_armcc.h new file: Drivers/CMSIS/Include/cmsis_armclang.h new file: Drivers/CMSIS/Include/cmsis_compiler.h new file: Drivers/CMSIS/Include/cmsis_gcc.h new file: Drivers/CMSIS/Include/cmsis_iccarm.h new file: Drivers/CMSIS/Include/cmsis_version.h new file: Drivers/CMSIS/Include/core_armv8mbl.h new file: Drivers/CMSIS/Include/core_armv8mml.h new file: Drivers/CMSIS/Include/core_cm0.h new file: Drivers/CMSIS/Include/core_cm0plus.h new file: Drivers/CMSIS/Include/core_cm1.h new file: Drivers/CMSIS/Include/core_cm23.h new file: Drivers/CMSIS/Include/core_cm3.h new file: Drivers/CMSIS/Include/core_cm33.h new file: Drivers/CMSIS/Include/core_cm4.h new file: Drivers/CMSIS/Include/core_cm7.h new file: Drivers/CMSIS/Include/core_sc000.h new file: Drivers/CMSIS/Include/core_sc300.h new file: Drivers/CMSIS/Include/mpu_armv7.h new file: Drivers/CMSIS/Include/mpu_armv8.h new file: Drivers/CMSIS/Include/tz_context.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_cortex.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_def.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_dma.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_exti.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_flash.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_flash_ex.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_flash_ramfunc.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_gpio.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_gpio_ex.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_i2c.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_i2c_ex.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_pwr.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_pwr_ex.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_rcc.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_rcc_ex.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_tim.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_tim_ex.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_uart.h new file: Drivers/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_uart_ex.h new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_cortex.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_dma.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_exti.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_flash.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_flash_ex.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_flash_ramfunc.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_gpio.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_i2c.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_i2c_ex.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_pwr.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_pwr_ex.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_rcc.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_rcc_ex.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_tim.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_tim_ex.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_uart.c new file: Drivers/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_uart_ex.c new file: STM32L072CB_FLASH.ld new file: startup/startup_stm32l072xx.s
2023-12-19 15:23:01 +03:00
/*
* amplif.c
*
* Created on: 18 <EFBFBD><EFBFBD><EFBFBD> 2021 <EFBFBD>.
* 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;
//------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//------------------------------------------------------
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; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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;} // <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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; // <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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();
}
//******************************************************************************
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//******************************************************************************
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);
}