对RS485的研究!
首先 筛选了网站里的几个原理图后:选中如下这种制作http://cache.amobbs.com/bbs_upload782111/files_24/ourdev_520620.jpg
(原文件名:方案1.jpg)
仅采用右边部分,用的是avr M16, 直接接485的 2、3脚到I/O口。
如图:
http://cache.amobbs.com/bbs_upload782111/files_24/ourdev_520621.jpg
(原文件名:20091230(008).jpg)
实验结果:
与变频器通讯发送 ok 但接收不到反馈(用中断 或查询标志位方式都试过----在线仿真亦无接收完中断发生)
------------------------------------------
其后在淘宝买了一个 RS232转485 接口来研究:
http://cache.amobbs.com/bbs_upload782111/files_24/ourdev_520627.jpg
(原文件名:T2RNXeXfi92tNXXXXX_!!103867069.jpg)
发送和接收都 ok, 不枉费花了20元钱!!
对其拆解如下
http://cache.amobbs.com/bbs_upload782111/files_24/ourdev_520628.jpg
(原文件名:20091230(003).jpg)
http://cache.amobbs.com/bbs_upload782111/files_24/ourdev_520629.jpg
(原文件名:20091230(004).jpg)
485接口芯片是SP485EE
另一贴片是: H7660 SCBA F836AAF 不知是什么作用? 难道是232芯片?
-----------------------------------------------------------------
用手机拍的照片可能不太清楚, 谁若是想看的清楚点,我回家拿相机再拍一下好了!
买的的转接口 原理图不知道谁有, 可否提供一下 (直接看PCB不懂!) 另外还在论坛看到
http://cache.ourdev.cn/bbs_upload800938/files_11/ourdev_483382.jpg
已经有上拉和下拉电阻了 中间再加一个有什么作用? H7660 SCBA F836AAF就是一个电荷泵,用来通过串口取电,然后产生需要的工作电压。 研究的不错 第一个图完全没有问题。
收不到请查Q1部分。
另120欧端阻不要接。 【2楼】 Appcat 苹果猫
H7660 SCBA F836AAF就是一个电荷泵
我怎么找不到这个芯片的资料呀,请问这个是那个品牌的? ICL7660,其他品牌也多 接收还是不行!
-------------------
pc --> 买来的232转485 --->图1 的485芯片 ---> 单片机M16 . 这样是ok的,数据接收也正常!
pc --> 买来的232转485 ---> 变频器 发送和接收都正常
单片机M16--->图1 的485芯片 ---> 变频器 还是正常,变频器能够工作(启动、换频率等)
唯一不正常的就是:
变频器反馈信号--->图1 的485芯片---> 单片机M16 单片机收不到!
而且单步仿真到变频器启动后仿真就不能进行了!(应该是干扰),
换成只改频率不启动:仿真能够顺利进行但还是收不到反馈!
以上现象能判别是电路问题还是程序问题? 中间加的120欧姆电阻是匹配电阻 不能接收?看看是否已经将MAX485第2、3脚都置低? 这一点: 从pc --> 买来的232转485 --->图1 的485芯片 ---> 单片机M16
这个就可以看出来 接收pc信号是正常的!! 把完整的原理图和源代码传上来... 上:
接线 就是 楼顶图一
控制位在 PC7
http://cache.amobbs.com/bbs_upload782111/files_24/ourdev_521114.jpg
(原文件名:485串口1.jpg)
------------------------
程序:
//包含所需头文件
#include <iom16v.h>
#include <macros.h>
#include <eeprom.h>
/*------宏定义------*/
#define uchar unsigned char
#define uint unsigned int
uint omron = {0x01,0x10,0x21,0x01,0x00,0x02,0x04,0x00,0x01,0x12,0xc0,0xfb,0x02};
uint aelta = {0x01,0x06,0x20,0x01,0x00,0x1E,0xC2,0x53};// 写入001E即30Hz
uint receive_data;
void printf(uint *s);
void print(uint temp);
uint pp=0;
#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
EEPROMwrite(pp,UDR);
pp++;
if (pp>8) pp=0;
}
//端口初始化
void port_init(void)
{
PORTA = 0x00;
DDRA= 0x00;
PORTB = 0x00;
DDRB= 0x00;
PORTC = 0x80;
DDRC= 0x80;
PORTD = 0x01;
DDRD= 0x02;
}
//串口通信初始化
void usart_init(void)
{
UCSRB = 0x00;//禁止中断
UCSRA = 0x00;
UCSRC = BIT(URSEL) | 0x26; //偶校验停止位1位 8位数据位
UBRRL = 0x33;
UBRRH = 0x00; //9600 波特率
UCSRB = 0x98; //发送、接收允许
}
void init_devices(void)
{
CLI(); //禁止所有中断
MCUCR= 0x00;
//MCUCSR = 0x80;//禁止JTAG
GICR = 0x00;
TIMSK = 0x00;
port_init();
usart_init();
SEI();//开全局中断
}
void print(uint temp)
{ while(!(UCSRA&(1<<UDRE)));
UDR=temp;}
void printf(uint *s)
{uint i;
i=sizeof(omron)/2;
while(i){print(*s++); i--;}
}
//主函数
void main(void)
{uint i=0,j;
init_devices();
//在这继续添加你的代码
while(1)
{
PORTC|=0x80;
for(j=0;j<5000;j++);
printf(omron);//发
// 收
PORTC&=0x7F;
for(j=0;j<50000;j++);
for(j=0;j<50000;j++);
for(j=0;j<50000;j++);
for(j=0;j<50000;j++);
}
}
==================================================
电脑过来 都能正常接收!
就是 变频器反馈过来的 收不到!不会产生中断!
-------------------------------
待会我加几个电阻电容试试, 再不行就加光耦!
我 认为是干扰的 问题 楼主完全可以把电路图抄下来自己做! 485是单工的,如果反馈信息来的太快,就冲突了,当然没有回馈。 mark 改下,发送一次后,接收时间长点试试,比如1s 变频器设置 收到信号后2ms 即作反馈, 我等待了200ms! 关注 仔细看了 买来的那个转接器,485芯片的接线 和图一是一样的, 只不过 A、B 端 用的上拉和下拉电阻是3.3K
而且也没有 中间120欧的负载电阻! 终于通讯成功!
总结问题所在
1、 干扰! 变频器对线路板或仿真器的干扰, 变频器只要一带负载 即不能仿真
2、 设置设置信号反馈时间的问题, 变频器设的间隔时间 和单片机 开始接收并等待的时间要调配好!
--------------------
目前现状
仿真: 读写变频器参数 ok ,反馈信号接收ok(不带负载的情况)
带负载时, 检验反馈码后输出led灯, 指示通讯成功! 也正常了!!
-------------
不枉费苦战了2个夜晚。 学习 485 的 AB两线之间最后一级要加一个120欧的匹配电阻,不然会有过冲 学习 学习 不错很详细,正想学习呢 ji 顶一下,佩服lz的研究井绳,和变频器是RTU协议吧 mark~ 回LZ,你的电路中,使用了Q1这个三级管么?这是不合理的用法,当IO高阻时,收发控制为高电平,RS485处于发射状态,干扰总线,正常的是直接与IO连接,再加下拉电阻。不过这个电路虽然有缺陷,看是可以用的,仔细检测程序收发控制时间上的问题,这里出问题的可能性极大。
不知道LZ对RS485的具体要求,如果要求不高,可以考虑自动切换收发而不需要IO控制收发电平,参考电路如下。
http://cache.amobbs.com/bbs_upload782111/files_26/ourdev_533023.JPG
(原文件名:RS485.JPG) 慢了一步,恭喜LZ解决问题。 回复【29楼】windy__xp龙笑
回LZ,你的电路中,使用了Q1这个三级管么?这是不合理的用法,当IO高阻时,收发控制为高电平,RS485处于发射状态,干扰总线,正常的是直接与IO连接,再加下拉电阻。不过这个电路虽然有缺陷,看是可以用的,仔细检测程序收发控制时间上的问题,这里出问题的可能性极大。
不知道LZ对RS485的具体要求,如果要求不高,可以考虑自动切换收发而不需要IO控制收发电平,参考电路如下。
-----------------------------------------------------------------------
这个改造一下不需要外部电源就更好了。。。 把光耦去掉,不做隔离不就行了,简单改改就可以用了的,主要是参考RS485芯片的收发控制。 mark 回复【29楼】windy__xp 龙笑
回LZ,你的电路中,使用了Q1这个三级管么?这是不合理的用法,当IO高阻时,收发控制为高电平,RS485处于发射状态,干扰总线,正常的是直接与IO连接,再加下拉电阻。不过这个电路虽然有缺陷,看是可以用的,仔细检测程序收发控制时间上的问题,这里出问题的可能性极大。
不知道LZ对RS485的具体要求,如果要求不高,可以考虑自动切换收发而不需要IO控制收发电平,参考电路如下。
-----------------------------------------------------------------------
485芯片的4教是不是接错了?怎么接地了?不是TXD吗? mark 回复【34楼】AVR_DIY 苹果的另一半
回复【29楼】windy__xp 龙笑
回LZ,你的电路中,使用了Q1这个三级管么?这是不合理的用法,当IO高阻时,收发控制为高电平,RS485处于发射状态,干扰总线,正常的是直接与IO连接,再加下拉电阻。不过这个电路虽然有缺陷,看是可以用的,仔细检测程序收发控制时间上的问题,这里出问题的可能性极大。
不知道LZ对RS485的具体要求,如果要求不高,可以考虑自动切换收发而不需要IO控制收发电平,参考电路如下。
-----------------------------------------------------------------------
485芯片的4教是不是接错了?怎么接地了?不是TXD吗?
-----------------------------------------------------------------------
肯定没错,这正是自动所发控制的关键所在。 windy__xp 龙笑:请问这个电路您在项目中用的吗?
第二个问题,波特率可以做到多少?有没有上限?
谢谢!看到这个电路,有一种眼前一亮的感觉,呵呵!很感动! 是实际项目中的电路,我们要求速度不高,最高速度没有测试,如果把TXD光偶加速部分改一下,到38400没问题吧。 29楼的电路有点取巧了,建议接收发送切换通过IO。29楼电路其他没问题。 mark mark 有人研究过RS485AB线接错如何识别(总线上有很多设别,其中一台接错了,如何知道通讯不上是AB线接错了)? mark 备用! mark 不错不错啊,最近正要用到485通信。 标记一下 关注 记号一个,龙笑的图不错。 记号一个,龙笑的图不错。 mark mark ,LZ 上点变频资料。 mark mark 记下 mark mark mark 标记! 标记 mark mark biaoji mark! 龙笑的图不错,是不是去掉光耦抗干扰差点 mark! 大哥 有HXSP-485A的原理图吗?能不能给小弟传一份!picfxx@163.com mark! 回复【42楼】adszmc
有人研究过rs485ab线接错如何识别(总线上有很多设别,其中一台接错了,如何知道通讯不上是ab线接错了)?
-----------------------------------------------------------------------
这个也很简单。但是需要钱。
1.需要一个通信继电器 很贵 。
每次通信的时候发送独立的数字判断。 如果反向就控制继电器改变。 A B接线 http://cache.amobbs.com/bbs_upload782111/files_39/ourdev_640213NQ3UPG.JPG
(原文件名:00.JPG)
这个实验过,要求不高的场合可以用用,波特率250kbps没有问题。 mark 回复【楼主位】xinchangkk 拥有
-----------------------------------------------------------------------
楼主,可以给我发一个pc --> 买来的232转485 --->图1 的485芯片 ---> 单片机M16的通信程序吗?我也正调试这个呢,谢谢 M20110501 mark 严重mark mark MARK 回复【楼主位】xinchangkk 拥有
-----------------------------------------------------------------------
板子焊得比较乱,直接用232不就行啦 回复【69楼】sunnyhook
(原文件名:00.jpg)
引用图片
这个实验过,要求不高的场合可以用用,波特率250kbps没有问题。
-----------------------------------------------------------------------
发送的时候485的发送端一直和地连接的 工作? 豁然开朗 厉害,学习了 485mark mark http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_666468MS6SOE.jpg
(原文件名:RS485-BF091M.jpg)
依据相应的标准设计合理的保护电路、选用品质优良的适用元件,是保证通信设备安全的牢固基石。 mark485 留个脚印 mark 感謝分享 但如何收藏 看到大家的图 学习到了很多 485通讯不经过光耦,5V电平转为3.3V,我是通过一个NPN三极管实现的,但是115200波特率的时候有点问题,38400时通讯正常,电平转换这块大家怎么实现呢 windy__xp 发表于 2010-2-8 09:53 static/image/common/back.gif
回LZ,你的电路中,使用了Q1这个三级管么?这是不合理的用法,当IO高阻时,收发控制为高电平,RS485处于发 ...
请教,对于TXDO而言,如果我要发送“0”出去,那么TXDO的状态如何?TXDO为高电平,是发送状态,能把“1”发送出去!TXDO为低电平,485片子是接收状态,由于外围有上下拉,其实还是发送出“1”啊! mark!!!!! {:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:} make mark一下~~~ 学习一下.... RS485的讨论研究
页:
[1]