向北 发表于 2019-8-26 17:13:21

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

本帖最后由 向北 于 2019-8-27 09:53 编辑

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

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

lcw_swust 发表于 2019-8-26 17:27:09

if(i == 50) 为什么要这样
单片机处理串口数据还是挺快的,一般1ms内能作出响应。
但是传输一字节是需要时间的,例如9600的波特率发送1字节大约要1ms。

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

向北 发表于 2019-8-26 17:35:14

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

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

UVPOWER 发表于 2019-8-26 17:45:48

简单的用和校验,还有用CRC查表。你想再简单,就数据帧头和尾用0x55 或者0xAA。

RAMILE 发表于 2019-8-26 18:00:51

本帖最后由 RAMILE 于 2019-8-26 18:05 编辑

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

有人比我简单吗

Excellence 发表于 2019-8-26 18:05:15

分一个字节?怎么也得加校验。

teddeng 发表于 2019-8-26 18:47:17

响应慢?要多快你给个具体数值。

向北 发表于 2019-8-26 18:53:43

teddeng 发表于 2019-8-26 18:47
响应慢?要多快你给个具体数值。

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

鲜衣怒马 发表于 2019-8-26 19:21:28

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

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

ttoto 发表于 2019-8-26 19:32:08

这个随便做,你系统裏面pc是才最大的延迟。

lcw_swust 发表于 2019-8-26 20:49:13

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

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

向北 发表于 2019-8-26 21:14:56

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

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

向北 发表于 2019-8-26 21:27:36

ttoto 发表于 2019-8-26 19:32
这个随便做,你系统裏面pc是才最大的延迟。

真的吗?那么太谢谢你了{:lol:}

ttoto 发表于 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延时都是很正常的。

huangqi412 发表于 2019-8-26 23:14:26

鲜衣怒马 发表于 2019-8-26 19:21
1ms应该没问题,串口波特率115200,传输一个字节大概0.1ms,判断命令几十个指令周期可以完成 ...

电脑CPU不听你使唤的

活到老学到老 发表于 2019-8-26 23:52:32

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

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

cht-rtos 发表于 2019-8-27 06:32:06

先定指标再设计,比如从发指令到动作允许多大延迟,之后通信延迟加开关动作延时算一算,最后考虑通信协议如何实现才能达到要求

joesonzzy 发表于 2019-8-27 07:05:52

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

有人比我简 ...

这种做法误码率太高

xintao 发表于 2019-8-27 07:30:07

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

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

xintao 发表于 2019-8-27 07:33:16

另外你用的什么开关?你切换通道,从开始到状态稳定也需要一定时间的,否则你测回来的数据准吗?

zhanji007 发表于 2019-8-27 07:42:31

硬串不是有中断吗?这应该是最快的方式吧。

momo_li 发表于 2019-8-27 08:12:42

PC软件单独一个线程扔,写成不带延时的死循环,这样始终占满一个核,笨办法,可能会解决上位机系统调度导致时间不确定的问题

向北 发表于 2019-8-27 09:46:25

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

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

lcw_swust 发表于 2019-8-27 10:04:48

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

哦,可能要另想办法。

lcw_swust 发表于 2019-8-27 10:08:58

活到老学到老 发表于 2019-8-26 23:52
1个字节数据应该可以控制128个开关吧

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

zhanan 发表于 2019-8-27 10:32:13

通信控制或多或少总有延迟,对延迟不能容忍就得分成控制和通信两个任务。

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

way2888 发表于 2019-8-30 07:54:22

用pc又想实时那是不可能的
页: [1]
查看完整版本: 请问如何能最大限度的提高单片机串口指令的响应速度?...