OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4872|回复: 10

RS485通讯不畅,不能相互通信

[复制链接]

14

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2020-9-2
在线时间
41 小时
发表于 2020-12-24 09:32:47 | 显示全部楼层 |阅读模式
1金钱
最近公司需要搞485通信,485芯片选用的是MAX3485,线材双绞网线,大约30米。可是我总是不能调的正常使用。有没有有这方面经验的兄弟指点一下。源码是正点原子的stm32库函数。我们的电路AB两端没有加上拉、下拉电阻。想着由于距离比较近也没有加匹配电阻。还有什么原因能够造成485通信不畅的原因么?求指点,谢谢!

最佳答案

查看完整内容[请看2#楼]

假设你除了最远端的两个模块,其它中间的模块都没有上拉下拉电阻和终端电阻,那么AB端的空闲电平是由上拉下拉电阻和终端电阻分压计算: 3.3*0.12/(4.7+4.7+0.12)=0.0416V
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2020-6-24
在线时间
311 小时
发表于 2020-12-24 09:32:48 | 显示全部楼层
本帖最后由 ColeSofCJ 于 2020-12-24 15:32 编辑
binzhang 发表于 2020-12-24 15:08
我AB端的上下拉电阻接的是4.7K,AB间的匹配电阻是120欧的,现在我用485转串口的模块测量发送端的数据是正 ...

假设你除了最远端的两个模块,其它中间的模块都没有上拉下拉电阻和终端电阻,那么AB端的空闲电平是由上拉下拉电阻和终端电阻分压计算: 3.3*0.12/(4.7+4.7+0.12)=0.0416V<<0.2V,所以你的上拉和下拉电阻需要减少到五分之一左右,用510欧的上拉和下拉电阻就可以了,终端电阻保持不变。     用USB模块与单片机通讯可以,但单片机之间通讯不行,是因为USB模块一侧的上拉下拉电阻比较小,能保证AB端空闲电压大于0.2V,而你单片机上的上下拉电阻过大,没有保证AB端空闲电压大于0.2V。
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13131
金钱
13131
注册时间
2012-11-26
在线时间
3814 小时
发表于 2020-12-24 10:08:25 | 显示全部楼层
不加电阻不是等死么?
回复

使用道具 举报

12

主题

3402

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8688
金钱
8688
注册时间
2020-5-11
在线时间
4174 小时
发表于 2020-12-24 10:13:33 | 显示全部楼层
“30米”“距离比较近”?
AB两端上拉、下拉电阻建议加上,利于稳定共模电压。
匹配电阻,若示波器看AB上的波形较好,则可以不加。
专治疑难杂症
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2020-12-24 10:16:35 | 显示全部楼层
问题你都不说清楚,到底是硬件问题还是软件问题,谁能知道
找示波器先看看收发信号是否正常,再确定基本的收发功能是否正常
一步步找原因
一分耕耘一分收获。
回复

使用道具 举报

14

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2020-9-2
在线时间
41 小时
 楼主| 发表于 2020-12-24 10:48:16 | 显示全部楼层
yklstudent 发表于 2020-12-24 10:16
问题你都不说清楚,到底是硬件问题还是软件问题,谁能知道
找示波器先看看收发信号是否正常,再确定基本的 ...

我用485模块在电脑上能够看到发送的数据。但是当我两个stm32接上时就接收就不行了。接收端没反应了。
回复

使用道具 举报

13

主题

91

帖子

0

精华

高级会员

Rank: 4

积分
750
金钱
750
注册时间
2020-6-24
在线时间
311 小时
发表于 2020-12-24 10:50:52 | 显示全部楼层
Max3485芯片的pdf文档多读几遍,里面有关于485通讯的几个注意事项: 1)A-B线需要加上拉、下拉、终端电阻后默认电平>200mV;  2)终端电阻两头都要加,一条总线只需要两个,中间的不能加    建议上拉、下拉和终端电阻都只加两头,这样比较容易算电阻的阻值
回复

使用道具 举报

14

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2020-9-2
在线时间
41 小时
 楼主| 发表于 2020-12-24 10:53:11 | 显示全部楼层
yklstudent 发表于 2020-12-24 10:16
问题你都不说清楚,到底是硬件问题还是软件问题,谁能知道
找示波器先看看收发信号是否正常,再确定基本的 ...

发送端代码
void  sendData(u8 n)
{   
                int i=0;
                RS485_TX_EN=1;                                //默认为发送模式       
               
                                //while(USART_GetFlagStatus(USART2,USART_FLAG_TC)== RESET);
                                USART_SendData(USART2,table[n]);
                                while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)== RESET);
                delay_ms(100);
               
                printf("data send over");
                //while(USART_GetFlagStatus(USART2,USART_FLAG_TC)== RESET);
                //RS485_TX_EN=0;                                //接收模式
               
}


接收端代码
//数据包分析
//void analy_data()
//{                       
//                        if(Rec_flag==1)
//                        {                       
//                                               
//                                                if(Rx_buff[0]==0x00)
//                                                {                                                                                                        
//                                                                        moto_f=5;                       
//                                                }
//                                                if(Rx_buff[0]==0x01)
//                                                {
//                                                                        //led3=~led3;                                                                                       
//                                                               
//                                                                        moto_f=1;

//                                                }
//                                                if(Rx_buff[0]==0x02)
//                                                {
//                                                                               
//                                                                        moto_f=2;
//                                                                                                         
//                                                }
//                                                if(Rx_buff[0]==0x03)
//                                                {
//                                                                        moto_f=3;                                               
//                                                }
//                                                if(Rx_buff[0]==0x04)
//                                                {                                                                                                                                               
//                                                                        moto_f=4;                                               
//                                                }
//                                                if(Rx_buff[0]==0x05)
//                                                {                                                               
//                                                                        servo_f=1;
//                                                                                                                                       
//                                                }
//                                                if(Rx_buff[0]==0x06)
//                                                {                                                                                       
//                                                                        servo_f=2;                                                               
//                                                }
//                                                clear_Buff();
//                                       
//                        }
//                       
//                       
//}

//void USART2_IRQHandler(void)                        //串口1中断服务程序
//{
//                                u8 r;
//                        RS485_TX_EN=0;                                //默认为接收模式       
//                        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)            
//                        {
//                                                                        //默认为接收模式       
//                                        r =USART_ReceiveData(USART2);
//                               
//                                               
//                                                        Rx_buff[0]=r;

//                                                        Rec_flag=1;
////                                                        Rx_Cnt=0;
////                                        }       
                               
                                       
                        }
               
                       
                        USART_ClearITPendingBit(USART2,USART_FLAG_TC); //清除中断标志
                        analy_data();
}

回复

使用道具 举报

14

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2020-9-2
在线时间
41 小时
 楼主| 发表于 2020-12-24 15:08:20 | 显示全部楼层
ColeSofCJ 发表于 2020-12-24 10:50
Max3485芯片的pdf文档多读几遍,里面有关于485通讯的几个注意事项: 1)A-B线需要加上拉、下拉、终端电阻后 ...

我AB端的上下拉电阻接的是4.7K,AB间的匹配电阻是120欧的,现在我用485转串口的模块测量发送端的数据是正常的,但是我两个单片机接上后它就不发,接收端也收不到数据。它们两个单片机共地。
回复

使用道具 举报

5

主题

269

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1053
金钱
1053
注册时间
2020-5-11
在线时间
253 小时
发表于 2020-12-24 17:47:28 | 显示全部楼层
30m已经很远了呢
回复

使用道具 举报

14

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2020-9-2
在线时间
41 小时
 楼主| 发表于 2020-12-25 11:59:26 | 显示全部楼层
ColeSofCJ 发表于 2020-12-24 15:28
假设你除了最远端的两个模块,其它中间的模块都没有上拉下拉电阻和终端电阻,那么AB端的空闲电平是由上 ...

非常感谢,问题已经解决了!谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-24 12:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表