DA输出波形
- 格式:docx
- 大小:17.79 KB
- 文档页数:7
da转换芯片生成梯形波
DA转换芯片可以生成梯形波。
例如,DAC0832是一个常用的DA转换芯片,它可以产生三角波、正弦波、梯形波和方波等波形。
要使用DAC0832生成梯形波,可以按照以下步骤进行:
1.将DAC0832的输入寄存器设置为所需的梯形波值。
2.将DAC0832的输出寄存器设置为0。
3.将DAC0832的输出使能(OE)线拉高,使输出引脚开始输出波形。
4.重复步骤1和步骤2,以生成连续的梯形波。
需要注意的是,梯形波的幅度和频率可以通过调整输入寄存器的值和控制信号的频率来改变。
另外,要保证DA转换芯片的电源和地线连接正确,以保证芯片的正常工作。
PCI-8602多功能DA输出卡使用说明书2004/02一 概述PCI-8602是一款PCI总线多功能DA输出卡,为用户提供了4路模拟信号输出通道 ,2路反相的PWM数字信号输出通道 , 10Bit TTL数字量输入通道,10Bit TTL数字量输出通道,24bit(OPTO-22兼容) 数字量输入/输出通道。
二、性能和技术指标2.1 性能• 4路模拟信号输出通道• 模拟信号输出分辩率16Bit• 模拟信号输出范围[-10 , +10]V• PWM输出可调范围14bit• PWM输出可调精度0.1uS• 2路PWM反相输出• 10Bit DI TTL兼容数字量输入• 10Bit DO TTL兼容数字量输出• 24bit(82C55A)数字量输入/输出通道• 一路数字量输入上升沿中断2.2模拟信号输出技术指标• 模拟信号输出通道: 4• 模拟信号输出分辨率 16位• 模拟信号输出范围: ±10 V• 数模转换器件 DAC7744• 建立时间: 10uS• 精度: 优于±0.003%满量程• 线性度: ± 1/2 LSB• 复位状态: 0输出• 输出负载能力: ±5mA2.3 PWM 输出• PWM输出通道: 2路反相• 脉冲周期范围: 0.1uS – 1.6384mS• 高电平输出范围: 0.0uS – 1.6384mS• 分辨率 0.1uS• 建立时间: 1uS• 输出电平: TTL兼容• 低电平输出: 灌电流8mA时,最大输出0.5 V • 高电平输出 源电流0.05mA时,最小输出2.4V • 复位输出 PWMA 输出0 ,PWMB输出12.4 数字量输出• 通道: 10路• 输出电平: TTL兼容• 低电平输出: 灌电流8mA时,最大输出0.5 V • 高电平输出 源电流0.05mA时,最小输出2.4V • 复位输出 输出02.5 数字量输入• 通道: 10路• 输入电平: TTL兼容• 低电平输入: 最大0.8V• 高电平输入 最小2.0V2.6 数字量输入/输出• 结构 82C55A• 兼容 OPTO-22• 通道: 24路• 输入电平: TTL兼容• 低电平输入: 最大0.8V• 高电平输入 最小2.0V2.7 数字量中断• 通道: 1路• 引脚: DI9(共用)• 输入电平: TTL兼容• 低电平输入: 最大0.8V• 高电平输入 最小2.0V• 方式: 上升沿三、引脚描述3.1 CN1模拟量输出引脚 : AO(0..2)数字量输出引脚 : DO(0..11)数字量输入引脚 : DI(0..11)PWM 输出引脚 : PWMA ,PWMB数字地 : DGND模拟地 : AGND中断输入 : DI93.2 辅助数字量引脚CN282C55端口A : PA82C55端口B : PB82C55端口C : PC数字地 : DGND四.寄存器描述;本章描述了PCI8602所用的寄存器,如果你对PCI设备编程比较熟悉,或者你是非windows平台的客户,你可以使用这些寄存器直接对PCI8602编程。
试验五. A/D、D/A转换实验一、实验目的1. 学习理解模/数信号转换和数/模转换的基本原理。
2. 掌握模/数转换芯片ADC0804和数/模转换芯片DAC0832的使用方法。
二、实验设备TD-PITE实验装置(带面包板)一套,实验用转换芯片两片,±12V稳压电源一台、运放两片、温度传感器、电位器(5.1KΩ)一个、电阻若干,面包板用导线若干,排线若干,万用表一个。
三、实验内容(1)设计A/D转换电路,采集可调电阻的输出电压。
连+5V电源,调节后的输出电压作为ADC0804的模拟输入量,然后进行A/D转换,转换结果由发光二极管上显示。
请填写实验数据表格:(2)将LM35 精密摄氏度温度传感器连+5V电源,输出电压直接作为ADC0804 的模拟输入量,然后进行A/D转换,转换结果经过计算得到摄氏度值放在内存变量上。
(多数温度传感器是针对绝对温度的,且线形较差。
LM35的输出电压与摄氏温度值成正比例关系,每10 mV 为 1 摄氏度。
)(3)设计D/A 转换,要求产生锯齿波、三角波、脉冲波,并用示波器观察电压波形。
四、实验原理1. 模数转换器ADC0804 简介ADC0804是用CMOS集成工艺制成的逐次比较型模数转换芯片。
分辨率为8位,转换时间为100μs,输入参考电压范围为0~5V。
芯片内有输出数据锁存器,与计算机连接时,转换电路的输出可以直接连接在CPU数据总线上。
图5.1 ADC0804引脚图启动信号:当CS#有效时,WR#可作为A/D转换的启动信号。
WR#高电平变为低电平时,转换器被清除;当WR#回到高时,转换正式启动。
转换结束:INTR#跳转为低电平表示本次转换已经完成,可作为微处理器的中断或查询信号。
RD#用来读A/D转换的结果。
有效时输出数据锁存器三态门DB0~DB7各端上出现8位并行二进制数码。
转换时钟:见下图,震荡频率为f CLK ≈ 1 / 1.1RC。
其典型应用参数为:R = 10KΩ,C = 150pF,f CLK≈ 640KHz,8位逐次比较需8×8 = 64个时钟周期,转换速度为100μs。
显示频率,幅度可调,可产生四种波形,正弦波,方波,锯齿波,三角波,希望你能喜欢,给你发了一张效果图,喜欢的话别忘了采纳我的回答啊#include<>#define uchar unsigned char#define uint unsigned int#define DAdata P0 //DA数据端口sbit DA_S1= P2^0; // 控制DAC0832的8位输入寄存器,仅当都为0时,可以输出数据(处于直通状态),否则,输出将被锁存sbit DA_S2= P2^1; // 控制DAC0832的8位DAC寄存器,仅当都为0时,可以输出数据(处于直通状态),否则,输出将被锁存sbit key= P3^2;uchar wavecount; //'抽点'计数uchar THtemp,TLtemp;//传递频率的中间变量uchar judge=1; //在方波输出函数中用于简单判别作用uchar waveform; //当其为0、1、2时,分别代表三种波uchar code freq_unit[3]={10,50,200}; //三种波的频率单位uchar idata wavefreq[3]={1,1,1}; //给每种波定义一个数组单元,用于存放单位频率的个数uchar code lcd_hang1[]={"Sine Wave " "Triangle Wave " "Square Wave " "Select Wave: " "press key! "};uchar idata lcd_hang2[16]={"f= Hz "};uchar code waveTH[]={0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xf6,0xf9,0xfb,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe};uchar code waveTL[]={0x06,0x8a,0x10,0x4e,0x78,0x93,0xa8,0xb3,0xbe,0xc6, //正弦波频率调整中间值0xac,0xde,0x48,0x7a,0x99,0xaf,0xbb,0xc8,0xd0,0xde, //三角波频率调整中间值0x88,0x50,0x90,0x32,0x34,0xbe,0x4a,0xa3,0xe5,0x2c};/******************************************************************** *****************************/uchar code triangle_tab[]={ //每隔数字8,采取一次0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48,0x50,0x58,0x60,0x68 ,0x70,0x78,0x80,0x88,0x90,0x98,0xa0,0xa8,0xb0,0xb8,0xc0,0xc8,0xd0,0xd8,0xe0,0xe8, 0xf0,0xf8,0xff,0xf8,0xf0,0xe8,0xe0,0xd8,0xd0,0xc8,0xc0,0xb8,0xb0,0xa8,0xa0,0x98,0x90,0 x88,0x80,0x78,0x70,0x68,0x60,0x58,0x50,0x48,0x40,0x38,0x30,0x28,0x20,0x18,0x10 ,0x08,0x00};uchar code sine_tab[256]={//输出电压从0到最大值(正弦波1/4部分)0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8, 0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0x e1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0 xfe,0xff,0xff,0xff,0xff,0xff,0xff,//输出电压从最大值到0(正弦波1/4部分)0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6, 0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4, 0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 , 0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,//输出电压从0到最小值(正弦波1/4部分)0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57, 0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20 ,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02 ,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,//输出电压从最小值到0(正弦波1/4部分)0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x0 7,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b ,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};void delay(uchar z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void triangle_out() //三角波输出{DAdata=triangle_tab[wavecount++];if(wavecount>64) wavecount=0;DA_S1=0; //打开8位输入寄存器DA_S1=1; //关闭8位输入寄存器void sine_out() //正弦波输出{DAdata=sine_tab[wavecount++];DA_S1=0; //打开8位输入寄存器DA_S1=1; //关闭8位输入寄存器}void square_out() //方波输出{judge=~judge;if(judge==1) DAdata=0xff;else DAdata=0x00;DA_S1=0; //打开8位输入寄存器DA_S1=1; //关闭8位输入寄存器}/************1602液晶的相关函数*************/#define lcd_ports P1sbit rs=P2^2;sbit rw=P2^3;sbit lcden=P2^4;void write_com(uchar com){rs=0; //置零,表示写指令lcden=0;lcd_ports=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchar date){rs=1; //置1,表示写数据(在指令所指的地方写数据)lcden=0;lcd_ports=date;delay(5);lcden=1;delay(5);lcden=0;void disp_lcd(uchar addr,uchar *temp1){uchar num;write_com(addr);delay(1); //延时一会儿for(num=0;num<16;num++){write_date(temp1[num]);//或者这样写write_date(*(temp1+num));delay(1);}}void init_lcd(){//uchar num;lcden=0; //可有可无rw=0; //初始化一定要设置为零,表示写数据write_com(0x38); //使液晶显示点阵,为下面做准备write_com(0x0c); //初始设置write_com(0x06); //初始设置write_com(0x01); //清零write_com(0x80); //使指针指向第一行第一格disp_lcd(0x80,&lcd_hang1[3*16]); //在第一行显示disp_lcd(0xc0,&lcd_hang1[4*16]); //在第二行显示}/********************1602液晶函数声明结束*********************/ void main(){uchar i=0;DA_S2=0; //使DAC寄存器处于直通状态DAdata=0;DA_S1=1; //关闭8位输入寄存器init_lcd();waveform=0;TMOD=0x01; //设置定时器0为16位工作方式IT0=1; //设置外部中断0为下降沿触发ET0=1; //开定时器中断EX0=1;EA=1;while(1){//DAout(0xff); //可输出TTL波形//DAout(0x80);//T_temp=32;}}void timer0() interrupt 1{TH0=THtemp;TL0=TLtemp;if(waveform==0) sine_out();else if(waveform==1) triangle_out();else if(waveform==2) square_out();}void key_int0() interrupt 0{uchar keytemp;uint total_freq; //总频率EA=0; TR0=0; //关总中断与定时器delay(5); //延时够吗if(key==0) //确实有按键按下而引发中断{keytemp=P3&0xf0; //获取P3口高四位的值switch(keytemp){case 0xe0: //选择波形waveform++;if(waveform>2) waveform=0;break;case 0xd0: //频率按规定单位依次增加wavefreq[waveform]++;if(wavefreq[waveform]>10) wavefreq[waveform]=1; // /*这边要用“>10”,因为它比“=11”可靠break;case 0xb0: //频率按规定单位依次衰减wavefreq[waveform]--;if(wavefreq[waveform]<1) wavefreq[waveform]=10; //这边要用“<1”,因为它比“=0”可靠性更高break;case 0x70: //TTL输出DA_S2=1; //使DAC寄存器关闭break;}THtemp=waveTH[waveform*10+(wavefreq[waveform]-1)]; //方括号中选取第几个数后,并把该值赋给T_tempTLtemp=waveTL[waveform*10+(wavefreq[waveform]-1)];total_freq= wavefreq[waveform] * freq_unit[waveform]; //求输出频率(个数*单位)lcd_hang2[5]=total_freq%10+0x30; //在液晶中显示个位,(0x30 在液晶显示中表示数字0)total_freq/=10; lcd_hang2[4]=total_freq%10+0x30; //在液晶中显示时十位total_freq/=10; lcd_hang2[3]=total_freq%10+0x30; //在液晶中显示时百位total_freq/=10; lcd_hang2[2]=total_freq%10+0x30; //在液晶中显示时千位disp_lcd(0x80,&lcd_hang1[waveform*16]); //在第一行显示disp_lcd(0xc0,lcd_hang2); //在第二行显示}wavecount=0; //'抽点'计数清零while(!key);EA=1; TR0=1; //开启总中断与定时器}。
一、实验目的1. 学习数/模转换的基本原理。
2. 掌握DAC0832的使用方法。
二、实验设备PC机一台,TD-PITE实验装置或TD-PITC实验装置一套,示波器一台。
三、实验内容设计实验电路图实验线路并编写程序,实现D/A转换,要求产生锯齿波、三角波,并用示波器观察电压波形。
四、实验原理D/A转换器是一种将数字量转换成模拟量的器件,其特点是:接收、保持和转换的数字信息,不存在随温度、时间漂移的问题,其电路抗干扰性较好。
大多数的D/A转换器接口设计主要围绕D/A集成芯片的使用及配置响应的外围电路。
DAC0832是8位芯片,采用CMOS工艺和R-2RT形电阻解码网络,转换结果为一对差动电流Iout1和Iout2输出,其主要性能参数如表1示,引脚如图1所示。
D/A转换单元实验电路图如图2所示。
表1 DAC0832性能参数图1 DAC0832引脚图图2 D/A实验单元电路图五、实验步骤1. 实验接线图如图3所示,按图接线。
2. 编写实验程序,经编译、链接无误后装入系统。
3. 运行程序,用示波器测量DA的输出,观察实验现象。
4. 自行编写实验程序,产生三角波形,使用示波器观察输出,验证程序功能。
图3 D/A实验接线图5. 产生三角波程序如下:STACK SEGMENT STACKDW 32 DUP(?)STACK ENDSCODE SEGMENTASSUME CS: CODE, SS: STACKSTART: MOV AX, 00H ; 产生三角波MOV DX, 600HMOV AL, 00HAA1: CALL DELAYINC ALJZ AA2OUT DX, ALJMP AA1AA2: CALL DELAYDEC ALJZ AA1OUT DX,ALJMP AA2DELAY : PUSH CXMOV CX, 03FFHAA3: PUSH AXPOP AXLOOP AA3POP CXRETCODE ENDSEND START六、实验结果因实验室缺乏足够的示波器设备,故采用软示波器显示波形。
MS Access Database,保存Documents文件夹下新建A4,横)直线,颜色为3号,文字4、在Sim.ddb中调取元件,绘制分压偏置式电压放大电路原理图(如图2),并进行ERC 检测无误。
5、生成扩展名为.XLS材料清单,要求显示Part Type、Designator、Footprint三项。
6、通过进行扫描参数(parameter sweep analysis)仿真分析,观察三极管电流放大系数β值对输出波形的影响。
扫描参数为放大管的β值,start value设置为20,stop value设置为120,step value设置为20,显示输出电压,显示波形为单一波形(single cell)7、在Documents文件夹下新建一个Pcb Document文件,命名为:放大电路学号.PCB。
完成分压偏置式电压放大电路的PCB板设计工作。
要求自定义方式创建一PCB板,板的尺寸70mm⨯60mm,单面板,Top Layer层放置元件,Bottom Layer层布线,在Top overlay层写图1图2R6第一步所建的姓名学号文件夹下。
打开该数据库,然后在其内Documents 文件夹下新建一个Schematic Library Document ,命名为:74LS20元件学号.lib 。
建名为74LS20元件,内部为2个四输入与非门,封装为SOP14,该元件引脚名称及排序示意图如图3所示。
9、新建一个名为“元件库封装学号.ddb ”数据库,设计保存类型为MS Access Database ,保存在第一步所建的姓名学号文件夹下。
打开该数据库,然后在其内Documents 文件夹下新建一个PCB Library Document ,命名为:74LS20元件库封装学号.lib 。
制作74LS20封装。
要求:封装为贴片式封装,名为SOP14,焊盘参数设置:X-Size::80mil ;Y-Size::25mil ;焊盘间距:50mil ;两排焊盘间距:220mil 。
STM32产⽣任意波形的⼀种实现思路(以产⽣5k赫兹的⽅波STM32F103RCT6,HA。
本⽂的实现思路为DAC+DMA+TIMER 的⽅法产⽣任意波形基本思路DDS的原理,通过在STM32中,存储⼀个完整周期的信号波形,并以等间隔时间将波形数据输出,即可得到预期的波形我们在⼀个完整周期内取100点,⽤着100点来描述⼀个完整的周期信号1、我们需要5KHz∗100=500KHz的时间间隔——定时器以1500KHz的时间间隔输出单个的波形数据,不断重复即可得到频率为5K赫兹的波形。
2、在长度为100的波形数组中,定义前50个数据为0,后50个数据为1,形成⼀个完整的单周期⽅波信号。
3、定时器循环的输出⽅波数组中的波形数据即可得到的5KHz的⽅波。
程序流程STM32的TIM、TRGO事件STM32中有三类定时器:⾼级定时器、通⽤定时器、基本定时器。
三类定时器都可以产⽣触发事件(TRGO),所以使⽤任意⼀种定时器即可,这⾥以使⽤基本定时器为例。
当定时器发⽣溢出时,可以通过触发控制器产⽣TRGO事件。
可以看到当定时器发⽣上溢时,将产⽣更新事件,在CubeMX中可以配置上⽂的基本思路⾥⾯我们已经知道,定时器需要定时1500KHz的时间,TIM6挂接在系统APB1总线,APB1总线的时钟频率为18Mhz,根据定时器时间计算公式:T(s)=(ARR+1)∗(PSC+1) TIM C LK(Hz)f(Hz)=TIM C LK(Hz)(ARR+1)∗(PSC+1)=18MHz(5+1)∗(5+1)=500KHzSTM32DAC触发⽅式下的DMA传输根据参考⼿册中可知,当有外部触发DAC转换时,DAC会先产⽣⼀个DMA请求,更新DAC_DORx寄存器,更新完成后再进⾏DA转换在CubeMX中的设置如下:DAC触发启动:DAC的DMA配置:主程序的编写1、构建波形数据:2、在初始化后开启定时器、开始DMA转换:3、切换波形在这⾥使⽤按键KEY0来控制波形的切换,当按键按下产⽣外部中断,在中断中处理波形总结不同于以往,我⼀般使⽤定时器定时,到时间后,⼿动执⾏DA转换,这次使⽤定时器触发,DMA传输波形数据来完成DA转换。