打印
[STM32F1]

USART ADC 时间问题

[复制链接]
1489|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hustlairong|  楼主 | 2015-11-2 18:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大神看下我下面的计算有没有问题哈:
ADC的始终选择为14M,采样周期选择为71.5个周期,那么总的转换时间就是(71.5+12.5)/14=6us;
USART的波特率选择为19200,那么传输两个字节的时间就是2*8/19200=4.5ms;
不考虑其他的时间,那么我要将ADC数据通过串口发送不是来不及么?
但是实际上从来没有遇到问题,所以肯定是我哪里理解错了,求指教啊。
沙发
hustlairong|  楼主 | 2015-11-2 18:27 | 只看该作者
突然想起来了,还有采样频率的问题。。。。。。。。真是自己捉急了。。。。。

使用特权

评论回复
板凳
mintspring| | 2015-11-2 20:08 | 只看该作者
你是实时性非常高的应用吗?如果不是,可以定时采样

使用特权

评论回复
地板
mintspring| | 2015-11-2 20:09 | 只看该作者
如果被采样对象变化是很慢的,可以平均值采样,就是连续采集20个,取平均值。

使用特权

评论回复
5
hustlairong|  楼主 | 2015-11-3 09:59 | 只看该作者
本帖最后由 hustlairong 于 2015-11-3 11:34 编辑
mintspring 发表于 2015-11-2 20:08
你是实时性非常高的应用吗?如果不是,可以定时采样


使用特权

评论回复
6
hustlairong|  楼主 | 2015-11-3 11:42 | 只看该作者
mintspring 发表于 2015-11-2 20:09
如果被采样对象变化是很慢的,可以平均值采样,就是连续采集20个,取平均值。 ...

您好,咨询您一个问题:
ADC时钟是12MHz,采用的是循环模式,使用了16个通道,总的转换时间是(239.5+12.5)/14=18us,16个通道就是288us。
然后通过DMA传送并处理后形成16个Byte,由USART发送,波特率是9600,那么传送16个Byte的时间是16X8/9600=13ms。
那么问题来了,发送的时间远远大于采样的时间,那么会不会出现一次的数据还没有发送完成就又到了一组新的数据,然后覆盖掉呢?

注:以前直接上手开始做,没仔细想,事实上好像结果也是对的,但是现在感觉好像有点问题,求指教?

使用特权

评论回复
7
mintspring| | 2015-11-4 08:44 | 只看该作者
会的,就是这样,因此要看你被测量的变化情况了,你可以画个图啊,看看抽样周期在13ms时候是不是满足要求,如果不满足,你可以这样,建立个缓存数组,然后把测到的数据存在这里面,然后发送出去。不过这就损失了实时性。

使用特权

评论回复
8
mintspring| | 2015-11-4 08:45 | 只看该作者

实时性高的就要看这个发送周期能否满足了,不行你就要用115200的波特率才可以。

使用特权

评论回复
9
hustlairong|  楼主 | 2015-11-5 11:49 | 只看该作者
mintspring 发表于 2015-11-4 08:44
会的,就是这样,因此要看你被测量的变化情况了,你可以画个图啊,看看抽样周期在13ms时候是不是满足要求, ...

对的,是在不行就提高波特率了,但是其实业搞不了多少的,纠结

使用特权

评论回复
10
mintspring| | 2015-11-11 17:04 | 只看该作者
波特率太坑了,串口波特率本来就不高,唯一的好方法是采用USB接口。

使用特权

评论回复
11
crystal1987| | 2015-11-12 15:43 | 只看该作者
其实,两个字节的话,不是2*8/19200,因为你还要考虑停止位什么的,而且2*8/19200 = 0.83ms,不知4.5ms是怎么算的。看楼主的意思,你打算ADC采集一次数据就发送出来,你要这么高的采集频率的数据,单片机还能干其他工作不?如果非要提高通信速率,建议使用DMA采集数据,然后用USB发送。

使用特权

评论回复
12
Thor9| | 2015-11-12 19:20 | 只看该作者
能不能先建立个缓存,把测到的数据先存在这里

使用特权

评论回复
13
309030106| | 2015-11-12 20:43 | 只看该作者
发送周期能否满足要求呢

使用特权

评论回复
14
maxingyu| | 2015-11-13 11:06 | 只看该作者
hustlairong 发表于 2015-11-3 11:42
您好,咨询您一个问题:
ADC时钟是12MHz,采用的是循环模式,使用了16个通道,总的转换时间是(239.5+12. ...

我想问一下你这个ADC采样的数据都不要先存一下就直接URAT发送吗?不是要先存到一个buffer里,然后在发数据吗?

使用特权

评论回复
15
hustlairong|  楼主 | 2015-11-13 15:07 | 只看该作者
crystal1987 发表于 2015-11-12 15:43
其实,两个字节的话,不是2*8/19200,因为你还要考虑停止位什么的,而且2*8/19200 = 0.83ms,不知4.5ms是怎 ...

之所以用8算是因为方便罢了,把停止位,校验位算上只会更久。采集频率不高的,而且用的是DMA传输,不会怎么影响CPU的。

使用特权

评论回复
16
hustlairong|  楼主 | 2015-11-13 15:12 | 只看该作者
maxingyu 发表于 2015-11-13 11:06
我想问一下你这个ADC采样的数据都不要先存一下就直接URAT发送吗?不是要先存到一个buffer里,然后在发数 ...

其实我是有用buffer啦,但是你要是采样频率低的话直接DMA传也OK啊。

使用特权

评论回复
17
crystal1987| | 2015-11-14 10:08 | 只看该作者
hustlairong 发表于 2015-11-13 15:07
之所以用8算是因为方便罢了,把停止位,校验位算上只会更久。采集频率不高的,而且用的是DMA传输,不会怎 ...

对,你在做测试的时候,只能按照最长的时间算,不能按照最短的时间算啊、

使用特权

评论回复
18
maxingyu| | 2015-11-16 09:21 | 只看该作者
crystal1987 发表于 2015-11-14 10:08
对,你在做测试的时候,只能按照最长的时间算,不能按照最短的时间算啊、 ...

恩,你说的对。我认为buf是必须有的,因为传输速率跟不上采样速率的。但是因为CPU不可能全拿来做AD所以其实AD的速度应该也没那么快,我也是对这个问题很困惑~

使用特权

评论回复
19
hustlairong|  楼主 | 2015-11-16 10:11 | 只看该作者
maxingyu 发表于 2015-11-16 09:21
恩,你说的对。我认为buf是必须有的,因为传输速率跟不上采样速率的。但是因为CPU不可能全拿来做AD所以其 ...

我觉得ADC是基本不会占用CPU 的资源的。

使用特权

评论回复
20
maxingyu| | 2015-11-16 10:53 | 只看该作者
hustlairong 发表于 2015-11-16 10:11
我觉得ADC是基本不会占用CPU 的资源的。

为什么啊 如果不用DMA,那ADC每采集一次存储不都是要CPU控制吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

137

帖子

3

粉丝