打印

PSoC3中多路信号的同步测量及实现。

[复制链接]
6136|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
PSoC小子|  楼主 | 2012-3-27 07:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PSoC5中,芯片拥有两个SARADC,用户可以方便的实现同步采样/测量。但是在PSoC3中,只有一个DelSigADC, 要实现多路信号的同步/测量需要使用一些特殊的办法。下面是一个简单的PSoC3中实现两路同步测量的案例,是出自个人之手,仅供参考。



设计需要使用的模块有:

两个Analog输入管脚
被测量信号输入。

2个采样/保持模块(Sample_Hold) – 模块在clock上升沿时采样模拟信号,在clock信号维持高电平时保持所采信号。

1PWM8模块
提供S/H模块的clock信号。

DelSigADC – A/D 转换

两路AMUX – 切换输入信号

ADC eoc 中断
触发AMUX切换通道。

设计框图如下:



在每次PWM产生上升沿时,两路信号被S/H采样并保持。在PWM保持高电平的阶段,需要完成对两路保持信号的测量,这就需要建立一个特殊的时序来规定PWM输出和ADCSOC信号之间的关系(如图中时序)。时序产生最简单的办法是创建一个PLDBased Verilog Components(具体可以看教程http://www.cypress.com/?rID=40330)。模块有两个输入一个输出,clock提供模块工作时钟,pwm_trigger连接PWM输出端来检测上升沿。检测到以后output输出两个有一定宽度的脉冲来触发ADC转换并切换测量通道。两路信号的切换由ADCEOC中断来控制,每次转换完成,产生中断来切换通道。设计除了AD转换和中断函数,几乎不需要其他代码,有兴趣的可以自己写一下。
沙发
PSoC小子|  楼主 | 2012-3-27 07:37 | 只看该作者
附上 Verilog 模块的源码。因为本人多 Verilog 也不熟,代码写的可能不好。 高手勿见笑。
时序中PWM的宽度可以设置PWM模块参数来改变。 SOC Trigger的脉宽可以通过设置源码中相应的数值来更改。 计算脉宽时要根据ADC的采样频率来确定转换时间,并留有余量来保证信号的切换。

Time_Sequence.rar

675 Bytes

使用特权

评论回复
板凳
Go_PSoC| | 2012-3-27 12:06 | 只看该作者
帮顶!

使用特权

评论回复
地板
qidianhong| | 2012-4-2 16:48 | 只看该作者
如果用上DMA,还可以简单一些,直接AMUX 到ADC,然后用DMA传输ADC结果到RAM,再用另一个DMA切换AMUX。这样,不需要CPU来切换MUX了。

使用特权

评论回复
5
PSoC小子|  楼主 | 2012-4-2 21:54 | 只看该作者
"直接AMUX到ADC",  我这一句不是很明白,请教楼上!

使用特权

评论回复
6
chengshao0725| | 2013-4-13 11:01 | 只看该作者
4楼的方法应该更精简一点,而且采样率可以比较高,不过对于dma控制amux还是有点模糊,希望能上传一个范例代码

使用特权

评论回复
7
chengshao0725| | 2013-4-13 11:08 | 只看该作者
qidianhong 发表于 2012-4-2 16:48
如果用上DMA,还可以简单一些,直接AMUX 到ADC,然后用DMA传输ADC结果到RAM,再用另一个DMA切换AMUX。这样 ...

希望可以上传一个应用的范例,谢谢

使用特权

评论回复
8
yangguangaisha| | 2013-4-29 00:02 | 只看该作者
lz的资料都很给力

使用特权

评论回复
9
gexingyouxian| | 2013-4-29 00:07 | 只看该作者
好资料 支持

使用特权

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

本版积分规则

13

主题

513

帖子

6

粉丝