您好!
我正在使用AMC7832来安装具有8个模拟输入和8个模拟输出的模拟扩展卡。 为了测试功能,我已将8个DAC连接到8个ADC。
我的问题是,在短时间(平均30秒)后,DAC的输出变为0V (我使用的DAC的范围为0到+10V)。
我在ADC上遇到了同样的问题,但我已经通过软件解决了这个问题。
也许有人可以帮助我解决问题。
Thx,
托比
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,Paul:
我已经为您添加了处理温度的代码片段! (定期执行)
我还检查了代码的其余部分,我不相信MUX寄存器是意外写入的!
void AMC7832_temperature(Card_slots *Card)
{
IF (CardsStorage[Card->SP_POSITION].InitFlag.TemperatureActivation==1)
{
IF (Card_Analog [Card->SP_POSITION].TempActiv=0)
{
AMC7832_Write(0x15, 0x02, Card->SPI_port, Card->CS_PIN];[1] // mux配置以启用温度传感器ADC
AMC7832_Write(0xC0, 0x01, Card->SPI_port, Card->CS_port[1],Card->CS_PIN[1]); //启动自动转换
Card_Analog [Card->SP_POSITION ].TempActiv=1;
}uint8_t
temp[3];
float tempsave;
volatile uint8_t position = Card->SP_position;
AMC7832_Read(0x78, temp, Card->SPI_port, Card->CS_port[1], card->CS_pin[1]);// read temp data low byte
uint8_t cache = temp[2];
AMC7832_read (0x79,temp,Card->SPI_port,Card->CS_port[1], CARD->CS_pin[1]);//读取温度数据高位
Int16_t温度=(temp[2]<8)|缓存)和0x0FFF;//如果
(((temperatur & 0x0E00)== 0x0E00)//检查温度是否被否决,则合并AMC7832的两个温度寄存器; 以°C计算温度
{
tempsave =(((((4096- temperatur)/4.0f)*(-1.0f);
}
否则
{
tempsave =((Float) temperatur/4.0f);
}
如果((tempsave >125.0f)||(tempsave <-40.0f)//检查temp是否超出范围,通常在0°C左右,因为寄存器中的温度不稳定;一个reg超过0°,另一个在0°以下
{
tempsave =0;
Card_Analog [position ].counttemp Temp!--;
tranalogCard_Analog [position ].temp+[position
如果(Card_Analog [position ].countTemp >=50)
{
Card_Analog [position ].temperature =(FLOW) Card_Analog [position ].tryTemp /50.0;
Card_Analog [position ].tryTemp =0;
Card_Analog [position ].countTemp =0;
tempsave =0;
}
else
{
IF (Card_SP_SPI [Card_Analog ]->Analog [position ].78pin =0;_Card_Clut_Port
// mux配置以禁用温度传感器ADC
AMC7832_Write(0xC0, 0x01, Card->SPI_port, Card->CS_port[1],Card->CS_PIN[1]); //开始自动转换
Card_Analog [Card->SP_POSITION ].TempActiv= 0;
}
}}
} void AMC7832_Write(uint8_t control_l,uint8_t data,SPI_HandleTypeDef SPI_Port,gPI_typedef* CS_Port,uint16_t CS_Pin)
{ uint8_t_86_t数据,SPI_1_transmit spi_control_汉/spi_1_1_l_l/spi_ref_transmit spi_1sf_transmit spi_ref_l/spi_l_transmit spi_1sf_ref_transmit
//数据写入字节
HAL_GPIO_WritePin (CS_Port,CS_Pin,0);
HAL_SPI_TransmitReceive(&SPI_Port,SPI_Transmit, SPI_Receive,3,1);
HAL_GPIO写入引脚(CS_Port,CS_Pin, 1);
}
void AMC7832_read(uint8_t control_l, uint8_t *data_rec, SPI_HandleTypeDef_Port, gPIO_typedef* CS_Port, uint16_t CS_Pin)
{
uint8_t SPI_Transmit[3];SPI_Transmit_Transmit[0]
= 0x80;//spi_pin_write_1;
spi_pin SPIf_1; sf_pin SPIf_1; sbyte_p_refl_refl_refl; sf_refl_refl_refl; sf_refl_; sf_refl_refl_refl_refl_; sf_refl_; sf_refl_refl_refl_; sf_refl_; sf_refl_; s
SPI_Transmit,DATA_rec,3,1);
HAL_GPIO写入引脚(CS_Port, Cs_Pin,1);
}
谢谢!
托比亚斯