利用PWM DAC输出线性调频波形设计与实验
- 格式:doc
- 大小:120.00 KB
- 文档页数:7
一种基于PWM的电压输出DAC电路设计在电子和自动化技术的应用中,单片机和DAC(数模转换器)是经常需要同时使用的,然而许多单片机内部并没有集成DAC,即使有些单片机内部集成了DAC,DAC的精度也往往不高,在高精度的应用中还是需要外接DAC,这样增加了成本。
但是,几乎所有的单片机都提供定时器或者PWM输出功能。
如果能应用单片机的PWM输出(或者通过定时器和软件一起来实现PWM输出),经过简单的变换电路就可以实现DAC,这将大量降低成本电子设备的成本、减少体积,并容易提高精度。
本文在对PWM到DA C转换关系的理论分析的基础上,设计出输出为0~5V电压的DAC。
1 应用PWM实现DAC的理论分析PWM是一种周期一定而高低电平的占空比可以调制的方波信号,图1是一种在电路中经常遇到的PWM波.该PWM的高低电平分别为VH和VL,理想的情况VL等于0,但是实际中一般不等于0,这往往是应用中产生误差的一个主要原因.图1的PWM波形可以用分段函数表示为式(1):其中:T是单片机中计数脉冲的基本周期,即单片机每隔T时间记一次数(计数器的值增加或者减少1),N是PWM波一个周期的计数脉冲个数,n是PWM波一个周期中高电平的计数脉冲个数,VH和VL分别是PWM波中高低电平的电压值,k 为谐波次数,t为时间。
把式(1)所表示的函数展开成傅里叶级数[1],得到式(2):从式(2)可以看出,式中第1个方括弧为直流分量,第2项为1次谐波分量,第3项为大于1次的高次谐波分量.式(2)中的直流分量与n成线性关系,并随着n从0到N,直流分量从VL到VL+VH之间变化,这正是电压输出的DAC所需要的。
因此,如果能把式(2)中除直流分量的谐波过滤掉,则可以得到从PWM波到电压输出DAC的转换,即:PWM波可以通过一个低通滤波器进行解调。
式(2)中的第2项的幅度和相角与n有关,频率为1/(NT),该频率是设计低通滤波器的依据。
如果能把1次谐波很好过滤掉,则高次谐波就应该基本不存在了。
pwm实验报告PWM实验报告一、引言脉宽调制(Pulse Width Modulation,PWM)是一种常用的电子技术,用于控制电子设备中的电压和电流。
通过改变信号的脉冲宽度,PWM可以调节电子设备的输出功率,从而实现对电机、灯光等设备的精确控制。
本实验旨在通过搭建PWM电路并进行实际测试,探究PWM技术的原理和应用。
二、实验原理PWM技术通过改变信号的占空比来控制输出信号的电压或电流。
占空比是指脉冲信号中高电平的时间与一个周期的时间之比。
当占空比为0%时,输出信号为低电平;当占空比为100%时,输出信号为高电平;当占空比在0%和100%之间时,输出信号为一个周期内高电平和低电平的交替。
通过调整占空比,可以实现对输出信号的精确控制。
三、实验材料和方法1. 材料:- Arduino开发板- 电阻、电容等基本电子元件- 电机或LED等输出设备- 连接线等实验器材2. 方法:1) 搭建PWM电路:根据实验要求,按照电路图连接电子元件和Arduino开发板。
2) 编写程序:使用Arduino开发环境,编写程序控制PWM输出信号的占空比。
3) 实验测试:将输出设备连接到PWM输出引脚,通过改变占空比,观察输出设备的变化。
四、实验结果和分析在实验中,我们搭建了一个基本的PWM电路,并使用Arduino开发环境编写程序来控制PWM输出信号的占空比。
通过改变占空比,我们观察到输出设备的亮度或转速发生了变化。
在实验过程中,我们发现当占空比较小时,输出设备的亮度或转速较低;而当占空比较大时,输出设备的亮度或转速较高。
这是因为占空比的变化直接影响了输出信号的电压或电流大小,从而改变了输出设备的工作状态。
PWM技术在实际应用中具有广泛的用途。
例如,它可以用于电机控制,通过调整占空比来控制电机的转速和方向;它还可以用于灯光控制,通过调整占空比来调节灯光的亮度;此外,PWM技术还可以应用于电源管理、音频处理等领域。
五、实验总结通过本次实验,我们深入了解了PWM技术的原理和应用。
基于单片机的12位PWMDAC的设计首先,让我们来了解PWM(脉冲宽度调制)的概念。
PWM是一种将连续的模拟信号转换为离散的数字信号的技术。
它通过改变信号的脉冲宽度来实现对模拟信号的控制。
在PWM信号中,信号的频率是固定的,而占空比(脉冲宽度与周期的比值)决定了信号的幅值。
通过改变占空比,我们可以控制模拟信号的幅值,从而实现模拟输出的控制。
在本设计中,使用12位的PWMDAC,意味着我们的信号可以分为2^12=4096个离散的幅值。
换句话说,我们可以将模拟信号的幅值控制在0到4095之间的任意值。
为了实现这一设计,我们需要以下步骤:1. 选择合适的MCU:选择一款能够实现12位PWM输出的MCU。
常见的MCU如Arduino、Raspberry Pi等都能够实现这个功能。
2. 设置PWM输出:使用MCU的编程接口(如Arduino IDE)设置PWM输出的频率和占空比。
确保频率适合于应用,并且占空比的分辨率足够高,以便实现12位的精度。
3.创建占空比表:利用MCU的编程接口,在代码中创建一个占空比表。
表中的每个元素代表一个特定的占空比值,从0到4095、根据需要,可以在代码中设置不同的占空比表,以便在不同的应用中使用不同的幅值。
4.输出模拟信号:使用占空比表和PWM输出设置,将数字信号转换为模拟信号。
根据需要,在不同的时间段使用不同的占空比值,以实现特定的模拟信号输出。
上述的步骤可以基于MCU的编程接口进行实现。
使用编程语言(如C++或Python),可以编写代码,控制PWM输出和模拟信号的生成。
此外,可以利用MCU上的GPIO(通用输入输出引脚)来连接外部电路或设备,将模拟信号传递到需要控制的电路或设备中。
基于单片机的12位PWMDAC设计可以应用于许多领域,包括音频处理、电机控制和传感器信号处理等。
例如,在音频处理中,可以使用PWMDAC来控制音量、频率和音色等参数。
在电机控制中,可以使用PWMDAC来调节电机的转速和方向。
2PWM到DAC电压输出的电路实现根据图2的结构,图3是最简单的实现方式。
图3中,PWM波直接从MCU的PWM 引脚输出,该电路没有基准电压,只通过简单的阻容滤波得到DAC的输出电压。
R1和C 1的具体参数可根据式(2)的第2部分的一次谐波频率来选择,实际应用中一般选择图2中阻容滤波器的截止频率为式(2)的基波频率的1/4左右。
图3的PWM波的VH和VL受到MCU输出高低电平的限制,一般情况下VL不等于0 V,VH也不等于VCC。
例如,对于单片机AT89C52[2,3],当VCC为+5 V时,VH和VL分别为4.5 V和0.45 V左右,而且该数值随着负载电流和温度而变化。
根据式(2)的直流分量可知,DAC电压输出只能在0.45~ 4.5 V之间变化,而且随负载电流和环境温度变化,精度很难保证。
由于该电路的变化部分精度不高,没有必要采用高分辨率的PW M输出,8位即可。
另外图2的DAC输出的负载能力也比较差,只适合与具有高输入阻抗的后续电路连接。
因此,图3的电路只能用在对DAC输出精度要求不高、负载很小的场合。
对精度和负载能力要求较高的场合,需要对图3的电路进行改进,增加基准电压、负载驱动等电路。
图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点得到直流分量,即M CU输出的调制PWM波在C点得到解调,实现了DAC功能。
根据式(2)可知,C点的电压为(5 ×n/N)V,为0~5 V之间的电压。
(1条消息)STM32学习之PWMDAC实验中的滤波电路部分元件参数的由来问题在正点原子STM32利用PWM输出+RC滤波来实现一个DAC功能的实验中,有几个参数自己不是很理解,通过翻阅资料,百度等渐渐理解,现总结如下:(以下全是个人理解,如有不缜密的地方,还请阅读者见谅并指出)首先,我们得先明白为什么通过PWM输出+RC滤波能实现DAC 的功能,DAC的功能不用多说,看其名字就知道是数模转换器,也就是将一串数字信号,转换为对应的模拟信号。
比如我们在利用stm32做DAC实验中,如果我们的DAC是12位的,那么我们就可以看作将我们的0~3.3V间的电压分成了2的12次方,也就是4096份,那么我们由每一份对应的电压*我们输入的份数,那么就可以得到一个电压值,我们可以利用我们的ADC进行采集,就可以直接显示出来啦。
以上是对DAC的一个简单的介绍和理解,而这里我们用PWM输出+RC滤波是怎样实现DAC的功能的呢,我们就要回过去复习我们之前学习的PWM输出实验,在那个实验中(主函数代码如图1),我们通过在主函数中添加循环,设置PWM比较值,使得其占空比不断变化,从而实现在一个很快的周期里高低电平占比的变化,从而使人能看到灯从亮到暗,从暗到亮,我的理解如图2所示图1如图2 ,假如灯是从亮到暗(低电平亮),那么,PWM输出的波形的变化则为也就是说,我们通过在一个较快的频率的内改变PWM的占空比就可以将一个明明是间断数字的信号,在我们眼睛看起来就像一个连续变化的模拟信号。
图3 实际电路典型PWM波形对于这样一个PWM波,n为一个周期内的高电平的脉冲个数,N 为一个周期内的脉冲数。
它是一个周期函数,那么我们就可以得到它的傅里叶级数通过其傅里叶级数我们知道,在一个周期中,如果N一定,那么其直流分量与n有关,n越大,一个周期内的高电平所占的比例越大,那么我得到的直流分量就越大,所以,我们可以通过调节PWM的占空比,从而调节n的值,这样我们就可以输出不同大小的直流电压啦。
微控制器综合设计与实训实验名称:实验八PWM输出实验实验八:PWM输出实验1 实训任务(1) 开启TIM时钟,配置定时器通道对应IO口为复用输出;(2) 利用定时器的PWM输出功能产生波;(3) 通过调节占空比调节LED的亮度。
1.1 实验说明脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
简单一点,就是对脉冲宽度的控制。
STM32的定时器除了TIM6和7。
其他的定时器都可以用来产生PWM输出。
其中高级定时器TIM1和TIM8可以同时产生多达7路的PWM输出。
而通用定时器也能同时产生多达4路的PWM输出。
要使STM32的通用定时器TIMx产生PWM输出,除了上一实验的寄存器外,我们还会用到3个寄存器,分别是:捕获/比较模式寄存器(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR1~4)。
本实验仅利用TIM3的CH2产生一路PWM输出。
通过重映射TIM_CH2到PB5上,由TIM_CH2输出PWM来控制LED1的亮度。
1.2 实验步骤(1)在实训平台上将PB5连接LED灯;(2)编写timer.c与timer.h文件,实现通过重映射TIM_CH2到PB5上,由TIM_CH2输出PWM来控制LED1的亮度。
(3)编写main文件,编译成功;(4) 程序编译无误后下载到实训平台,观察LED亮度的变化:通过示波器观察输出的波形。
2 程序设计(1) 新建文件夹并命名为PWM输出实验,复制粘贴上一章的实验文件,将工程文件改名为PWM.uvprojx。
(2)timer.h文件只需再添加TIM3_PWM_Init的声明即可。
(3) 编写timer.c文件。
a. 开启TIM3时钟以及复用功能时钟置,配置PB5为复用输出要使用TIM3,必须先开启TIM3的时钟,使能GPIO外设和AFIO复用功能模块时钟。
一种基于PWM的更快速的DAC当你需要从一个不带数模转换器()的微控制器输出模拟信号时,你可以外加一个DAC芯片。
但是你也可以用另一种更经济的办法,即采纳脉宽调制()输出加低通(LPF)取其平均值的办法,该平均值等于PWM信号的占空比。
图1:用RC得到PWM信号的平均值RC低通滤波器滤除掉非直流信号,得到的便是平均信号UOUT。
假如PWM 信号的周期T为63个时钟周期,UOUT将会是64个离散DC值之一。
(0 到 63,6位辨别率。
)RC低通滤波器的时光常数τ必需足够大以平滑输出信号UOUT,纹波?UOUT应小于一个最低有效位(LSB)。
最坏的状况浮现在50% 占空比时(2所示)。
当τ远大于周期T时,的充电IC 和变幻?UOUT可近似为:对于一个6位的DAC,?UOUT应小于 VCC/64,要求滤波器的τ=RC ≥16·T。
图2:滤波输出(蓝色)的纹波应小于一个LSB一些有用数据:低功耗微处理器常用法一个32768Hz晶体作为PWM模块的时钟信号。
假如是6位PWM,则周期T为64/32768≈2ms,因此需要32ms的时光常数,也就是要等待5τ(160ms)来使6位转换器稳定。
十分慢。
本设计实例将呈现你如何才干加速完成信号的转换。
微控制器中的PWM模块通常可以产生多个PWM信号。
我们来考虑一下将两个基于PWM的3位DAC(DACH和DACL)的输出求和,求和前DACL 输出的幅度被减小到了八分之一。
得到的信号相当于一个6位DAC,但将会比容易版本有重大的优势:周期T对于相同的辨别率仅为8个时钟周期,而所需的时光常数τ是本来的八分之一,DAC的稳定时光快了8倍。
这样改进后就很简单用为两个PWM信号(PWMH、PWML)实现RC滤波器:图3:将两个基于PWM的DAC输出合到一起输出信号UOUT等于:这一技术已经在TI F5132微控制器中实现:图4:基于6位(3+3)PWM的DAC的初始化和写入代码图5:基于6位PWM的DAC测量输出;蓝线:图1计划(稳定时光160ms);紫线:图3计划(稳定时光20ms)。
一、摘要
S3C2410处理器拥有:独立的16KB指令Cache和16KB数据Cache,MMU,支持TFT的LCD控制器,NAND闪存控制器,3路UART,4路DMA,4路带PWM的Timer ,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS 接口,IIS-BUS 接口,2个USB主机,1个USB设备,SD主机和MMC接口,2路SPI。
本实验是基于S3C2410综合实验平台上实现利用PWM DAC单个电压值输出以及实现输出波形线性调频。
通过按键实现改变PWM的占空比实现单个电压输出变化;通过控制程序实现DAC的线性调频波形输出。
用示波器观察输出波形,测量峰值电压。
用频谱仪测量线性调频谱线,观察线性调频现象。
二、设计要求与任务
1、正弦波形的起始频率可以自己指定,带宽100Hz,时宽10
秒
2、正弦波形的峰峰电压值为3V
3、能观察到线性调频现象
要求完成的主要任务:
1、与同组同学一起指定课程设计计划,并进行合理分工。
2、使用S3C2410A的TOUT0口输出PWM信号实现单个电压
值的DA输出,用万用表对电压值进行测量和校准,记录
PWM和DA输出的对应关系。
3、在2的基础上,编写程序实现DAC的线性调频波形输出。
用示波器观察输出波形,测量峰值电压是否正确。
用频谱
仪测量线性调频谱线,观察线性调频现象,查看是否满足
设计要求。
调整参数,产生不同参数线性调频波形。
4、整理数据资料,独立撰写综合实验、设计说明书。
5、要求:描述利用PDW实现DA输出的原理,要有图和计
算;详细的程序设计描述,要求有参数计算过程描述、流
程图、寄存器设置描述、数据设计描述等;各实验要给出
步骤、实验结果要有图、表和分析说明;对设计和实验进
行总结;文档结构清晰、文字要通顺。
三、实验设备
硬件:
PC机1台
MagicARM2410教学实验开发平台1台
软件:
Windows 98/2000/XP操作系统
ADS 1.2集成开发环境
四、实验原理
1、脉冲宽度调制(PWM)是一种对模拟信号电平进行数字
编码的方法。
通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。
PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。
电压或电流源是以一种通(ON)或断
(OFF)的重复脉冲序列被加到模拟负载上去的。
通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。
只要带宽足够,任何模拟值都可以使用PWM进行编码。
S3C2410A具有4路PWM输出,输出口分别为TOUT0~TOUT3,其中两路带有死区控制功能。
为了能够正确输出PWM 信号,需要正确设置GPBCON寄存器选择相应I/O的为TOUTx 功能。
然后,通过TCFG0寄存器为PWM定时器时钟源设置预分频值,通过TCFG1寄存器选择PWM定时器时钟源。
接着,通过TCNTB0寄存器设置PWM周期,通过TCMPB0设置PWM 占空比。
最后,通过TCON寄存器启动PWM定时器,即可输出PWM信号。
其框图如下图:
PWM 操作时序图为:
电路图1:
2、S3C2410A 的总线时钟Z MH fclk 200=;设置定时器0时钟分频
为:1:2:4即Z MH fclk 504/200==;在取1/2分频即Z MH fclk 252/50==;在通过设置rTCMPB0设置占空比;设置rTCNTB0设置周期;设计要求带宽为100Hz ,则设置rTCNTB0为255,这样Z H M PWMflclk 100255
25≈=。
A 、现在以0.5v 为一个级次;那么对应占空比值:
∆PWM_dac=392553.35.0=⨯v
v ; PWM_dac= PWM_dac+∆PWM_dac
=PWM_dac+39;
这样如图1;当按下KEY1电压值增加0.5v ,当达到3v 后又回到0v 。
这样实现了单个电压值的输出。
B 、输出一个峰值电压为3v 的正弦信号: ()()ϕπ+=t f A t y 02sin
所以A=3,为了方便取ϕ=0;为满足Nyuist 定理取采样频率010f f s =;则:
()⎪⎪⎭
⎫ ⎝⎛+=ϕπn f f A n y s 02sin ;N n ∈; ()⎪⎭
⎫ ⎝⎛⨯=n n y 5sin 3π; 这样通过控制n 时间间隔即可控制输出的正弦信号的周期。
C 、正弦信号线性调频
线性调频信号是指频率随时间而线性改变(增加或减少)的信号。
线性调频的瞬时频率()t f 呈线性变化:()kt t f f +=0,其中f 0表示时
间等于零时的频率,k 表示频率改变的速率,当k>0时,频率递增,k<0则递减。
在B 的基础上实现线性调频即:
在()()ϕπ+=t f A t y 02sin 实现调频即是角度变化随时间的变化成线性:
ϕθ+=kt dt
d ; ηϕθ++==⎰t kt ktdt t 22
1;同样取
0;0==ηϕ;
221⎪⎪⎭⎫ ⎝⎛=s n f n k θ; ()⎪⎪⎭
⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛=221sin 3s f n k n y ; 同样只需给定n 的时间间隔以及k 值。
当k>1,频率线性增大,k<1,频率线性减小。
从示波器上观察可以看到波形逐渐变化。
五、 实验流程图以及程序
程序见附件。
六、 实验步骤
(1) 启动ADS 1.2,使用ARM Executable Image for DeviceARM2410工程模板建立一个工程PWMDAC 。
(2) 在工程src组中的main.c中编写实验代码。
(3) 选用DebugRel生成目标,然后编译链接工程。
(4) 将MagicARM2410实验箱上的PWM DAC电路的跳线JP11短接。
(5) 选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。
(6) 全速运行程序,使用万用表测量PWMDAC测试点的输出电压值。
a、按下独立按键KEY1,观察电压值的改变是否正确。
b、按下功能键,用示波器观察输出波形,并记录实验现象。
c、再次按下功能键、用示波器和频谱仪观察输出波形和实验现象并记录。
重复上述步骤观察实验现象。
七、实验数据以及现象(另附页)
八、实验总结与心得
脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。
通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。
本设计利用PWM DAC输出线性调频波形设计,正弦波形的起始频率自己指定为10HZ,带宽100Hz,时宽10秒,正弦波形的峰峰电压值为3V,使用S3C2410A的TOUT0口输出PWM 信号实现单个电压值的DA输出。
最后,根据上述理论完成相应的数据计算。