2025-05-14 12:57:39 -05:00
|
|
|
/*
|
|
|
|
|
* amps.c
|
|
|
|
|
*
|
|
|
|
|
* Created on: Mar 6, 2023
|
|
|
|
|
* Author: Keith.Lloyd
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
#include "amps.h"
|
|
|
|
|
#include "utils.h"
|
|
|
|
|
#include "psu_ctrl.h"
|
|
|
|
|
#include "timer.h"
|
|
|
|
|
#include "ports.h"
|
2025-06-25 11:18:44 -05:00
|
|
|
//#include "frq.h"
|
2025-05-14 12:57:39 -05:00
|
|
|
#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
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|