更新:
1、电阻输出功能调试完成; 2、问题修复:ads1220和dac7811的SPI配置不同,应该使用不同的初始化程序; 3、电阻输出暂时使用了粗略的校准;
This commit is contained in:
parent
0acf4df459
commit
cd05491dd9
|
@ -40,6 +40,7 @@ static void ads1220_cs(cs_state_type state)
|
|||
|
||||
static void fun_ads1220_spi1_init(void)
|
||||
{
|
||||
// 空闲电平为低,下降沿读取,SPI数据8位
|
||||
// hspi1.Instance = SPI1;
|
||||
// hspi1.Init.Mode = SPI_MODE_MASTER;
|
||||
// hspi1.Init.Direction = SPI_DIRECTION_2LINES;
|
||||
|
@ -314,8 +315,8 @@ void ads1220_operation(uint8_t channel, float32 *data_pv)
|
|||
}
|
||||
|
||||
ads1220_cs(CS_L);
|
||||
//vTaskDelay(10);
|
||||
HAL_Delay(10);
|
||||
vTaskDelay(10);
|
||||
//HAL_Delay(10);
|
||||
// if (channel == CH2_OUT_CUR)
|
||||
// {
|
||||
// ads1220_reset();
|
||||
|
@ -340,8 +341,8 @@ void ads1220_operation(uint8_t channel, float32 *data_pv)
|
|||
// else if (channel == CH10_IN_TC)
|
||||
// {
|
||||
ads1220_reset();
|
||||
HAL_Delay(5);
|
||||
//vTaskDelay(5);
|
||||
//HAL_Delay(5);
|
||||
vTaskDelay(5);
|
||||
setup_ads1220(
|
||||
ADS1220_MUX_AIN0_AIN1, // 输入多路复用器配置
|
||||
ADS1220_OP_MODE_NORMAL, // 工作模式选择
|
||||
|
@ -354,14 +355,14 @@ void ads1220_operation(uint8_t channel, float32 *data_pv)
|
|||
ADS1220_IDAC_CURRENT_OFF, // IDAC电流设置
|
||||
ADS1220_VREF_EXT_REF0_PINS, // 基准电压选择*
|
||||
ADS1220_TEMP_SENSOR_OFF); // 温度传感器
|
||||
//vTaskDelay(5);
|
||||
HAL_Delay(5);
|
||||
vTaskDelay(5);
|
||||
//HAL_Delay(5);
|
||||
ads1220_start();
|
||||
HAL_Delay(30);
|
||||
//vTaskDelay(30);
|
||||
//HAL_Delay(30);
|
||||
vTaskDelay(30);
|
||||
ads1220_get_conversion_data(data_pv);
|
||||
// }
|
||||
ads1220_cs(CS_H);
|
||||
//vTaskDelay(5);
|
||||
HAL_Delay(5);
|
||||
vTaskDelay(5);
|
||||
//HAL_Delay(5);
|
||||
}
|
||||
|
|
|
@ -10,79 +10,92 @@ BOOL dac7811_spi_init_flag = FALSE;
|
|||
|
||||
void fun_dac7811_spi1_init()
|
||||
{
|
||||
// hspi1.Instance = SPI1;
|
||||
// hspi1.Init.Mode = SPI_MODE_MASTER;
|
||||
// hspi1.Init.Direction = SPI_DIRECTION_2LINES;
|
||||
// hspi1.Init.DataSize = SPI_DATASIZE_16BIT;
|
||||
// hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
|
||||
// hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||
// hspi1.Init.NSS = SPI_NSS_SOFT;
|
||||
// hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
|
||||
// hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||
// hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||
// hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||
// hspi1.Init.CRCPolynomial = 10;
|
||||
// if (HAL_SPI_Init(&hspi1) != HAL_OK)
|
||||
// {
|
||||
// Error_Handler();
|
||||
// }
|
||||
MX_SPI1_Init();
|
||||
ADS1220_CS(GPIO_PIN_SET);
|
||||
DAC7811_CS(GPIO_PIN_RESET);
|
||||
//空闲电平为高,下降沿读取/写入,SPI数据16位
|
||||
hspi1.Instance = SPI1;
|
||||
hspi1.Init.Mode = SPI_MODE_MASTER;
|
||||
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
|
||||
hspi1.Init.DataSize = SPI_DATASIZE_16BIT;
|
||||
hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
|
||||
hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
|
||||
hspi1.Init.NSS = SPI_NSS_SOFT;
|
||||
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
|
||||
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||
hspi1.Init.CRCPolynomial = 10;
|
||||
if (HAL_SPI_Init(&hspi1) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
ADS1220_CS(GPIO_PIN_SET);
|
||||
DAC7811_CS(GPIO_PIN_RESET);
|
||||
}
|
||||
|
||||
void fun_dac7811_operate(float32 *data_sv)
|
||||
{
|
||||
if (data_sv == NULL) return;
|
||||
if (data_sv == NULL) return;
|
||||
|
||||
if(*data_sv > 4000)
|
||||
{
|
||||
*data_sv = 4000;
|
||||
}
|
||||
else if (*data_sv < 0)
|
||||
{
|
||||
*data_sv = 0;
|
||||
}
|
||||
if(*data_sv > 4000)
|
||||
{
|
||||
*data_sv = 4000;
|
||||
}
|
||||
else if (*data_sv < 0)
|
||||
{
|
||||
*data_sv = 0;
|
||||
}
|
||||
|
||||
float32 temp = *data_sv;
|
||||
/**********在此处进行电阻输出(Ω)校准,temp为目标值**********/
|
||||
temp = calibrate_res_ohm_out(temp);
|
||||
float32 temp = *data_sv;
|
||||
/**********在此处进行电阻输出(Ω)校准,temp为目标值**********/
|
||||
temp = calibrate_res_ohm_out(temp);
|
||||
|
||||
if(temp > 4000)
|
||||
{
|
||||
temp = 4000;
|
||||
}
|
||||
else if (temp < 0)
|
||||
{
|
||||
temp = 0;
|
||||
}
|
||||
mux_signal.sv_calibrated = temp;
|
||||
/**********************************************************/
|
||||
if(temp > 4000)
|
||||
{
|
||||
temp = 4000;
|
||||
}
|
||||
else if (temp < 0)
|
||||
{
|
||||
temp = 0;
|
||||
}
|
||||
mux_signal.sv_calibrated = temp;
|
||||
/**********************************************************/
|
||||
|
||||
uint16_t reg_data = (uint16_t)(temp);
|
||||
reg_data |= 0x1000;
|
||||
reg_data &= 0x1fff;
|
||||
//实际输出与设定值之间存在倍数关系
|
||||
if(temp <= 1000)
|
||||
{
|
||||
temp /= 1.4f;
|
||||
}
|
||||
else if(temp <= 2000)
|
||||
{
|
||||
temp /= 1.2f;
|
||||
}
|
||||
else if(temp <= 3000)
|
||||
{
|
||||
temp /= 1.1f;
|
||||
}
|
||||
|
||||
uint16_t reg_data = (uint16_t)(temp);
|
||||
reg_data |= 0x1000;
|
||||
reg_data &= 0x1fff;
|
||||
|
||||
if (dac7811_spi_init_flag == FALSE)
|
||||
{
|
||||
fun_dac7811_spi1_init();
|
||||
ads1220_spi_init_flag = FALSE;
|
||||
dac7811_spi_init_flag = TRUE;
|
||||
vTaskDelay(10);
|
||||
}
|
||||
|
||||
DAC7811_CS(GPIO_PIN_RESET);
|
||||
HAL_SPI_Transmit(&hspi1, (uint8_t *)(®_data), 1, 1000);
|
||||
DAC7811_CS(GPIO_PIN_SET);
|
||||
|
||||
if (dac7811_spi_init_flag == FALSE)
|
||||
{
|
||||
fun_dac7811_spi1_init();
|
||||
ads1220_spi_init_flag = FALSE;
|
||||
dac7811_spi_init_flag = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
DAC7811_CS(GPIO_PIN_RESET);
|
||||
vTaskDelay(100);
|
||||
HAL_SPI_Transmit(&hspi1, (uint8_t *)(®_data), 1, 1000);
|
||||
vTaskDelay(100);
|
||||
DAC7811_CS(GPIO_PIN_SET);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t resohm_out_cal_enable = 0;
|
||||
float32 calibrate_res_ohm_out(float32 raw)
|
||||
{
|
||||
float result = 0;
|
||||
float result = 0;
|
||||
|
||||
switch (resohm_out_cal_enable)
|
||||
{
|
||||
|
|
|
@ -6,6 +6,12 @@
|
|||
#define RTS_ON GPIO_PIN_RESET
|
||||
#define RTS_OFF GPIO_PIN_SET
|
||||
|
||||
#define HART_24V_ENABLE HAL_GPIO_WritePin(RS_EN_GPIO_Port, RS_EN_Pin, GPIO_PIN_RESET)
|
||||
#define HART_24V_DISABLE HAL_GPIO_WritePin(RS_EN_GPIO_Port, RS_EN_Pin, GPIO_PIN_SET)
|
||||
|
||||
#define HART_250OHM_ENABLE HAL_GPIO_WritePin(RP_EN_GPIO_Port, RP_EN_Pin, GPIO_PIN_RESET)
|
||||
#define HART_250OHM_DISABLE HAL_GPIO_WritePin(RP_EN_GPIO_Port, RP_EN_Pin, GPIO_PIN_SET)
|
||||
|
||||
void hart_send(UART_HandleTypeDef *huart, uint8_t *data);
|
||||
void hart_communicate(st_scom *scom);
|
||||
|
||||
|
|
|
@ -280,8 +280,8 @@ void mux_signal_switch(st_mux_signal *mux_signal)
|
|||
break;
|
||||
|
||||
case CH4_OUT_RES:
|
||||
//if(mux_set_flag) fun_dac7811_operate(&mux_signal->data_sv); //设定
|
||||
fun_dac7811_operate(&mux_signal->data_sv);
|
||||
if(mux_set_flag) fun_dac7811_operate(&mux_signal->data_sv); //设定
|
||||
//fun_dac7811_operate(&mux_signal->data_sv);
|
||||
break;
|
||||
|
||||
case CH5_EMPTY:
|
||||
|
|
|
@ -217,33 +217,58 @@ void start_task_hart(void const * argument)
|
|||
/* Infinite loop */
|
||||
for (;;)
|
||||
{
|
||||
//该任务用于设置HART芯片所需频率、驱动验证
|
||||
if(tabdata.hart_enable == 1)
|
||||
if( (fre_set_hart != 460800)&&(tabdata.hart_enable) )
|
||||
{
|
||||
if(fre_set_hart != 460800)
|
||||
{
|
||||
fre_set_hart = 460800;
|
||||
frequence_output(fre_set_hart, 50, PWM_HART);
|
||||
}
|
||||
|
||||
//驱动验证,DEVICE <--- HART ---> SIG
|
||||
if(hart_test == 1)
|
||||
{
|
||||
hart_test = 0;
|
||||
|
||||
scom1_hart.tx_flag = TRUE;
|
||||
hart_communicate(&scom1_hart);
|
||||
}
|
||||
fre_set_hart = 460800;
|
||||
frequence_output(fre_set_hart, 50, PWM_HART);
|
||||
}
|
||||
else
|
||||
|
||||
switch (tabdata.hart_enable)
|
||||
{
|
||||
if(fre_set_hart != 0)
|
||||
case HART_DISABLE:
|
||||
{
|
||||
fre_set_hart = 0;
|
||||
frequence_output(fre_set_hart, 50, PWM_HART);
|
||||
if(fre_set_hart != 0)
|
||||
{
|
||||
fre_set_hart = 0;
|
||||
frequence_output(fre_set_hart, 50, PWM_HART);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case HART_LISTEN:
|
||||
{
|
||||
HART_24V_DISABLE;
|
||||
HART_250OHM_DISABLE;
|
||||
}
|
||||
break;
|
||||
|
||||
case HART_INTERNAL_24V:
|
||||
{
|
||||
HART_24V_ENABLE;
|
||||
HART_250OHM_DISABLE;
|
||||
}
|
||||
break;
|
||||
|
||||
case HART_INTERNAL_250OHM:
|
||||
{
|
||||
HART_250OHM_ENABLE;
|
||||
HART_24V_DISABLE;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
//驱动验证,DEVICE <--- HART ---> SIG
|
||||
// if(hart_test == 1)
|
||||
// {
|
||||
// hart_test = 0;
|
||||
|
||||
// scom1_hart.tx_flag = TRUE;
|
||||
// hart_communicate(&scom1_hart);
|
||||
// }
|
||||
|
||||
system_sts.hart_stack_consume = HART_STACK_SIZE_WORD - uxTaskGetStackHighWaterMark(NULL);
|
||||
osDelay(HART_TASK_PERIOD);
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue