[fix] modify calc freq/phase and correct bugs

This commit is contained in:
2023-07-31 21:01:49 +02:00
parent a690f3a209
commit d3d896a419
10 changed files with 127 additions and 56 deletions

View File

@@ -35,6 +35,51 @@ static GEN_sig_t signal_gen[CHANNEL_MAX] = {
{.type = GEN_PWM_TYPE, .gen = &pwm_gen[2]},
};
void _signalGenDefaultValues(void)
{
for (GEN_channel_t channel = 0; channel < CHANNEL_MAX; channel++)
{
switch (signal_gen[channel].type)
{
case GEN_FG_TYPE:
{
GEN_fg_t *gen = signal_gen[channel].gen;
gen->frequency = 1000;
gen->amplitude = 100;
gen->offset = 165;
gen->phase = 0;
gen->wave = GEN_SIN;
gen->enabled = FALSE;
gen->link = 0;
break;
}
case GEN_PWM_TYPE:
{
GEN_pwm_t *gen = signal_gen[channel].gen;
gen->frequency = 1000;
gen->amplitude = 0;
gen->offset = 0;
gen->phase = 0;
gen->duty = 50;
gen->enabled = FALSE;
break;
}
default:
break;
}
}
}
void _setGenInitailState(GEN_channel_t channel)
{
setFreq(&signal_gen[channel], channel);
setWave(&signal_gen[channel], channel);
setPhase(&signal_gen[channel], channel);
setAmplitude(&signal_gen[channel], channel);
setEnabled(&signal_gen[channel], channel);
// setOfsset(&signal_gen[channel], channel);
}
void APP_init(APP_data_t *app_data)
{
_app_data = app_data;
@@ -57,9 +102,11 @@ void APP_init(APP_data_t *app_data)
_app_data->isButtonChange = 1;
_app_data->isButtonBlink = 1;
_signalGenDefaultValues();
CTRL_buttonsInit();
HAL_GPIO_WritePin(LED_CH1_GPIO_Port, LED_CH1_Pin, GPIO_PIN_SET);
gen_init();
_setGenInitailState(CHANNEL1);
_setGenInitailState(CHANNEL2);
}
void CTRL_buttonsInit(void)
@@ -143,7 +190,7 @@ static void _changeValueFunGen(int8_t dir)
return;
}
gen->frequency = new_freq;
setFreq(&signal_gen[CHANNEL1], CHANNEL1);
setFreq(&signal_gen[_app_data->curr_channel], _app_data->curr_channel);
break;
}
case LAY_AMPL:
@@ -155,7 +202,7 @@ static void _changeValueFunGen(int8_t dir)
return;
}
gen->amplitude = new_ampl;
setAmplitude(&signal_gen[CHANNEL1], CHANNEL1);
setAmplitude(&signal_gen[_app_data->curr_channel], _app_data->curr_channel);
break;
}
case LAY_OFFS:
@@ -167,7 +214,7 @@ static void _changeValueFunGen(int8_t dir)
return;
}
gen->offset = new_offs;
setOfsset(&signal_gen[CHANNEL1], CHANNEL1);
setOfsset(&signal_gen[_app_data->curr_channel], _app_data->curr_channel);
break;
}
case LAY_PHAS:
@@ -179,6 +226,7 @@ static void _changeValueFunGen(int8_t dir)
return;
}
gen->phase = new_phas;
setPhase(&signal_gen[_app_data->curr_channel], _app_data->curr_channel);
break;
}
default:

View File

@@ -18,8 +18,9 @@ void CTRL_channelButtonInit(void)
channel_buttons[BTN_CH_2].instance = BTN_CH_2;
channel_buttons[BTN_CH_2].buttonPressed = CTRL_pushedChanBtnEvent;
channel_buttons[BTN_CH_2].gpio_port = DUMMY_GPIO_Port;
channel_buttons[BTN_CH_2].gpio_pin = DUMMY_GPIO_Pin;
channel_buttons[BTN_CH_2].buttonLongPressed = CTRL_longPushedChanBtnEvent;
channel_buttons[BTN_CH_2].gpio_port = BTN_CH2_GPIO_Port;
channel_buttons[BTN_CH_2].gpio_pin = BTN_CH2_Pin;
channel_buttons[BTN_CH_2].pushed_state = GPIO_PIN_RESET;
channel_buttons[BTN_CH_3].instance = BTN_CH_3;

View File

