前言
好久没有上电路小课堂的课了,也是最近项目遇到的需求,想着正好做个电路记录总结。
当然本文的电路以前我也不是全部用过,但是既然写了,那么我肯定给他画个实际的板子,每个都测试一遍。
本次的电路小课堂主要内容就是: 使用单片机如何实现 0 ~ 10V 的信号输出。
一、MCU 的 DAC
第一种方式,利用单片机自带的DAC模块,现在很多的单片机都自带了 DAC 模块,我们可以直接使用 DAC 模块的输出进行实现。
比如我们最常见的单片机供电系统为:0 ~ 3.3V。 那么我们就可以将 0 ~ 3.3 V 放大 3倍,实现 0~ 10V 的输出。
放大电路当然是使用运放实现,在我的另外一篇博文里面总结过运放的常用电路:
常用运放电路总结记录
这里我们用到的是同相比例运放电路,如下图:
DAC1 为单片机的 DAC 输出,0 ~ 3.3V ,放大 3 倍。
R2 选择 3.3K 还是因为运放的对称性,选择与 R4 和 R3 并联电阻相等的阻值。
本文是电路总结记录,至于电路的效果,我需要看一看是否需要后续补充到文中,因为除了专用芯片,这种用 单电源供电的 普通运放 搭建的电路多少会存在一些问题,最典型的一个问题就是能否输出 0 V。
更新测试效果,第一种使用 DAC 直接放大3倍,感觉直接看起来还是挺满意的,直接上测试图:
上面我通过自己手动设置 DAC 的值,输出的不同状态效果。
二、PWM 加滤波电路
第二种方式,使用 PWM 加滤波电路。
2.1 PWM 输出 DAC
如何让 PWM 波形变成模拟量输出,那就是加上滤波电路,经过一个滤波电路,可以使得PWM变成DAC输出。 如下图:
对于具体的 滤波器的基础分析,我应该会单独写一篇文章来说明,这里我们只是提一下,知道使用 RC 滤波器可以使得 PWM 输出变成模拟电压。
上图只使用一个 RC 的滤波电路称为一阶滤波电路。
为了使得输出更加平滑,我们会使用二阶甚至多阶滤波电路。
为了使得带载能力更强,我们会使用后面接电压跟随器等运放电路。
2.2 PWM 接滤波器的RC值选择说明
对于 RC 滤波器的 RC值选择,是新手难以理解处理的一个点,这也是滤波器设计的重点之一。
我们都知道,RC低通滤波电路的截止频率:
fc=1/2πRC
这个公式非常重要,了解 RC 滤波器必须牢记的公式,截止频率公式。
截止频率实际上是输入信号幅度降低 3dB 的频率。截止频率也称为 -3 dB频率
简单几点说明(当然,如果要具体算式分析,可自行网上搜索,博主还没有写过 RC 滤波器的文章 = =!):
R 越小,输出损耗越大
R 越大,噪声纹波越大
C 越小(比如到达 pf 级别后),越容易被寄生电容影响
C 越大(比如比较大的 uf 级别后),因为电容越大,普通情况下就只能使用电解电容,但是电解电容的高频特性很差,在 RC 滤波器中尽量不要使用电解电容
说来说去,这不是这也不行那也不行?= =!实际上就是这样,这种低成本的电路没有完美的,我们总做的就是一个权衡,在有限的成本规定范围内,设计出一个满足需要的电路。
对于本文我们的 PWM 而言,其本质上是一种高频脉冲信号,其中的高频分量会被低通滤波器滤掉,只有低频分量才能通过滤波器,形成模拟信号输出。我们要保证 PWM 的频率 远大于 RC 低通滤波器的截止频率,至少在 10 倍以上甚至数十倍,因为越往上的频率信号,滤波的效果越来越好。
很遗憾在给 PWM 信号做滤波的时候并没有一个完美的固定值范围告诉大家,一般来说 ,保持电阻在 K 级别,数百欧姆到 K级别都可以,然后电容 nf 级别,nf 到 1uf,当然这只是普通情况,还是具体情况具体分析。
涉及到的细节需要经过很多的分析,但是大家放心,在一般使用中,即便你不知道如何选择,根据网上你能找到的参考 “经验值” ,你也可以完成电路的设计。
重要的是在你按照经验值设计完电路发现问题了以后知道如何去查找问题,如何去调整参数,这是硬件设计的关键所在。
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 的线夹得太远了)。
方案二:三极管
三极管的方案是参考 B 站 Eric文老师 视频中的电路,因为某些原因,不放链接,大家可以自行搜索,这里也当做借鉴分享给大家!
有一个问题,偏置电压老师讲的图上好像是 11V ,这个并不好满足,我使用一个 12 V 串联一个 二极管测试一下:
因为上图为借鉴,仅供参考!
如果要保证输出不超过 10V ,那么偏置电压最好也选择 10V ,去掉上面的 D3 比较合适,因为这样最高接近 12V 输出了。
三、专用转换芯片
前面的两种方式成本相对都比较低,和电平转换电路一样,0 ~10V 输出也有专门的转换芯片。
但实际上我没用过,但是既然都要测试了,那也不能落下,那么一下子也不知道什么芯片好,只能去网上搜索(虽然按我的理解是度娘搜索的芯片只能说广告做得多,并不见得好),但是也没有其他办法,于是乎经过一通搜索, 那就是这款芯片了:GP8101 。
看了一下介绍,这个芯片有一个系列,不仅有 PWM 输入的,还有 I2C 结口的:
这里就不贴太多说明了,大家自行可以搜索,本文也就把他当做一种方案,我们直接根据推荐电路设计电路图即可:
测试其实和上面一样,设置不同的占空比,看示波器,结果还是很好的。
结语
本文列出了使用单片机如何实现 0 ~ 10V 输出电路的不同方案。
要说最稳定省心的,肯定是使用专用芯片,如果确实对成本敏感,那就得结合实际需求考虑了。文章列出的几个电路后续如果在实际测试中有新的发现也会第一时间更新文章。
好了,本文就到这里,谢谢大家!
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !