搜索
bottom↓
回复: 26

请问如何能最大限度的提高单片机串口指令的响应速度?...

[复制链接]

出0入0汤圆

发表于 2019-8-26 17:13:21 | 显示全部楼层 |阅读模式
本帖最后由 向北 于 2019-8-27 09:53 编辑

我要做一个控制器用来控制开关,开关对时间的要求比较高,由于本人比较菜,所以只能考虑用单片机来实现,STC的或者STM32的,就是通过串口由电脑发送指令给单片机,单片机收到指令后执行对应io口的高低电平翻转,最好是能返回指令,指令暂定为01on,01off,02on,02off。。。这样,请求大佬们给点建议,要是能给个例程什么的就更感激不尽了。我根据正点原子例程改的51的程序,但是我不知道他的速度我觉得好像有点慢。。。

谢谢各位老师的建议与指导,听了大家的意见后,好像pc端比我这里慢的多,那么我就不担心了,再次谢谢大家

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2019-8-26 17:27:09 | 显示全部楼层
if(i == 50) 为什么要这样
单片机处理串口数据还是挺快的,一般1ms内能作出响应。
但是传输一字节是需要时间的,例如9600的波特率发送1字节大约要1ms。

不要说“觉得好像有点慢”,要用示波器测下波形以数据说话。
想要加快速度就别把数据帧弄那么复杂,别用字符串,可以用固定长度的帧,状态机处理就行。
如:帧头+数据+校验,AA 02 AC,其中一个字节的数据就能控制8路开关。

出0入0汤圆

 楼主| 发表于 2019-8-26 17:35:14 | 显示全部楼层
lcw_swust 发表于 2019-8-26 17:27
if(i == 50) 为什么要这样
单片机处理串口数据还是挺快的,一般1ms内能作出响应。
但是传输一字节是需要时 ...

对不起老师,这是不要求速度的这么写的,如果要求速度我可以把if(i==50)去掉的,您的意思我听懂了,在串口中断中帧头可以用if去判断,然后用case选择中间的那个码,但是校验怎么写呀?从来没有用过,看过别人的查表法,那不会变慢吗?可以不用校验吗? 我上面理解的对吗

出0入0汤圆

发表于 2019-8-26 17:45:48 | 显示全部楼层
简单的用和校验,还有用CRC查表。你想再简单,就数据帧头和尾用0x55 或者0xAA。

出0入0汤圆

发表于 2019-8-26 18:00:51 | 显示全部楼层
本帖最后由 RAMILE 于 2019-8-26 18:05 编辑

把一个字节的高3位用作操作码。低5位作为命令值,一个字节构成一帧命令,想花哨就加上pair校验

有人比我简单吗

出0入0汤圆

发表于 2019-8-26 18:05:15 | 显示全部楼层
分一个字节?怎么也得加校验。

出0入0汤圆

发表于 2019-8-26 18:47:17 来自手机 | 显示全部楼层
响应慢?要多快你给个具体数值。

出0入0汤圆

 楼主| 发表于 2019-8-26 18:53:43 | 显示全部楼层
teddeng 发表于 2019-8-26 18:47
响应慢?要多快你给个具体数值。

这个RF开关响应时间是200ns,我整套的系统从电脑到RF开关1ms以内这个要求过分吗?单片机只做这件事,没有别的开销,指令响应越快越好 波特率可以高一些

出50入58汤圆

发表于 2019-8-26 19:21:28 | 显示全部楼层
向北 发表于 2019-8-26 18:53
这个RF开关响应时间是200ns,我整套的系统从电脑到RF开关1ms以内这个要求过分吗?单片机只做这件事,没有 ...

1ms应该没问题,串口波特率115200,传输一个字节大概0.1ms,判断命令几十个指令周期可以完成

出0入0汤圆

发表于 2019-8-26 19:32:08 | 显示全部楼层
这个随便做,你系统裏面pc是才最大的延迟。

出0入0汤圆

发表于 2019-8-26 20:49:13 | 显示全部楼层
向北 发表于 2019-8-26 17:35
对不起老师,这是不要求速度的这么写的,如果要求速度我可以把if(i==50)去掉的,您的意思我听懂了,在 ...

简单的校验就是把前面的字节累加起来。
“从电脑到RF开关1ms以内”估计有困难,CPU分给EXE的时间片有较大间隔。
控制开关本来也没必要这么快,上位机界面点击按钮到单片机动作,人是基本感觉不到的。
莫非你是想不断的开关开关来做PWM?那就直接用硬件PWM就行了。
主要还是看具体的用途。

出0入0汤圆

 楼主| 发表于 2019-8-26 21:14:56 | 显示全部楼层
lcw_swust 发表于 2019-8-26 20:49
简单的校验就是把前面的字节累加起来。
“从电脑到RF开关1ms以内”估计有困难,CPU分给EXE的时间片有较大 ...

我们要做一个测试系统,里面有十几个天线,电脑要快速生成一个表格,表格里面是多个通道中对应的db值最大的那一个,所以留给每个通道的时间并不是很多,就要我保证我这里能达到最快的响应,这个是集成到exe里面的,没有人为的按钮。。所以我才来问这个速度的问题的

