用PWM实现DAC功能

现在单片机型号很多,但是内部拥有12位DAC且性价比较高的芯片恨少,导致在芯片选型时,捉襟见肘。没办法,就想着用PWM实现DAC的功能,这只是初步理论,还没有实践过,先贴出来,后续实现再看效果如何吧。

1,如下图,改方式元器件少,但精度低,文波大一点

输出的模拟量电压Vout=VDD*D1/ (D1+D2)。该输出电压带有纹波,当RC值足够大时,该纹波值几乎为零。

为进一步减小纹波,可使用两级RC滤波。 此处LM324作为一个跟随器,提高电路的负载能力。

2,高精度PWM DAC电路

 

图4的电路在图3电路的基础上增加了开关管T1、基准电压源LM3365和输出放大器TL V2472。MCU从A点输出的PWM波驱动T1的栅极,T1按照PWM的周期和占空比进行开关。T1为低 导通电阻和开关特性好的开关管,如IRF530[4],其典型导通电阻小于0.16 Ω,而截止电阻却非常大,与T1并联的为基准电压LM3365。图4的B点将得到理想的 PWM波形,即:VH=5 V,VL=0 V,波形为方波。A点的PWM波,经过整形得到B点理想PWM波,B点的PWM波再经过两级阻容滤波在C点得到直流分量,即MCU输出的调制PWM波在C 点得到解调,实现了DAC功能。根据式(2)可知,C点的电压为(5 ×n/N)V,为0~5 V之间的电压。由于放大器A1的输入阻抗很大,二级阻容滤波的效果很好,C点的电压纹波极小,满足高精度要求。输出放大器采用TLV2472,工作在电压 跟随器方式,他是一个RailtoRail放大器,他的输出电压的跨度几乎等于电源电压幅度,因此可以得到0 V的电压输出,克服了一般放大器(如LM324,TL071等)输出电压跨度比电源电压范围小1 V左右这一缺点。图4与图3还有一点重要的不同是,图4的电源电压为6 V,而图3为5 V。图4中在MCU接电源电压中串联了二极管,他起降压的作用,因为一般的MCU工作电源范围为4.5~5.5 V之间。图4中采用电源电压为6 V是为了保证LM336 5能正常工作。

  • 5
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
MSP430F5529是德州仪器(TI)推出的一款低功耗微控制器,它内置了多个模拟数字转换器(ADC)和数字模拟转换器(DAC)模块,可以用于实现PWM模拟DAC。 要使用MSP430F5529实现PWM模拟DAC,你可以按照以下步骤进行操作: 1. 配置PWM模块:使用Timer模块的PWM功能来产生PWM信号。选择一个合适的定时器,配置为PWM模式,并设置相关参数,如周期、占空比等。 2. 配置DAC模块:MSP430F5529具有12位的DAC模块,可以用来产生模拟输出。配置DAC模块的相关寄存器,设置参考电压、输出范围等。 3. 编写代码:根据需求,编写代码来控制PWMDAC模块。使用PWM信号的占空比来控制DAC输出的电压值,从而生成模拟信号。 以下是一个简单的示例代码,用于在MSP430F5529上实现PWM模拟DAC: ```c #include <msp430.h> #define PWM_PERIOD 1000 // PWM周期 #define DAC_REF_VOLTAGE 3300 // DAC参考电压(单位:mV) void initPWM() { TA0CTL = TASSEL_2 + MC_1 + TACLR; // 选择SMCLK作为时钟源,设置为增计数模式,清除计数器 TA0CCR0 = PWM_PERIOD; // 设置PWM周期 TA0CCR1 = 0; // 设置初始占空比为0 TA0CCTL1 = OUTMOD_7; // 设置PWM输出模式为7(设置/复位) } void initDAC() { DAC12_0CTL = DAC12SREF_1 + DAC12LSEL_0 + DAC12IR; // 设置参考电压为Vref+,选择12位的输出精度,使能DAC中断 DAC12_0DAT = 0; // 设置初始输出值为0 DAC12_0CTL |= DAC12ENC; // 使能DAC } int main(void) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗定时器 initPWM(); initDAC(); while (1) { // 根据需要修改PWM占空比,从而改变DAC输出的电压值 TA0CCR1 = (TA0CCR0 * desired_voltage) / DAC_REF_VOLTAGE; } } ``` 在这个示例中,我们使用TimerA模块的通道1来产生PWM信号,并通过DAC12模块来输出模拟电压。你可以根据需要修改代码中的参数和逻辑,实现你想要的PWM模拟DAC功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值