@@ -90,7 +90,6 @@ void led_off(GEN_led_t *hled)
void gen_init()
{
ad9833_init(&dds_gen[FG_CHAN1].hdds, &hspi2, DDS1_CS_GPIO_Port, DDS1_CS_Pin);
ad9833_setMode(&dds_gen[FG_CHAN1].hdds, MODE_OFF);
ad9833_init(&dds_gen[FG_CHAN2].hdds, &hspi2, DDS2_CS_GPIO_Port, DDS2_CS_Pin);
// ad9833_init(&dds_gen[FG_CHAN3].hdds, &hspi2, DDS3_CS_PORT, DDS3_CS_PIN);
@@ -99,11 +98,11 @@ void gen_init()
// ltc2631_init(&dds_gen[FG_CHAN3].hoffs, &hi2c1, 0x02, LTC2631_8BIT, LTC_REF_2V5);
mcp41x_init(&dds_gen[FG_CHAN1].hampl, &hspi2, AMP1_CS_GPIO_Port, AMP1_CS_Pin, MCP41X_10K);
mcp41x_setValue(&dds_gen[FG_CHAN1].hampl, 0);
mcp41x_init(&dds_gen[FG_CHAN1].hampl, &hspi2, AMP2_CS_GPIO_Port, AMP2_CS_Pin, MCP41X_10K);
// mcp41x_init(&dds_gen[FG_CHAN1].hampl, &hspi2, AMP3_CS_PORT, AMP3_CS_PIN, MCP41X_10K);
mcp41x_init(&dds_gen[FG_CHAN2].hampl, &hspi2, AMP2_CS_GPIO_Port, AMP2_CS_Pin, MCP41X_10K);
// mcp41x_init(&dds_gen[FG_CHAN3].hampl, &hspi2, AMP3_CS_PORT, AMP3_CS_PIN, MCP41X_10K);
led_init(&dds_gen[FG_CHAN1].hled, LED_CH1_GPIO_Port, LED_CH1_Pin);
led_init(&dds_gen[FG_CHAN2].hled, LED_CH2_GPIO_Port, LED_CH2_Pin);
}
static void _setAmpliude(mcp41x_handle_t *hampl, uint16_t ampl_x100)
@@ -116,25 +115,25 @@ static void _setAmpliude(mcp41x_handle_t *hampl, uint16_t ampl_x100)
static void _setOffset(ltc2631_handle_t *hoffs, int16_t offs_x100)
{
uint32_t value = (offs_x100 + MAX_VOLT_POS) * LTC_REF_2V5;
ULOG_DEBUG("(%d:_setAmplitude) offs_x100: %d, value: %d", __LINE__, offs_x100, value);
ULOG_DEBUG("(%d:_setOffset) offs_x100: %d, value: %d", __LINE__, offs_x100, value);
ltc2631_setOutputVoltage_u(hoffs, value);
}
static void _setFreqDdsGen(ad9833_handle_t *hdds, uint32_t freq)
{
ULOG_DEBUG("(%d:_setAmplitude) freq: %d", __LINE__, freq);
ULOG_DEBUG("(%d:_setFreqDdsGen) freq: %d", __LINE__, freq);
ad9833_setFrequency(hdds, CHAN_0, freq);
}
static void _setPhaseDdsGen(ad9833_handle_t *hdds, uint32_t phas)
{
ULOG_DEBUG("(%d:_setAmplitude) phase: %d", __LINE__, phas);
ULOG_DEBUG("(%d:_setPhaseDdsGen) phase: %d", __LINE__, phas);
ad9833_setPhase(hdds, CHAN_0, phas);
}
static void _setWaveDdsGen(ad9833_handle_t *hdds, GEN_wave_t wave)
{
ULOG_DEBUG("(%d:_setAmplitude) wave: %d", __LINE__, wave);
ULOG_DEBUG("(%d:_setWaveDdsGen) wave: %d", __LINE__, wave);
switch (wave)
{
case GEN_SIN:
@@ -155,7 +154,7 @@ static void _setWaveDdsGen(ad9833_handle_t *hdds, GEN_wave_t wave)
static void _setEnabledDdsGen(FG_handle_t *hfg, GEN_fg_t *gen)
{
ULOG_DEBUG("(%d:_setAmplitude) phase: %d", __LINE__, gen->enabled);
ULOG_DEBUG("(%d:_setEnabledDdsGen) enabled: %d", __LINE__, gen->enabled);
switch (gen->enabled)
{
case FALSE: