梁工 发表于 2024-9-9 18:10:09

高速DAC实现@Ai8051U,DMA支持8/16位并口接R-2R电阻,输出正弦波、任意波形


高速DAC实现, 用DMA支持的
===TFT彩屏8位或16位并行数据接口送R-2R电阻网络
===输出正弦波,或任意波形
===@Ai8051U,DMA-M6800/i8080并行8/16位接口   
深圳国芯人工智能有限公司-产品_AI8051U系列 (stcai.com)


使用TFT彩屏接口+DMA, 将正弦波数据输出到P2口,
接R-2R做DAC输出正弦波(或任意波形)。
本例为32点正弦波,此法将极大程序减少对CPU的占用,
中断频率为输出波形的频率,比如输出2000Hz的正弦波,
如果用传统的中断重装方式,将需要64KHz(15.625us)的中断,
严重拖累CPU。
而使用本方法,中断率为2000Hz,并且中断仅仅是重启DMA。
注意:
重启DMA需要大约1us的时间,会附加到输出波形中,引起失真,
当波形小于5000Hz时,影响可以忽略,大于10KHz时,
影响开始能检测到。
后面做数字电桥LCR会考虑使用本部分电路及方法,
或者使用DMA-PWM产生正弦波。

要附加一个 R-2R DAC 电路:


输出1000Hz正弦波(32点正弦波表):

可以用 内置的 12位ADC 来反馈检测控制精度


程序源码:



神农鼎 发表于 2024-9-9 19:58:34








神农鼎 发表于 2024-9-9 20:00:37









health 发表于 2024-9-9 23:33:05

DMA传输间隔期,P2能保持上一次的输出数据吗?

梁工 发表于 2024-9-10 09:22:00

本帖最后由 梁工 于 2024-9-10 09:33 编辑

health 发表于 2024-9-9 23:33
DMA传输间隔期,P2能保持上一次的输出数据吗?
保持,下面为没有滤波的波形,明显是有保持的,没有保持的难以回复波形的:


水平放大2倍:


health 发表于 2024-9-10 12:41:54

我测试的结果不是这样。
两次输出间有4个时钟的无效数据0,你上面那个图应该是初步滤波后或者示波器采样率太低显示不出来。
之前我用DMA-LCM做高速DAC,失败原因这是其中之一。后面第二版加了个574将数据用WR打了一下。

health 发表于 2024-9-10 12:54:42

直接烧录1楼的hex,示波器测量截图如下:


因只用了高3bit且电阻网络架构不同,所以幅值有些差异,应该不影响说明这个问题。

梁工 发表于 2024-9-10 15:15:56

health 发表于 2024-9-10 12:54
直接烧录1楼的hex,示波器测量截图如下:




加一个100PF的电容就看不到这个尖峰了。毕竟这是彩屏驱动外设,数据输出切换有尖峰,但滤波后基本不影响。

health 发表于 2024-9-10 15:25:49

做高速DAC有影响。
我用来输出视频,最高可设为3个时钟输出一个字节,实际效果是7个时钟输出一次,其中3个时钟有效数据,4个时钟输出0。没办法滤波的,要滤把有效数据也滤掉了。
只能用来做低速低精度DAC,干扰脉冲相对于有效数据占的比例小一些。
但是做低速DAC不如用PWM更合适了。

梁工 发表于 2024-9-10 15:32:33

health 发表于 2024-9-10 15:25
做高速DAC有影响。
我用来输出视频,最高可设为3个时钟输出一个字节,实际效果是7个时钟输出一次,其中3个 ...

{:sweat:}输出视频!我主楼说了,超过10KHz就会有明显的影响(32点)。
页: [1] 2
查看完整版本: 高速DAC实现@Ai8051U,DMA支持8/16位并口接R-2R电阻,输出正弦波、任意波形