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.

[参考译文] AMC7832:DAC输出无需命令即可更改值

Guru**** 2523440 points
Other Parts Discussed in Thread: AMC7832

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/633113/amc7832-dac-output-changes-value-without-command

部件号:AMC7832

您好!

我正在使用AMC7832来安装具有8个模拟输入和8个模拟输出的模拟扩展卡。 为了测试功能,我已将8个DAC连接到8个ADC。  

我的问题是,在短时间(平均30秒)后,DAC的输出变为0V (我使用的DAC的范围为0到+10V)。

我在ADC上遇到了同样的问题,但我已经通过软件解决了这个问题。

也许有人可以帮助我解决问题。

Thx,

托比

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Tobias,

    我怀疑您的设置存在问题,导致设备重置。 您能否发布您的示意图?

    谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是我的原理图,也许你可以找到一个问题

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看不到您的原理图有任何明显的问题。 您认为您是否可以在其中一个事件中使用示波器来捕获电源,DAC和参考的价值?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢Paul的帮助,

    我已经测量了IC上的电压,我发现不是DAC的问题!

    在我解决问题的那一刻,ADC自动转换似乎在未指定的时间后停止,只需给adctig一个勾号以重新启动自动转换。

    但是我不明白为什么自动转换停止,我将再次阅读数据表,也许我可以找到更好的解决方案。

    我添加了两个屏幕截图,第一个屏幕截图显示"自动转换停止"期间的电源电压,第二个屏幕截图显示事件期间保持稳定的DAC输出

    附注:度过了一个愉快的周末

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在转换停止之前,您可以读取多少个唯一的转换? 如果只是一个,那么我想你可能不是真的处于自动模式。 您还可以仔细检查您的代码,确保您没有意外修改任何寄存器,如配置寄存器或mux寄存器。

    谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有时似乎不会出现问题...

    我在ADC停止之前计算了DAV刻度,值为10.7万个转换刻度。
    我怀疑它与温度通道有关,但我不确定100 %。

    我将创建一个包含AMC7832命令的流程图,并在此处显示...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Tobias,

    是否有任何更新?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Paul:

    99 % 确定问题仅在激活温度传感器(并使用自动转换)时发生。

    可能是因为我不等待DAV勾选?

    目前,由于我使用的是FreeRTOS,所以不能使用中断!

    我们正在改变我们的设计,将为AMC7832使用自己的微控制器,然后可以等待勾号。

    正如这里所承诺的那样,使用了以下命令:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Tobias,

    我认为等待(或不等待) DAV脉冲不会导致ADC停止转换。 我怀疑在编写另一个寄存器的代码中存在一个错误。 MUX寄存器是否可能被错误地写入或在整数溢出情况下写入?

    谢谢!
    保罗
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,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);
    } 

    谢谢!

    托比亚斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Tobias,

    我看不到您的代码有任何明显的错误,但您是否在系统中除AMC的重置引脚之外的任何其它位置使用SPI_CS2端口? 我注意到您在SPI读写功能中指定了CS端口,可能是在其它设备读/写操作期间重置AMC?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Tobias,

    您是否能够解决此问题?

    保罗