183 lines
5.0 KiB
C
183 lines
5.0 KiB
C
/*
|
|
* @Author: wujunchao wujunchao@wuxismart.com
|
|
* @Date: 2024-12-24 08:18:26
|
|
* @LastEditors: wujunchao wujunchao@wuxismart.com
|
|
* @LastEditTime: 2025-03-19 13:07:31
|
|
* @FilePath: \signal_generator\App\MUX_SIGNAL\mux_signal.c
|
|
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
|
*/
|
|
/*
|
|
* @Author: DaMingSY zxm5337@163.com
|
|
* @Date: 2024-09-02 15:58:58
|
|
* @LastEditors: DaMingSY zxm5337@163.com
|
|
* @LastEditTime: 2024-11-28 10:21:04
|
|
* @FilePath: \signal_generator\App\MUX_SIGNAL\mux_signal.c
|
|
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
|
*/
|
|
#include "FreeRTOS.h"
|
|
#include "task.h"
|
|
#include "tim.h"
|
|
#include "mux_signal.h"
|
|
#include "dac.h"
|
|
#include "adc.h"
|
|
#include "rn7302.h"
|
|
#include <SIG24130.h>
|
|
#include "dac8552.h"
|
|
#include "ads1220.h"
|
|
#include "dac7811.h"
|
|
|
|
st_mux_signal mux_signal = {
|
|
.channel = CHX_IN_MAX,
|
|
};
|
|
|
|
st_freq_signal freq_signal;
|
|
|
|
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
|
|
{
|
|
if (&htim3 == htim)
|
|
{
|
|
if (freq_signal.capture_cnt >= 1)
|
|
{
|
|
HAL_TIM_IC_Stop_IT(&htim3, TIM_CHANNEL_4);
|
|
}
|
|
freq_signal.capture_buf[freq_signal.capture_cnt++] = HAL_TIM_ReadCapturedValue(&htim3, TIM_CHANNEL_4); // 获取当前的捕获值.
|
|
}
|
|
}
|
|
|
|
void fun_get_freq(st_freq_signal *freq_signal, float *data_pv)
|
|
{
|
|
if (!freq_signal || !data_pv)
|
|
|
|
return;
|
|
|
|
if (freq_signal->capture_cnt >= 1)
|
|
{
|
|
freq_signal->capture_cnt = 0;
|
|
__HAL_TIM_SET_COUNTER(&htim3, 0);
|
|
freq_signal->duty_time = freq_signal->capture_buf[1] + freq_signal->over_cnt * 60000 - freq_signal->capture_buf[0];
|
|
freq_signal->freq = 1000000 / freq_signal->duty_time;
|
|
*data_pv = freq_signal->freq;
|
|
freq_signal->over_cnt = 0;
|
|
}
|
|
else
|
|
{
|
|
HAL_TIM_Base_Start_IT(&htim3);
|
|
HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_4);
|
|
}
|
|
}
|
|
|
|
void hc138_channel_test(void)
|
|
{
|
|
uint8_t i;
|
|
for (i = 0; i < 10; i++)
|
|
{
|
|
HC138_SEL_CH(i);
|
|
vTaskDelay(3000);
|
|
}
|
|
vTaskDelay(3000);
|
|
}
|
|
|
|
void pwr_cosume(BOOL rst, uint32_t ms)
|
|
{
|
|
if (rst == TRUE || mux_signal.pwr_delay == 0)
|
|
mux_signal.pwr_delay = xTaskGetTickCount();
|
|
|
|
if (mux_signal.pwr_delay + ms > xTaskGetTickCount())
|
|
return;
|
|
else
|
|
mux_signal.pwr_delay = xTaskGetTickCount();
|
|
|
|
PWR_CTRL(GPIO_PIN_RESET);
|
|
vTaskDelay(250);
|
|
PWR_CTRL(GPIO_PIN_SET);
|
|
vTaskDelay(250);
|
|
PWR_CTRL(GPIO_PIN_RESET);
|
|
vTaskDelay(250);
|
|
PWR_CTRL(GPIO_PIN_SET);
|
|
vTaskDelay(250);
|
|
PWR_CTRL(GPIO_PIN_RESET);
|
|
}
|
|
|
|
static void fun_pwr12_ctrl(uint8_t ch)
|
|
{
|
|
static uint8_t lasht_ch;
|
|
BOOL ch_flag = FALSE;
|
|
|
|
if (ch != lasht_ch)
|
|
{
|
|
ch_flag = TRUE;
|
|
lasht_ch = ch;
|
|
}
|
|
if (ch_flag == TRUE)
|
|
{
|
|
ch_flag = FALSE;
|
|
//if ((ch == CH0_OUT_VOL_V) || (ch == CH2_OUT_CUR) || (ch == CH3_OUT_FRE) || (ch == CH4_OUT_RES))
|
|
//PWR12_CTRL(GPIO_PIN_SET);
|
|
//else
|
|
//PWR12_CTRL(GPIO_PIN_RESET);
|
|
}
|
|
}
|
|
|
|
uint8_t pulse = 50;
|
|
void mux_signal_switch(st_mux_signal *mux_signal)
|
|
{
|
|
CHANNEL ch;
|
|
|
|
ch = mux_signal->channel;
|
|
fun_pwr12_ctrl(ch);
|
|
HC138_SEL_CH(ch);
|
|
|
|
switch (ch)
|
|
{
|
|
case CH0_OUT_VOL_V:
|
|
dac_set_voltage(&mux_signal->data_sv);
|
|
fun_proc_adc1_dma(&mux_signal->data_pv);
|
|
break;
|
|
case CH1_OUT_VOL_MV:
|
|
dac8552_operation(NULL, &mux_signal->data_sv);
|
|
fun_get_sig16132_ch(4, &mux_signal->data_pv);
|
|
break;
|
|
case CH2_OUT_CUR:
|
|
dac8552_operation(&mux_signal->data_sv, NULL);
|
|
fun_get_sig16132_ch(7, &mux_signal->data_pv);
|
|
// ads1220_operation(CH2_OUT_CUR, &mux_signal->data_pv);
|
|
break;
|
|
case CH3_OUT_FRE:
|
|
freq_operation(mux_signal->data_sv, pulse);
|
|
fun_get_freq(&freq_signal, &mux_signal->data_pv);
|
|
break;
|
|
case CH4_OUT_RES:
|
|
fun_dac7811_operate(&mux_signal->data_sv);
|
|
break;
|
|
case CH5_IN_VOL:
|
|
fun_get_sig16132_ch(2, &mux_signal->data_pv);
|
|
// fun_rn7302_operate(CH0_IN_VOL, &mux_signal->data_pv);
|
|
break;
|
|
case CH6_IN_MVOL:
|
|
fun_get_sig16132_ch(3, &mux_signal->data_pv);
|
|
// fun_rn7302_operate(CH0_IN_VOL, &mux_signal->data_pv);
|
|
break;
|
|
case CH7_IN_CUR:
|
|
fun_get_sig16132_ch(5, &mux_signal->data_pv);
|
|
// fun_rn7302_operate(CH1_IN_CUR, &mux_signal->data_pv);
|
|
break;
|
|
case CH8_IN_FRE:
|
|
fun_get_freq(&freq_signal, &mux_signal->data_pv);
|
|
break;
|
|
case CH9_IN_TC:
|
|
ads1220_operation(CH9_IN_TC, &mux_signal->data_pv);
|
|
// fun_rn7302_operate(CH3_IN_RTD, &mux_signal->data_pv);
|
|
break;
|
|
case CH10_IN_RTD:
|
|
fun_get_sig16132_ch(10, &mux_signal->data_pv);
|
|
// fun_rn7302_operate(CH3_IN_RTD, &mux_signal->data_pv);
|
|
break;
|
|
case CH11_IN_HART:
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|