大家好!之前有调试TLC3578 AD芯片,CPU使用的是STM32,程序大致可以实现采集功能,
但是问题也来了
u16 i; SPI1_CS_HIGH(); SPI1_CS_LOW(); delay_ms(1); SPI_I2S_SendData(SPI1,0xa000); delay_ms(1); SPI1_CS_HIGH(); SPI1_CS_LOW(); delay_ms(1); SPI_I2S_SendData(SPI1,Convert_Mode); delay_ms(1); SPI1_CS_HIGH(); for(i = 0;i < 4096;i++) { SPI1_CS_HIGH(); SPI1_CS_LOW(); SPI_I2S_SendData(SPI1,Concert_Channel); while(!SPI1_RX_Flag); SPI1_RX_Flag = 0; } void EXTI1_IRQHandler(void) { EXTI_ClearITPendingBit(EXTI_Line1); SPI1_RX_Buffer[SPI1_RX_Size++] = SPI_I2S_ReceiveData(SPI1); SPI1_RX_Flag = 1; if(SPI1_RX_Size == 4096) SPI1_RX_Size = 0;
//delay_ms(1); }
代码如上所示,全速运行情况下,直流3.3v检测得到的转换值偏大0.7v左右,单步运行值相对准确,
使用AD模式为单次运行,在循环中每次运行,共执行4096次,把
EXTI1_IRQHandler(void)中的注释去掉之后,全速运行也可以实现准确转换,可是这样速度完全达不到要求。
希望大家可以帮助我下,我要实现的采样频率在120K左右,这样延时明显会导致整个项目失败。。。
user151383853:
要实现的采样频率在120K左右肯定是没有问题的,TLC3578 能够达到 200KSPS.
接下来的问题是数据传输的问题了。
由于 TLC3578 使用的是Serial SPI 数据接口,你可以使用 STM32 硬件 SPI 接口来控制,就完全不用担心速度问题。