mermana 2020-05-09 11:01 采纳率: 100%
浏览 407
已采纳

高分悬赏:单片机如何接受来自一个设备的触发信号然后控制另一个设备的状态

小弟我刚刚开始学习用arduino解决一点实验中的设备通讯问题,诚恳向大家求助。

1 问题背景
用单片机监控来自一台设备(dev1)的TTL触发信号,如果检测到信号就立刻控制另一台设备(dev2)的开启。dev2实际是一台激光器,所以发出是一组参数,控制激光的频率和占空比以及开启时长。

小弟设计了一个很简单的方案,从dev1的DB9口中引出三根线连到单片机上的rx,tx和GND上,单片机上引出两根线(GND 和一个pin脚)连到dev2的BNC接口引出的两根线上。用while(Serial.available()>0)来监控串口信息,一旦有信息来就控制pin的电平输出。

2 问题描述
现在单片机可以实现接受信号再发出触发信号,但有几个问题
1)因为dev1无论设置为发出的是高电平还是低电平,单片机串口显示的都是0。因为dev1的手册没有提供通讯协议内容,我用的波特兰9600监测的。
2)dev1可以设置发出TTL的时间长短,但只能在设置为1s(只能为整数秒)时单片机能收到信号,高于1s就侦测不到信号。
3)从dev1发出信号,到dev2的激光触发,肉眼可见显著的延迟,大概在1.5~2秒之间。因为小弟做的实验对同步要求非常,要到毫秒级别,所以这个问题是最严重的。

3 求助内容
因为小弟没有计算机或者工科背景,对单片机和数字电路知识薄弱,任何有助于我理解该问题现象或者解决该问题的方案或者建议,小弟感激不尽并殷勤献上积分币。谢谢~

  • 写回答

3条回答 默认 最新

  • 还是羊脂球 2020-05-10 00:50
    关注

    分别回答你的几个问题:
    1、检验串口是否真的有信息输出,可以下载一些串口调试工具,如secureCRT和putty,在这些软件上设置不同的波特率,看是否有信息输出,
    如果把所有的波特率都试过了,还没有信息输出,则应该就是串口没有输出信息。
    2、不知道你单片机这边是如何检查TTL信号的,如果是自己用if之类的代码写的,即以轮询的方式检查某个gpio的TTL信号,会受到代码执行时间的限制,
    比如说每隔0.5s才轮询一次,则你的TTL信号时间必须大于0.5s单片机才能检测到,建议更换为外部中断触发的方式。如果已经是中断触发了,还不能达到你的要求,
    看看你的单片机的晶振频率是多少的,更换更高频率的。
    3、第三个问题应该就是你的第二个问题导致了吧

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题