出0入0汤圆

 楼主| 发表于 2019-8-26 21:27:36 | 显示全部楼层
ttoto 发表于 2019-8-26 19:32
这个随便做,你系统裏面pc是才最大的延迟。

真的吗?那么太谢谢你了

出0入0汤圆

发表于 2019-8-26 22:32:02 | 显示全部楼层
本帖最后由 ttoto 于 2019-8-26 22:34 编辑
向北 发表于 2019-8-26 21:27
真的吗?那么太谢谢你了


是的。你这个没用实时要求。你在这个地方提高1ms,测试50个天线快50ms。你问一下你同事测试50个天线需要多少时间?这点延迟对你的测试台架提高可以不计。PC发送数据到serial port有1~20ms延时都是很正常的。

出0入0汤圆

发表于 2019-8-26 23:14:26 来自手机 | 显示全部楼层
鲜衣怒马 发表于 2019-8-26 19:21
1ms应该没问题,串口波特率115200,传输一个字节大概0.1ms,判断命令几十个指令周期可以完成 ...

电脑CPU不听你使唤的

出0入0汤圆

发表于 2019-8-26 23:52:32 | 显示全部楼层
lcw_swust 发表于 2019-8-26 17:27
if(i == 50) 为什么要这样
单片机处理串口数据还是挺快的,一般1ms内能作出响应。
但是传输一字节是需要时 ...

1个字节数据应该可以控制128个开关吧

出0入0汤圆

发表于 2019-8-27 06:32:06 来自手机 | 显示全部楼层
先定指标再设计,比如从发指令到动作允许多大延迟,之后通信延迟加开关动作延时算一算,最后考虑通信协议如何实现才能达到要求

出0入0汤圆

发表于 2019-8-27 07:05:52 | 显示全部楼层
RAMILE 发表于 2019-8-26 18:00
把一个字节的高3位用作操作码。低5位作为命令值,一个字节构成一帧命令,想花哨就加上pair校验

有人比我简 ...

这种做法误码率太高

出0入0汤圆

发表于 2019-8-27 07:30:07 来自手机 | 显示全部楼层
向北 发表于 2019-8-26 21:14
我们要做一个测试系统,里面有十几个天线,电脑要快速生成一个表格,表格里面是多个通道中对应的db值最大 ...

这种需求的话,可不可以上位机和单片机之间提前约定好切换顺序和周期,然后从单片机应答开始算正式开始工作,单片机自动完成一轮测试,中间不需要上位机干扰。
如果同步问题不好解决,还可以由单片机不断上报当前通道状态,上位机根据单片状态判断数据对应的通道。测量过程为单向通信,上位机不用应答。
还有一个问题,天线的数据是谁负责测量的?上位机吗?你应该还有个测量系统吧,如果也是单片机,你完全可以下位机全部测好几个通道数据后一次上报完成。
所以根据你具体需求,应该有多方法避开你那个1m的问题。

出0入0汤圆

发表于 2019-8-27 07:33:16 来自手机 | 显示全部楼层
另外你用的什么开关?你切换通道,从开始到状态稳定也需要一定时间的,否则你测回来的数据准吗?

出0入0汤圆

发表于 2019-8-27 07:42:31 | 显示全部楼层
硬串不是有中断吗?这应该是最快的方式吧。

出500入109汤圆

发表于 2019-8-27 08:12:42 | 显示全部楼层
PC软件单独一个线程扔,写成不带延时的死循环,这样始终占满一个核,笨办法,可能会解决上位机系统调度导致时间不确定的问题

出0入0汤圆

 楼主| 发表于 2019-8-27 09:46:25 | 显示全部楼层
xintao 发表于 2019-8-27 07:30
这种需求的话,可不可以上位机和单片机之间提前约定好切换顺序和周期,然后从单片机应答开始算正式开始工 ...

天线是仪表测得,型号CMW500,与电脑可以通过GPIB或者网口通信。开关是射频开关,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2019-8-27 10:04:48 | 显示全部楼层
向北 发表于 2019-8-26 21:14
我们要做一个测试系统,里面有十几个天线,电脑要快速生成一个表格,表格里面是多个通道中对应的db值最大 ...

哦,可能要另想办法。

出0入0汤圆

发表于 2019-8-27 10:08:58 | 显示全部楼层
活到老学到老 发表于 2019-8-26 23:52
1个字节数据应该可以控制128个开关吧

嗯,也可以的,要看具体的需求,
一个字节控制8个开关,每个位对应一个开关,是可以8个开关同时动作的,
一个字节控制128个开关,每通信一次只能控制1个开关的动作。

出0入0汤圆

发表于 2019-8-27 10:32:13 | 显示全部楼层
通信控制或多或少总有延迟,对延迟不能容忍就得分成控制和通信两个任务。

飞船在火星降落,通信延迟很大,不能从地球上控制具体着陆过程。事先注入程序,飞船自动控制降落,着落过程中仅回传信息。

出0入0汤圆

发表于 2019-8-30 07:54:22 来自手机 | 显示全部楼层
用pc又想实时那是不可能的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 03:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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