用485通讯,收到的数据不完整是什么情况
<p>有没有大佬,请教一下。</p><p>我用的是STC32做的ADC采样板,一个板子不够,做了四块,当做485子设备采集。</p>
<p>子设备平时不发数据,只有上位机发送MCUid的时候,才发出数据。</p>
<p>现在的情况是这样。一块板子,或者两块板子,传过来的数据都正常。</p>
<p>随便三块,四块连在一起的时候,上位机收到的数据就不完整了。</p>
<p>疑点:</p>
<p>1.我的485串口只连了A,B,没有接地,接地过来的数据乱码。</p>
<p>2.每个板子上都焊接了一块终端电阻,会不会有影响。</p>
<p>3.USB转485线必须接到上位机上,才能烧录MCU,不然就会通讯失败,或者时钟频率有误差。USB线接电脑上正常。<br />
<img src="data/attachment/forum/202412/10/180640u867bzc0wpw9zr6l.png" alt="image.png" title="image.png" /></p>
<p>原理图:</p>
<p><img src="data/attachment/forum/202412/10/175739f8v58josfamjz7uw.png" alt="image.png" title="image.png" /></p>
<p>pcb:</p>
<p><img src="data/attachment/forum/202412/10/175818q8f29q1m261l2q22.png" alt="image.png" title="image.png" /></p>
<p>单片机程序:</p>
<pre><code>for(i=0; i<7; i++)
{
printf("%02X",ID_ADDR);
sprintf (temp_mcuid,"%02X",ID_ADDR);
strcat(mcuid,temp_mcuid);
}
mcuid='\0';
printf("MCUID:%s \r\n",mcuid);
while (1)
{
if(TX1_Cnt != RX1_Cnt) P32 = 1;
else
{
rec_buffer='\0';
P32 = 0;
}
adc_result = '\0';
delay_ms(10);
if((TX1_Cnt != RX1_Cnt) && (!B_TX1_Busy)) //收到数据, 发送空闲
{
P32 = 1;
sprintf (temp_buffer,"%c",RX1_Buffer);
strcat(rec_buffer,temp_buffer);
// SBUF = RX1_Buffer;
// B_TX1_Busy = 1;
if(++TX1_Cnt >= UART1_BUF_LENGTH) TX1_Cnt = 0;
}
if(strcmp(rec_buffer,mcuid)==0)
{
for(i=0; i<15; i++)
{
delay_ms(10);
ADC_convert(i); //发送轮询通道AD值
}
printf("MCUID;%s;",mcuid);
printf("adc_result;%s",adc_result);
printf("\r\n");
}
}
</code></pre>
<p>不知道是不是这个问题</p>
<p>③用万用表测量RS485收发器芯片终端脚AB之间的电阻值是否为120Ω。特别需要注意的是有些USB转RS485模块的终端脚已经加上了120Ω的电阻,若在后面的RS485收发器芯片终端AB脚加120Ω电阻,会使阻抗失配导致数据异常,这时需要取掉一个120Ω电阻。</p>
终端电阻只有在线比较长的情况下才需要(15米以上)
线短不需要终端电阻,防止信号反射的
485必须是链形网络,禁止使用星形网络
终端电阻只能接在首尾,中间不许接(一对一通信是接在接收端,如422,但485是多机通信互为主从,数据是双向的,所以两头都接)
485:
422:
houyawei 发表于 2024-12-10 18:10
不知道是不是这个问题
③用万用表测量RS485收发器芯片终端脚AB之间的电阻值是否为120Ω。特别需要注意的是 ...
应该是这个问题。
带2个120欧姆的电阻后,负载太大。会导致数据异常。 DebugLab 发表于 2024-12-10 19:35
终端电阻只有在线比较长的情况下才需要(15米以上)
线短不需要终端电阻,防止信号反射的
485必须是链形网 ...
我的四块板子分布在40*40cm的亚克力板上
每个都焊了终端电阻
现在是一跟根线分出来四根线,应该是星形网络
我一个个排查吧 houyawei 发表于 2024-12-11 09:39
我的四块板子分布在40*40cm的亚克力板上
每个都焊了终端电阻
现在是一跟根线分出来四根线,应该是星形网 ...
终端电阻都拆掉
页:
[1]