wenking99 发表于 2013-9-25 16:45:50

如何做到两个设备在RS485总线上,无同步信号,LED闪烁同步?

如果设备1和设备2收到广播信号开始后,

在定时器控制下,
LED灯同时亮1秒,再同时灭1秒。

过7,8分钟后,发现两台设备灯亮灭时间
完全失步,比如原来是同步亮灭的,后来出现,设备1号的灯跟设备2号的灯,变成一亮一灭了。

要怎么做到同步?

个人认为是由于单片机时钟晶振误差累积造成的。

第1种方式,可以把1号机做成主机,2号机做成从机。
主机发送同步信号给从机,这样2号机会跟1号机完全同步。

第2种方式,可以由主机定时发送广播同步信号给设备1和设备2.

但现在问题是,这两种方式都不能用。
设备1号和设备2号,只能接收总线上的数据。而且没有同步信号。
那要如何做到同步?请教

fwluck 发表于 2013-9-25 16:55:04

485 同时也可收别的设备数据,只是不要而以,要了不就解决了吗?
小CASE。

wenking99 发表于 2013-9-25 17:03:35

可能我表述不太清楚吧。
两个设备都是挂在RS485总线上的。
而且两个设备都处于从机接收数据状态。
主机(上位机)发送第一个同步广播信号后,两个从机开始同步闪烁。

然后过7,8分钟后,两个指示灯闪烁不同步。

klesky 发表于 2013-9-25 17:13:00

主机只发了个起跑命令,然后让两个运动员自己开跑,还要跑得一致,在没有外部干预的情况下,那只能是这两个运动员从里到外都一样了。

windboy 发表于 2013-9-25 17:17:54

你时钟一致就可以了噻

现在的时钟精度来看,你的以0.5秒应该都可以接受

以目前的MCU来看,不用加外部RTC,都应该可以满足你的要求。

gzhuli 发表于 2013-9-25 17:18:40

软件实现的问题吧,就算50ppm的晶体也不至于几分钟就差了1秒。

klesky 发表于 2013-9-25 17:20:53

两个从机的处理程序可能不一样,把亮灯的优先级设置为最高吧。

zxq6 发表于 2013-9-25 17:21:32

220v同步

wenking99 发表于 2013-9-25 17:25:06

两个从机的处理程序,肯定是一样的。定时器已经是最高优先级了。

我听说可以引入交流来进行同步,应该也是楼上这位楼主说的方案。
但不知道怎么做。

wenking99 发表于 2013-9-25 21:31:14

继续关注中,求大神指点。。。谢谢

alias 发表于 2013-9-25 21:49:36

在低压整流後而平滑电容之前,加串接一个二极管,便可提取100Hz讯号,再除100,便是一秒。

sf49ers 发表于 2013-9-25 22:40:13

同意咕神意见,软件架构问题。
既然开始能实现同步闪烁,再次的振荡器也能保证数小时内一致。
高度怀疑有运行时间很长的子函数,使得主循环来不及响应半秒定时

STM32_Study 发表于 2013-9-25 22:54:59

软件架构有问题

不应该那么差的。RC震荡都不应该这样

wenking99 发表于 2013-9-26 08:59:55

这么是说我程序有问题?

再次的振荡器也能保证数小时内一致。
高度怀疑有运行时间很长的子函数,使得主循环来不及响应半秒定时?

那我做一下实验,在定时器中,只单独做一个LED灯闪烁。

kebaojun305 发表于 2013-9-26 09:04:30

本帖最后由 kebaojun305 于 2013-9-26 09:07 编辑

我也觉的是程序问题。才7、8分钟 之不可能有这么高的误差的。

wenking99 发表于 2013-9-26 11:21:55

如果运行两个小时内可以基本同步,但后面失步了,如果要同步该怎么做了?
如果要保证两者同步,是不是只有引入交流信号同步?

zhouzmt 发表于 2013-9-27 10:35:25

1。两个从机还有其它事情做吗?有其它中断吗?
2。LED的亮灭是定时器控制的,还是简单循环控制的?

wenking99 发表于 2013-9-27 15:03:07

1.还有其它的事情要做的,这里只用了两个中断,一个是定时器,一个是串口
2.LED灯的亮灭是定时器控制的。定时器里要做其它的事情,当然也是定时之类的东西。

windboy 发表于 2013-9-27 15:35:47

wenking99 发表于 2013-9-27 15:03 static/image/common/back.gif
1.还有其它的事情要做的,这里只用了两个中断,一个是定时器,一个是串口
2.LED灯的亮灭是定时器控制的。定 ...

从你这个处理流程来看,你的程序有问题
怎么能在定时器中断里处理太多的事情呢
中断里要尽量少地工作,运算的一些事情放到main中去。

vipcff 发表于 2013-9-27 15:43:36

这么多大神说程序有问题了肯定是程序的问题了

zxq6 发表于 2013-9-27 16:45:31

你可以通过光耦,将220V转为5V电压进入单片机,然后将该信号作为定时器的时钟,这样肯定就不会不同步了。

wenking99 发表于 2013-9-27 20:55:14

你是说用外部中断,来检测这个50HZ信号过零检测?然后用来作为定时器的计数脉冲?

lidar 发表于 2013-9-28 21:48:34

设备1和设备2收到广播信号这样只能保证两个设备的开始时刻是一致的,两个设备由于使用的各自的晶振,即使是一样大小的晶振,他们的时钟也是不同步的,这样就无法保证两个系统是同步,使用定时器也是不能解决问题的,这样硬件上的问题,软件是无法解决的。
同步一般包含两部分的内容:1.起始时刻一致,一般使用触发信号来保证2.时钟的一致,一般要使用同一个时钟信号

cc6868 发表于 2013-9-28 21:51:57

这个问题......

SNOOKER 发表于 2013-9-28 22:04:59

再NB的晶体跑久了也会误差,还是主机定时同步比较靠谱

adongliu 发表于 2013-9-29 07:17:23

每秒或每分钟广播一次作为心跳报文。

fiddly 发表于 2013-9-29 09:01:13

1,串口接收中断的优先级放高,保证最小命令相应时间差,不过,目前看这个不是主要问题。
2,看起来不是很繁杂的系统,重复广播吧,每秒一次,10秒一次,自己看了。

wenking99 发表于 2013-9-29 14:22:05

在只能用做从机,要做到任何时候同步,在没有同步信号下,只有引入交流同步信号才可以了。

wangyy@dianzi 发表于 2013-9-29 14:35:52

主机定时给一个心跳信号,让从机同步

wenking99 发表于 2013-9-29 16:02:31

现在问题是,主机不会给你一个同步信号。
主机就是上位机软件,有可能过几个小时,主机没有人去管它。

主机会不停的发送相同的一串数据,也就是说没有同步信号给你情况下,如何做到同步?

adongliu 发表于 2013-9-29 21:24:39

主机不停的发送相同的一串数据?如果间隔是一定的,可以作为同步帧的!

wenking99 发表于 2013-9-29 21:45:53

用的是DMX512通讯,控台过一段时间就没有人去管它了。
DMX512大概是20MS发送一次相同的数据,如果没有去动控台的话。

楼上说,如果间隔是一定的,可以作为同步帧的!这个怎么弄?

lixingling 发表于 2013-12-18 09:59:27

用一个同步信号,都是来自主机
页: [1]
查看完整版本: 如何做到两个设备在RS485总线上,无同步信号,LED闪烁同步?