Files
TX/source/amps.c

166 lines
4.1 KiB
C
Raw Permalink Normal View History

/*
* 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"
//#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
}
}