4911|4

9795

帖子

24

TA的资源

版主

楼主
 

LPC54102驱动ad5676 DAC实现IFFT后的数据输出 [复制链接]

本帖最后由 littleshrimp 于 2015-5-8 11:03 编辑

LPC54102驱动ad5676 DAC实现IFFT后的数据输出
LPC5412的ADC是非常强悍的,除了小白的我没有弄清怎么精确设置采样率以外,其它地方用起来还是比较顺手的。
遗憾的是LPC54102偏偏没有配置DAC,这么高端的单片机没有DAC,唉。
为了实现波形输出,前几天做了一个实验,通过LPC54102 CMSIS DSP的IFFT生成波形文件,驱动ADI的AD5676, 输出到示波器。
已经调试完成,今天整理一下。
先是画AD5676的原理图:
IPEX器件比较紧缺,也为了节省PCB面积,只有DAC0,DAC1使用了IPEX座,其它6路DAC通过P93的2.0排针输出。
左边的P93是用于通信和电源供电的接口,为了能和其它调试板兼容我也使用了2.0双排针。
画好的PCB就是这个样子
有一点失误就是AD5676是没有内建电压参考的,VREF需要从外部引入,这样把VREF画在2.0的插针上用起来很方便,如果放一个IPEX座就好了。
PCB焊好后连接在LPC54102的开发板上是这个样子
因为没有LPC54102的样片,画板时没带它。这样做好的AD5676外设只能用杜邦线连接。
为了连接方便我把AD5676的数据线连接在开发板的A0~A5接口上,对应P1.0,P1.1,P1.8,P1.2,P1.4,P1.5因为都是P1口,在使用I/O做软SPI时会比较方便。
这里还有一个小插曲就是下图中J8右边的Pin2~Pin12是按顺序来的,但是在调试的时候pin8和pin10确没有数据输出。
测试的代码如下:
当时我非常担心这块开发板也和LPC1549的开发板一样,有很多接口无法使用。
查看用户手册也没有发现和其它引脚有什么不一样的地方。
后来在开发板的原理图上找到问题,这两个引脚右边的形状和其它的引脚不太一样,顺着原理图找到下边部分
原来默认路线是接在P1_2-SPI1_SSEL3和P1_4-SPI1_SSEL1上的,这两上脚同样在J8上,对应Pin1和Pin3,连接好后一切正常。
本来以为自己发现新大陆,也许以前调试LPC1549时遇到IO口没有输出,ADC采不到数据的情况会和LPC54102一样,结果却很令我失望。
下边正式写程序
先打开MDK5,点 点最右边的图标弹出下边的对话框
右边的device选LPC5400右边在Examples里选Binky example,点一下Copy选一个路径MDK5就会在对应的路径下生成一个项目文件,这样用起来比较简单,lpcopen_2_14_1_keil_iar_lpcxpresso_54102里的结构太复杂,要花很长时间才能熟悉。
建好项目后在Source Files下建两个驱动文件,ad5676.h和ad5676.c
按照AD5676数据手册的下表写SPI指令
对应的宏定义
然后是SPI的引脚配置
接下写SPI函数
为了先验证DAC是否能正常使用先写两个常用配置函数,设置和更新DAC,DAC通道使能
接下来是ADC初始化函数,这里只使能了通道0
初始化结束后执行void write_and_update_dac(0,data)就可以把16位的data输出到通道0。
在示波器上验证没有问题后写IFFT程序,参照CMSIS介绍
float32_t fftInput[FFT_INPUT_BUFFER_LENGTH];是一个单精度浮点数组,#define FFT_INPUT_BUFFER_LENGTH 2048长度为2048字节,索引奇数为实部,偶数为虚数。
fftInput[0]对应的是直流分量32767可以让电平保持在1/2 VREF(VCC),fftInput[2]是要生成一个频率为4.16Hz的正弦波,因为没有使用定时器做精准的数据输出这个频率是我输出后通过示波器测量的,结果在执行完IFFT后通过在主函数使用循环输出数据到AD5676。
示波器上的结果如下图
fftInput[60] = 15000*1024;//125Hz对应的是125Hz的频率
fftInput[600] = 30000*1024;//1KHz对应是1KHz的频率,在为IFFT的点数有限,这时候波形已经不正常了。
然后是两上频率的输出,4.16Hz+125Hz幅值都是30000的效果
         fftInput[2] = 30000*1024;//4.16Hz
         fftInput[60] = 30000*1024;//125Hz
放大后的波形如下,发现很多尖锋都已经串位了,这是因为32767的直流分量+4.16Hz 的30000幅值再加125Hz的30000幅值,当后边两都都是最大时就已经超出65535所以会有下边的效果。
将两个频率的幅值调小些,就可以解决这个问题
         fftInput[2] = 15000*1024;//4.16Hz
         fftInput[60] = 15000*1024;//125Hz
效果如下,低频4.10Hz
高频123.5Hz
本次实验圆满结束,谢谢观看。

此帖出自NXP MCU论坛

最新回复

很好  详情 回复 发表于 2015-5-8 09:03
点赞 关注(1)
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 

回复
举报

9795

帖子

24

TA的资源

版主

来自 2楼
 
本帖最后由 littleshrimp 于 2015-5-8 11:04 编辑

附上代码和PCB
ad5676 evl pcb.rar (4.87 MB, 下载次数: 33)



lpc54102 ifft ad5676 dac code.rar (527.19 KB, 下载次数: 59)
此帖出自NXP MCU论坛
 
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

板凳
 
楼主好牛
此帖出自NXP MCU论坛
 
 
 

回复

862

帖子

2

TA的资源

纯净的硅(初级)

4
 
正好参考下SPI
此帖出自NXP MCU论坛
 
个人签名水不撩不知深浅 人不拼怎知输赢
 
 

回复

1301

帖子

0

TA的资源

纯净的硅(中级)

5
 
很好
此帖出自NXP MCU论坛
 
个人签名

 

 

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表