上下位机同步控制周期的一种思路

问题

下位(arm 单片机)在控制电机时要求有比较精准的周期而上位机(linux kernel)线程受操作系统负载和调度方式的影响无法精准控制,两者之间要如何同步?

解决思路

利用下位可以反馈精确的控制时间这一点来缓解上位机时间不准的问题。

具体方法

1.在下位机上设置指令缓存,一次从上位机接收一定数量的指令,假设为N,减少上位机时间不准时带来影响;
2.制定通信协议,下位机按固定周期(30ms)往上位机发送状态数据,数据包里包含下位机的时间信息或是这是第几个包,上位机收到这两种信息之后(任意一种),都能确定下位机的准确的时间;
3.上位机拿到逻辑层的控制指令时(与接收下位机数据的线程不是一个线程),不立刻下发到下位机,而是记录到一个command house里;
4.上位机的接收线程,在收到下位机的message之后,进行处理,由于tcp存在粘包问题,这时候收到的可以不只一个包(下位机过了好几个发送周期),上位机要根据2中协议里的数据来确定下位机的准确时间;
5.将发送动作放到上位机的接收线程中,如里是第一次收到下位机的数据,则从3里的command house里拿N个指令数据发送到下位机,如是不是第一次收到下位机的数据,则收到几帧下位机的数据就从command house中拿几帧指令发送到下位机,使下位机的指令缓存中始终保持为N;

总结:

上位机的时间难以精准控制,在与具有精准控制周期的下位机进行同步时带来了挑战,利用下位机精准的反馈时间,现加上同步缓存,可以在很大程度上解决这个问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值