利用单片机自带的DAC模块实现0-10V设计
扫描二维码
随时随地手机看文章
单片机波形合成发生器是一种数字波形合成技术,通过计算机的数字处理能力来产生各种复杂波形的信号。该技术具有高精度、灵活性强等优点,因此被广泛应用于混频仪、信号源、测试仪等设备中。
利用单片机波形合成发生器实现低频信号发生器的设计原理如下:首先选择一个合适的单片机,对其进行编程,通过单片机自带的DAC模块实现波形输出,采用DDS技术生成任意波形,并进行数字信号处理。最终将合成的数字信号通过运放放大来得到所需要的低频信号。
低频信号发生器是一种用于产生一定频率、波形和振幅的信号的设备。在科研、教学和实际工程中,低频信号来源是各种仪器、设备和系统中必不可少的一环。常见的低频信号发生器有函数发生器、示波器、信号源等,但这些设备存在着输出精度低、频率范围窄、造价高等问题。
DAC(Digital to analog converter)即数字模拟转换器,它可以将数字信号转换为模拟信号。它的功能与 ADC 相反。在常见的数字信号系统中,大部分传感器信号被转化成电压信号,而 ADC 把电压模拟信号转换成易于计算机存储处理的数字编码,由计算机处理完成后,再由 DAC 输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。
1. 数字数据:数字数据通常以二进制形式表示,并存储在计算机系统或其他数字设备中。
2. 重构:DA转换器通过重构技术将数字数据转换为连续的模拟信号。重构过程中,数字样本被插值和滤波,使其变得连续且光滑。
3. 输出模拟信号:DA转换器的输出是通过模拟电路和滤波器处理后的连续模拟信号。输出信号的连续性和精确性取决于DA转换器的性能。
本文一共讲解3种方案,分别为:
第一种方案:利用单片机自带的DAC模块的输出进行实现
第二种方案:使用 PWM 加滤波电路
第三种方案:使用专用转换芯片
第一种方案
利用单片机自带的DAC模块,现在很多的单片机都自带了 DAC 模块,我们可以直接使用 DAC 模块的输出进行实现。
比如我们最常见的单片机供电系统为: 0 ~ 3.3V。 那么我们就可以将 0 ~ 3.3 V 放大 3倍,实现 0~ 10V 的输出。
这里我们用到的是同相比例运放电路:
DAC1 为单片机的 DAC 输出,0 ~ 3.3V ,放大 3 倍。
R2 选择 3.3K 还是因为运放的对称性,选择与 R4 和 R3 并联电阻相等的阻值。
使用 DAC 直接放大3倍,感觉直接看起来还是挺满的,直接上测试:
上面我通过自己手动设置 DAC 的值,输出的不同状态效果。
第二种方案,使用 PWM 加滤波电路。
2.1 PWM 输出 DAC
如何让 PWM 波形变成模拟量输出,那就是加上滤波电路,经过一个滤波电路,可以使得PWM变成DAC输出。
只使用一个 RC 的滤波电路称为一阶滤波电路。
为了使得输出更加平滑,我们会使用二阶甚至多阶滤波电路。
为了使得带载能力更强,我们会使用后面接电压跟随器等运放电路。
2.2 PWM 接滤波器的RC值选择说明
对于 RC 滤波器的 RC值选择,是新手难以理解处理的一个点,这也是滤波器设计的重点之一。
我们都知道,RC低通滤波电路的截止频率:
fc=1/2πRC
这个公式非常重要,了解 RC 滤波器必须牢记的公式,截止频率公式。
截止频率实际上是输入信号幅度降低 3dB 的频率。截止频率也称为 -3 dB频率
简单几点说明
R 越小,输出损耗越大
R 越大,噪声纹波越大
C 越小(比如到达 pf 级别后),越容易被寄生电容影响
C 越大(比如比较大的 uf 级别后),因为电容越大,普通情况下就只能使用电解电容,但是电解电容的高频特性很差,在 RC 滤波器中尽量不要使用电解电容
这种低成本的电路没有完美的,我们总做的就是一个权衡,在有限的成本规定范围内,设计出一个满足需要的电路。
对于本文我们的 PWM 而言,其本质上是一种高频脉冲信号,其中的高频分量会被低通滤波器滤掉,只有低频分量才能通过滤波器,形成模拟信号输出。我们要保证 PWM 的频率 远大于 RC 低通滤波器的截止频率,至少在 10 倍以上甚至数十倍,因为越往上的频率信号,滤波的效果越来越好。
重要的是在你按照经验值设计完电路发现问题了以后知道如何去查找问题,如何去调整参数,这是硬件设计的关键所在。
2.3 0~ 3.3V PWM 输出 0 ~10V
方案一:RC 滤波器
上面简单的说明了一下,那么上一下我们本次测试的电路:
图中的阻容大家可以根据自己的需求修改。
测试:
在上文我们说过,我们可以算出 RC低通滤波器的截止频率,我们要保证 PWM 的频率 远大于 RC 低通滤波器的截止频率。
如果 PWM 的频率比较低会怎样,比如,我 PWM 周期为 1HZ,然后占空比设置为50%:进一步的修改一下,把 PWM 的频率稍微修改一下,对于我测试的其实也就是 定时器的频率,如下:
根据公式
Tout = ((arr+1)*(psc+1))/Tclk ; // 32MHz 主频
定时器周期为 1 ms, 其实也就表示频率为 1KHz,为了方便表示占空比 0~ 100 对应,上面的 arr 改成了100, 实际上也是 1KHz 左右,再来看看效果:
实际上我测试的时候没有特意的去调整阻容的值,就直观上看起来效果还是可以的(上图的毛刺多是因为示波器 GND 的线夹得太远了)。
第三种方案,使用专用转换芯片
前面的两种方式成本相对都比较低,和电平转换电路一样,0 ~10V 输出也有专门的转换芯片: GP8101
看了一下介绍,这个芯片有一个系列,不仅有 PWM 输入的,还有 I2C 结口的:
测试其实和上面一样,设置不同的占空比,看示波器,结果还是很好的。