STM32/STM8技术william hill官网
直播中

jf_76273375

1年用户 4经验值
擅长:嵌入式技术
私信 关注
[问答]

关于cs1238芯片通道切换的问题求助

我是用adc两个通道分别采集两个电压信号,因为需要不停的切换通道采集,主控是stm32,我程序是没三秒切换一次通道,测试过程中发现,切换完通道后,会存在已经切换到通道a了,但是还是采集的通道b的电压,有老哥董是什么原因吗
uint32_t tempA_PH;
static uint8_t count_PH = 0;
float PH_V;
Delay_us(50);
while(Read_Con_CS1238()!=0x50)//读取CS1238寄存器循环判断切换通道是否成功,切换成功则跳出
{
Con_CS1238(RefOut_OFF | SpeedSelct_40HZ | PGA_1 | CH_A);//配置CS1238芯片
}
Delay_us(50);

tempA_PH=processData();//读取ADC

Voltage_PH[count_PH] = (float)tempA_PH*1.25/8388607;//转换十进制浮点数电压
Voltage_PH[0]=0;	
Voltage_PH[1]=0;	

count_PH++;
每次进函数之前都是while循环去判断cs1238芯片寄存器的通道寄存器有没有改过来,改过来就继续,然后我以为是在adc转换电压过程中我切换了通道,切换通道后他转移的还是上一个通道的电压,我就直接把数组前面两个置0,不要了,然后冒泡排序,取中间三个数的平均值,但是还是存在问题,还是会采集到另外一个通道的电压,有懂的老哥知道是什么原因吗

回帖(1)

硕达科讯

2024-1-23 17:16:16

最佳答案

有几个可能导致你的程序出现这种问题:

1. 通道切换延迟:切换通道之后,需要一定的时间让芯片完成切换操作并稳定下来,才能进行采样。你在切换通道之后,延时了50微秒,可能这个时间不够长。尝试适当增加延时时间,看是否能解决问题。

2. 采样周期问题:根据你的描述,你是每隔3秒切换一次通道,但你的代码中没有看到相关的延时操作。请确保你的采样间隔正确,不要在切换通道期间进行采样。如果你的采样周期比通道切换时间短,可能会导致采样结果出现错误。

3. 程序逻辑错误:除了通道切换和采样延迟外,可能还有其他代码逻辑问题导致通道切换不成功或者数据处理错误。请检查你的代码中是否存在其他可能引起这种错误的部分。

希望以上建议对你有帮助,祝你顺利解决问题!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分