/* * amps.c * * Created on: Mar 6, 2023 * Author: Keith.Lloyd */ #include #include #include "amps.h" #include "utils.h" #include "psu_ctrl.h" #include "timer.h" #include "ports.h" #include "frq.h" #include "taps.h" extern uint8_t frequency, Power_Level,old_freq, psu_failed; extern uint8_t Port_State[]; extern uint16_t PSU_Check_tmr; extern uint8_t Dds_Pot_Val[],catch_up_flag,Suspend_Step_Chk,step_count; void Enable_Amplifier(void) { // Port_State[BOTTOM_SR] |= 0b00000100; // for testing only select TAP1 TODO remove if (freqArray[frequency].frequency1 <= MAX_DTYPE) { // if(freqArray[old_freq].frequency1 >= MAX_DTYPE && old_freq !=DUMMY_FRQ) if(freqArray[old_freq].frequency1 > freqArray[frequency].frequency1 && old_freq !=DUMMY_FRQ) { Reduce_Kick_Back();// prevent the HF amp demand from setting the LF amp. //# Power_Level = 0; // catch_up_flag = true; Suspend_Step_Chk = false; step_count = 0; // Check_Pot_Val(); // reload max_pot Port_State[BOTTOM_SR] &= TAPS_OFF_MASK; // Set taps to safe Port_State[BOTTOM_SR] |= TAP2_LF_ON; } // Enable D'type amp // Port_State[1] = 0x22; // U13 Port_State[BOTTOM_SR] &= ~AMP_AB_SW; // Disable AB amp SPI0_SendBytes(Port_State, 3, EXPANDER); // Update shift register Delay_Ticks(5); Port_State[BOTTOM_SR] &= AMP_PSU_ON; // switch AMP PSU on SPI0_SendBytes(Port_State, 3, EXPANDER); // Update shift register Delay_Ticks(5); if((Check_For_Clamp())) Set_PSU_Voltage(V_42V); else Set_PSU_Voltage(V_36V); // TODO V_36V Set PSU Pot to D amp max Delay_Ticks(1); PSU_Check_tmr = PSU_DELAY; Port_State[BOTTOM_SR] |= SLCT_AMPD_ON; // Enable switch to allow power to driver SPI0_SendBytes(Port_State, 3, EXPANDER); // Update shift register Delay_Ticks(5); Port_State[MID_SR] |= DAMP_EN_ON; // Enable driver SPI0_SendBytes(Port_State, 3, EXPANDER); // Update shift register // Port_State[MID_SR] &= ~DAMP_EN_ON; // TODO Disable driver remove later // Select_Amp_Xfrmr_Rly(LFA_LFX); // Select LF amp and LF transformer } else { // if(freqArray[old_freq].frequency1 <= MAX_DTYPE && old_freq !=DUMMY_FRQ) if(freqArray[old_freq].frequency1 <= MAX_DTYPE && old_freq !=DUMMY_FRQ) { Reduce_Kick_Back(); // Power_Level = 0; Suspend_Step_Chk = false; step_count = 0; } if((Check_For_Clamp())) Set_PSU_Voltage(V_27V); else Set_PSU_Voltage(V_24V); // TODO V_36V Set PSU Pot to D amp max // Set_PSU_Voltage(MAX_AB_PSU); // Set PSU Pot to AB amp max // Disable D amp//enable AB amp Port_State[BOTTOM_SR] &= ~AMP_AB_SW; // Disable AB amp SPI0_SendBytes(Port_State, 3, EXPANDER); // Update shift register Port_State[BOTTOM_SR] &= AMP_PSU_ON; // switch AMP PSU on SPI0_SendBytes(Port_State, 3, EXPANDER); // Update shift register #if 1 psu_failed = false; if(!Wait_For_Psu(32.0)) // wait for PSU to drop { psu_failed = true; Delay_Ticks(100); } #endif Port_State[MID_SR] &= ~DAMP_EN_ON; // Disable driver SPI0_SendBytes(Port_State, 3, EXPANDER); // Update shift register Port_State[BOTTOM_SR] &= ~SLCT_AMPD_ON; // Disable D Amps PSU Switch SPI0_SendBytes(Port_State, 3, EXPANDER); // Update shift register Delay_Ticks(5); if(!psu_failed) { Port_State[BOTTOM_SR] |= AMP_AB_SW; // Enable AB AMP Power Switch. SPI0_SendBytes(Port_State, 3, EXPANDER); // Update shift register } } } void All_Amps_Off(void) // shut down Amplifiers DC for broadcast mode { Port_State[BOTTOM_SR] &= ~AMP_AB_SW; // Power down AB amp Port_State[BOTTOM_SR] &= ~SLCT_AMPD_ON; // Power down D amp Port_State[TOP_SR] &= ~ANT_AMP_SW; // Power down D amp Port_State[MID_SR] &= ~DAMP_EN_ON; // Disable driver DC Driver Port_State[MID_SR] &= ~ANT_AMP_EN; // Disable driver Antenna Driver SPI0_SendBytes(Port_State, 3, EXPANDER); // Update shift register } void Check_Pot_Val(void) { if(Dds_Pot_Val[1] > freqArray[frequency].max_pot) // if the old value is > max for new freq { Dds_Pot_Val[0] = 0; // address Dds_Pot_Val[1] = freqArray[frequency].max_pot; SPI0_SendBytes(Dds_Pot_Val, 2, AMPLITUDE); // reduce amplitude } }