精华内容
下载资源
问答
  • 非均匀DAC输出电平可提高IM-DD OFDM系统的性能
  • 利用16位电压输出DAC实现高精度电平设置,电路功能与优势利用电压输出DAC实现真正的16位性能不仅要求选择适当的DAC,而且要求选择适当的配套
  •  利用电压输出DAC实现真正的16位性能不仅要求选择适当的DAC,而且要求选择适当的配套支持器件。针对精密16数模转换应用,本电路使用AD5542A/AD5541A电压输出DAC、ADR421基准电压源以及用作基准电压缓冲的AD8675 ...
  • DAC也可以输出正负电压——电平偏移设计思路和电路分析应用案列分析案例要求设计思路电平偏移电路平移电压与增益无关反向偏移同向偏移 应用案列分析 案例要求 使用stm32自带的DAC输出电压范围是[0,3.3V],而后级...

    DAC也可以输出正负电压——电平偏移设计思路和电路分析

    应用案列分析

    案例要求

    • 使用stm32自带的DAC,输出电压范围是[0,3.3V],而后级模块需要[-1V,1V],受限于pcb尺寸,不能另外寻找合适的DAC,那么只能用stm32本身自带的DAC,可是它只能输出+电压,怎么办?

    设计思路

    我的思考过程如下:

    • 需要将[0,3.3V]偏移到[-1.65V,1.65V]才能满足要求。
    • 还需要一个负电源;
    • 电平偏移就是电压互相加减;
    • 我需要的是一个减法器,满足这样的公式:Vo = Vdac - Vdc。如果提供的Vdc=1.65V,那么输出Vo就可以达到[-1.65V,1.65V],实际上,最终的Vo只要能包括[-1V,1V]就满足要求了。

    电平偏移电路

    • 电平偏移的核心思路就是利用加法器或者减法器达到电平偏移的目的,大多数情况下放大器需要双电源供电。
    • 为了实现Vo = Vdac - Vdc,减法器的应用如下,其中“ 平移电压与增益无关”满足设计要求,其他可以用于其他应用。

    平移电压与增益无关

    在这里插入图片描述

    • 图中的直流电压“Vdc”由电源芯片供电,也可以用虚线框中的电阻分压提供,此时的“Vdc”不是个恒定值,会被输入信号“V+”影响,如果想让放大器输出偏移到一个合理的范围需要仿真合适的“R5,R6”阻值,或者实际测试。
    • 公式推导。
      在这里插入图片描述
      由(1)(2)式可得:
      在这里插入图片描述
      如果R1=R2=R3=R4=R,可得:

    在这里插入图片描述

    反向偏移

    在这里插入图片描述

    • 平移用的“Vdc”由电阻分压得到。平移用的DC必须是低内阻,所以“C1”必不可少。
    • 输入信号“Vi”由放大器反向端输入。
    • 放大器双电源供电;
    • 公式推导:
      在这里插入图片描述
      V + = Vdc
      令:R3 = R4
      推导得:
      在这里插入图片描述
    • 可以看到直流电平“Vdc”被放大了2倍,“Vdc”的增益=2;
    • 为什么叫它是反向偏移:相对于“Vi”来说,Vi增大,Vo变小。Vo朝着Vi相反的方向变化。在这里插入图片描述

    同向偏移

    在这里插入图片描述

    • 信号直接由放大器正端输入;
    • 偏移用的DC电压由电源芯片直接供电“VCC”,也可以用电阻分压,从放大器负端输入;
    • 公式推导:
      在这里插入图片描述
    • 令:R1 = R2
    • V+ = Vi
      可得:
      在这里插入图片描述
    • 为什么叫它同向偏移:相对于输入“Vi”来说,Vi越大,Vo越大。Vo朝着Vi相同的方向变化。

    在这里插入图片描述

    展开全文
  • 利用电压输出DAC实现真正的16位性能不仅要求选择适当的DAC,而且要求选择适当的配套支持器件。针对精密16数模转换应用,本电路使用AD5542A/AD5541A电压输出DAC、ADR421基准电压源以及用作基准电压缓冲的AD8675 超低...
  • stm32DAC输出任意形状的波形 开发板:任意ST的nucler-64板子 软件:crubeMX KEIL 核心思想: 事先准备好一个数组,这个数组保存的是你要显示的波形,数组的成员大小是0-4095(DAC的精度可以最大到4095), 然后...

    stm32 DAC输出任意形状的波形-任意波形发生器

    开发板:任意ST的nucler-64板子
    软件:crubeMX KEIL
    核心思想:

    • 事先准备好一个数组,这个数组保存的是你要显示的波形,数组的成员大小是0-4095(DAC的精度可以最大到4095),

    • 然后按照一定的时间,用DMA的方式,吧这个数组的值搬到DAC的数据寄存器,

    • 然后DAC的引脚电平就按照这个数组变化。

    1 首先配置DAC 1.1 DAC引脚输出

    在这里插入图片描述

    1.2 波形输出模式关闭

    硬件自带的波形输出只是包括三角波和噪声波两种,所以这里要关闭。
    在这里插入图片描述

    1.3 DMA配置

    在这里插入图片描述

    2 定时器2部分的设置
    2.1 定时器时钟源选择为内部时钟

    选择内部时钟源
    在这里插入图片描述

    2.2 定时器2的输出作为DAC的激发

    在这里插入图片描述
    硬件的初始化基本是OK了,现在主要是准备好波形的一维数组,这里的函数作用是生成一个周期的正选波形

    #include<math.h>
    #define PointMax 500 //数组大小是500
    #define PI 3.1415926 //
    unsigned int sinData[PointMax] = {0};//正旋波数据
    
    void get_sin_tab( unsigned int point )
    {
        unsigned int i = 0, j = 0;
        float hd = 0.0;       //弧度
        float fz = 0.0;         //峰值
        unsigned int tem = 0;
        j = point / 2;
        hd = PI / j;
        for( i = 0; i < point; i++ )
        {
            fz = j * sin( hd * i ) + j;
            tem = ( unsigned int )fz;
            sinData[i] = tem*8;//赋值设定在0~4095
        }
    }
    
    3 软件编程,生成正旋波
    3.2 启动定时器2,启动DAC的DMA

    HAL_TIM_Base_Start(&htim2);
    HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t *)sinData, 500,DAC_ALIGN_12B_R);

    3.3 最终效果图

    在这里插入图片描述

    4 生成三角波
    这里是生成三角波的DAC数据 DualSine12bit_sanjiao。

    uint32_t DualSine12bit_sanjiao[500]; 
    for (Idx = 0; Idx < 250; Idx++)  
    {  
    	DualSine12bit_sanjiao[Idx]=Idx*8;  
    } 
    
    for (Idx = 250; Idx < 500; Idx++)  
    {  
    	DualSine12bit_sanjiao[Idx]=(500-Idx)*8;  
    } 
    
    HAL_TIM_Base_Start(&htim2);
    HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t *)DualSine12bit_sanjiao, 500,DAC_ALIGN_12B_R);
    

    在这里插入图片描述

    5 软件编程,生成方波
    //生成方波
    	for (Idx = 0; Idx < 250; Idx++)  
    {  
    	DualSine12bit_fangbo[Idx]=0;  
    } 
    
    for (Idx = 250; Idx < 500; Idx++)  
    {  
    	DualSine12bit_fangbo[Idx]=4095;  
    } 
    
    
    HAL_TIM_Base_Start(&htim2);
    
    HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t *)DualSine12bit_fangbo, 500,DAC_ALIGN_12B_R);
    

    在这里插入图片描述

    附件:STM32 Mucleo图

    在这里插入图片描述

    展开全文
  • 单片机DAC输出方波简易实验 简易的DAC实验,想要输出方波,但是输出了的是一条直线。 改P0为端口P2 排查原因了解到是端口的问题 P0口:双向8位三态I/O口,每个口可独立控制。51单片机P0口内部没有上拉电阻,为高...

    单片机DAC输出方波简易实验

    在这里插入图片描述
    在这里插入图片描述

    简易的DAC实验,想要输出方波,但是输出了的是一条直线。
    改P0为端口P2
    在这里插入图片描述
    在这里插入图片描述
    排查原因了解到是端口的问题
    P0口:双向8位三态I/O口,每个口可独立控制。51单片机P0口内部没有上拉电阻,为高阻状态,所以不能正常的输出高/低电平。因此,在使用P0口时务必要接上拉电阻,一般选择接入10千欧的上拉电阻。
    P1口:准双向8位I/O口,每个口可独立控制,内带上拉电阻。接口输出无高阻状态,输入不能锁存,并不是真正的双向I/O口。P1口在作为输入使用前,要先向该口进行写1操作,然后单片机内部才可正确读出外部信号。
    P2口:准双向8位I/O口,与P1类似
    P3口:准双向8位I/O口,当普通I/O口使用时,类似P1口。
    (内容参考《新概念51单片机C语言教程》郭天祥著)

    在这里插入图片描述
    在这里插入图片描述
    使用P0口接上拉电阻,成功输出方波信号。

    展开全文
  • 基于STM32的DAC输出一、简介:1.1 pwm简介:二级目录三级目录 一、简介: 1.1 pwm简介: PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含...

    一、简介:

    1.1 pwm简介:

    PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%.

    1.2 DAC简介:

    DAC为数字/模拟转换模块,故名思议,它的作用就是把输入的数字编码,转换成对应的模拟电压输出,它的功能与ADC相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由DAC输出电压模拟信号,该电压模拟信号常常用来驱动某些执行器件,使人类易于感知。如音频信号的采集及还原就是这样一个过程。

    二、程序实现

    2.1 pwm

    2.1.1 实现原理:

    STM2中具有定时器模块,所以我们只要配置好对应输出引脚,配置好相应的周期,幅值等就可实现PWM方波的输出。
    STM32F1除了基本定时器TIM6和TIM7,其他定时器都可以产生PWM输出 。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出 。而通用定时器也能同时产生多达 4路的 PWM 输出,这些在定时器中断 章节中已经介绍过。 PWM的输出其实就是对外输出脉宽可调(即占空比调节)的方波信号 ,信号频率是由自动重装寄存器 ARR 的值决定,占空比由比较寄存器 CCR 的值决定。PWM输出比较模式总共有8种,具体由寄存器 CCMRx 的位 OCxM[2:0] 配置。我这里使用的是TIM3.

    2.1.2 程序实现:

    需要的工程文件
    在这里插入图片描述

    配置引脚,设置复用输出timer.c代码如下:
    PWM输出初始化函数

    void TIM3_PWM_Init(u16 arr,u16 psc)
    {  
    	GPIO_InitTypeDef GPIO_InitStructure;
    	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    	TIM_OCInitTypeDef  TIM_OCInitStructure;
    	
    
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);	//使能定时器3时钟
     	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟
    	
    	GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射  TIM3_CH2->PB5    
     
       //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形	GPIOB.5
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
     
       //初始化TIM3
    	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
    	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 
    	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
    	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
    	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
    	
    	//初始化TIM3 Channel2 PWM模式	 
    	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
     	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
    	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
    	TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2
    
    	TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器
     
    	TIM_Cmd(TIM3, ENABLE);  //使能TIM3
    	
    
    

    主函数:

    #include "led.h"
    #include "delay.h"
    #include "key.h"
    #include "sys.h"
    #include "usart.h"
    #include "timer.h"
     int main(void)
     {		
     	u16 led0pwmval=0;
    	u8 dir=1;	
    	delay_init();	    	 //延时函数初始化	  
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    	uart_init(115200);	 //串口初始化为115200
     	LED_Init();			     //LED端口初始化
     	TIM3_PWM_Init(899,0);	 //不分频。PWM频率=72000000/900=80Khz
       	while(1)
    	{
     		delay_ms(10);	 
    		if(dir)led0pwmval++;
    		else led0pwmval--;
    
     		if(led0pwmval>300)dir=0;
    		if(led0pwmval==0)dir=1;										 
    		TIM_SetCompare2(TIM3,led0pwmval);		   
    	}	 
     }
    
    

    实现功能:
    在这里插入图片描述
    其中我将定时器映射到引脚PB5,由于PB5连接的LED灯。所以灯光处于忽明忽暗的情况,通过示波器,我们也能看到波形的变换输出。

    2.1.3 小结

    通过这次pwm的输出实验,我们首先完成了一个方波的输出,这样我们通过对占空比的控制在用PWM电压输出控制器就能完成对电压的操作,如果灵活结合使用,就能完成智能小车,云台的点机或者舵机的控制。

    2.2 DAC

    2.2.1 实现原理:

    STM32具有片上DAC外设,它的分辯率可配置为8位或12位的数字输入信号,具有两个DAC输出通道,这两个通道互不影响,每个通道都可以使用DMA功能,都具有出错检测能力,可外部触发。
    所以我们只需要使用这个模块的代码就可。

    2.2.2 程序实现:

    例程推荐:我们要实现的是正弦波的输出,所以这里直接推荐野火的例程
    例程这里
    提取码:igij
    分析程序:
    我们要产生一个2khz的正弦波信号,所以需要修改代码:
    在这里插入图片描述
    其他不要有改动。DAC模块的实质是将数字信号转换成模拟信号输出。
    波形查看:
    在这里插入图片描述

    2.2.3 小结

    通过本次DAC输出,我们使得我们可以控制STM32输出模拟信号,我们可以用这个模拟信号来完成更多的功能

    三、DAC扩展,实现音频信号输出:

    3.1 数字音频准备

    1.将准备好的音频可以用AU软件转为wav格式,并且用AU剪切长约3秒左右(太长了处理给出的数据量会很大,不好处理)
    AU 下载地址
    在这里插入图片描述
    在这里插入图片描述
    2.用软件WavToC打开刚刚导出的数字音频文件,并把生成代码保存下来
    在这里插入图片描述

    3.2代码实现:

    1、将刚转换的文件复制到工程存放数据的头文件里
    在这里插入图片描述
    2、修改主函数并查看结果:
    在这里插入图片描述

    四、总结:

    通过本次实验,我们实现了对模拟量的输出(DAC)以及不同占空比的方波的输出(PWM)这些在工程应用上非常多,我们需要不断的熟悉过程,以及在PWM参数的设定上下些功夫就能够完成更加智能化的东西,我们在PWM占空比的设置架设PID就能实现对电机的闭环控制,所以还是十分有用的,本次实验也是收获良多。

    展开全文
  • 使用STM32输出PWM波形 1、使用资料:野火开发板资料 《零死角玩转STM32》 2、PWM模式介绍 脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关...脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高
  • 所有的芯片都有 PWM 输出,因此,我们可以用 PWM+简单的 RC 滤波来实现 DAC 输出, 从而节省成本。 PWM 本质上其实就是是一种周期一定,而高低电平占空比可调的方波。实际电路的典 型 PWM 波形,如图 26.1.1 所示...
  • 绝大多数的DAC都是单极性的,只有极少数的DAC是双极性输出,使用单极性DAC要想输出双极性信号,那么只需要将输出的单极性信号通过电平的平移使其变为双极性信号,此时就需要用到运放。使用运放搭建的减法电路应用就...
  • 音频基准电平浅析

    2012-09-18 17:11:00
    在A/D或D/A设备中,由于ADC选取的参考电压,前端运放参数设置不同,导致相同模拟音频信号进入不同设备后,ADC输出的数字音频编码值不同,将这个编码值经过网络传输到DAC设备,由于DAC与ADC端参考选取也不尽相同,...
  • 摘要:这篇应用笔记介绍了一种将-0.3V 至0.7V 视频...图1 所示电路可将视频测试信号发生器的输出电平 转换到0 至1V。  该电路包含增益为-1 的第1 级放大器,随后是增益为-2 的第2 级放大器。因此,总体 增益为+2。调
  • 凌力尔特公司(Linear Technology Corporation)推出具10ppm/℃基准的四通道12位/10位/8位 PWM至电压输出的数模转换器(DAC) LTC2645。这些器件在不到8μs时间内将PWM输入信号转换成准确、稳定、有缓冲的12位电压输出,...
  • 遗憾的是,因为接地阻抗不可能为0,所以“地”在不同的地方可能具有不同的电平。这样,使用单端信号走线就可能导致误差,特别是当信号走线较长,且地电流含有较大数字瞬变时。单端信号走线对噪声拾取敏感,因为它会...
  • 遗憾的是,因为接地阻抗不可能绝对为0,所以“地”在不同的地方可能具有不同的电平。这样,使用单端信号走线就可能导致误差,特别是当信号走线较长,且地电流含有较大数字瞬变时。单端信号走线对噪声拾取敏感,因为...
  •  利用电压输出DAC实现真正的16位性能不仅要求选择适当的DAC,而且要求选择适当的配套支持器件。针对精密16数模转换应用,本电路使用AD5542A/AD5541A电压输出DAC、ADR421基准电压源以及用作基准电压缓冲的AD8675 ...
  • 通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通...
  • 许多现代工业和仪器仪表系统可以接入多个不同电源,常见的是15 V用于模拟电路,3...还有一种解决方案是使用低压单电源(LVSS)DAC,将其输出电压放大至所需输出电平。为了选择适合应用的方法,用户必须了解输出要求,并且
  • pwm实现dac

    千次阅读 2020-02-09 21:03:57
    PWM是脉冲宽度调制,也就是频率固定,占空比可变,信号就是方波,只有高低电平,相当于数字信号,而DAC是模拟输出输出信号在一定程度上和一定范围内可以认为是连续可变的,但是PWM可以通过滤波器实现低精度的DAC...
  • 许多现代工业和仪器仪表系统可以接入多个不同电源,最常见的是15 V用于模拟电路,3...还有一种解决方案是使用低压单电源(LVSS)DAC,将其输出电压放大至所需输出电平。为了选择最适合应用的方法,用户必须了解输出要求,
  • 关于DAC的原理

    千次阅读 多人点赞 2020-02-28 17:40:01
    经常说DAC ,近来各个手机厂家也开始宣传...在模拟电路中,电流电压变化是连续的,而数字电路处理的数据都是离散的数据,输出高电平或者低电平,比如5V单片机,引脚输出的电压要么5V要么0V。DAC做的就是输出一个“...
  • 凌特公司(Linear Technology)新推出采用 3mm x 3mm DFN 封装的 16 位 I2C 串行接口 DAC ,它极大地缩小了便携式产品的尺寸。LTC2606 紧凑的尺寸优化了线路板布局,非常适用...该 DAC 输出可直接驱动高达 1000pF 的容
  • 8通道 12/16位 DAC

    2015-06-12 12:34:06
    AD5672R/AD5676R分别是低功耗、8通道、12...置一个上电复位电路和一个RSTSEL引脚,确保DAC输出上 电至零电平或中间电平,直到执行一次有效的写操作为 止。AD5672R/AD5676R具有关断模式,此模式下的功耗典 型值降至1 A。
  • //输出电平以选中DAC0832 WR12=0; //输出电平以选中DAC0832 while(1) { for(i=0;i;i++) XBYTE[0x7fff]=i; //将数据i送入片外地址07FFFH ,实际上就是通过P0口将数据送入DAC0832 } }
  • 凌特公司(Linear Technology)新推出采用 3mm x 3mm DFN 封装的 16 位 I2C 串行接口 DAC ,它极大地缩小了便携式产品的尺寸。LTC2606 紧凑的尺寸优化了线路板布局,非常适用于空间...该 DAC 输出可直接驱动高达 1000pF
  • 当输入码在0至255变化时,DAC输出可达满电压摆幅,输出调整步长40mV。  当IC1用+5V供电而IC2输出-3V时,产生电荷泵最小输出电压(1.5V),对应代码为80(十进制)。电荷泵仅吸收0.6mA电流并能
  • 1复用输出模式:即引脚作为单片机某外设(如CAN等,ADC/DAC除外)的输入或输出,引脚电平信号与其关联的外设相关。即引脚电信号非寄存器直接影响的模式(ADC/DAC除外)。 2模拟输入/输出电平(模拟)信号与ADC/...
  • DAC8811_VREF为参考电平数值,单位为0.1mV,调用函数时参数单位也是0.1mV,例如:DAC8811_VREF为50000,即5V参考,write_dac8811(30000);输出为3V

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 155
精华内容 62
关键字:

dac输出电平