利用 DAC0832 输出模拟电压

  以前,做而论道写过一篇关于 DAC0832 的博文,可见:DAC0832 的基本功能

  当时,为了直观的说明 DAC0832 的基本功能,就使用了拨动开关来输入数字量。
  后来,时常有人留言或私信,提出怎样利用单片机来驱动 DAC0832 输出周期电压波形、以及如何编程的问题。
  其实,用单片机输出数字量,还真是很简单方便的。
  电路,也不用像课本里面画的那么复杂,用任意一个单片机的并行口连接到 DAC0832 的数据输入口即可。
  用 P1 口,驱动 0832 的电路如下所示。

  在这个电路,写入下列的小程序。

	ORG 	0000H
	JMP 	START
START:
;--------------------------------------------
	MOV 	R2, #0
LOOP:
	MOV 	P1, R2    	; 输出,进行 D/A 转换
	CALL	DELAY		; 延时
	INC 	R2
	SJMP	LOOP
;-----------------------
DELAY:		        	; 延时子程序
	MOV 	R6, #2    	; 1;127
	MOV 	R7, #200
	DJNZ	R7, $		; 内循环200遍
	DJNZ	R6, $ - 4	; 外循环127遍
	RET
;--------------------------------------------
END

  程序执行后,可以看到输出的锯齿波电压的波形图如下所示。

  看波形,还是有些失真呵。
  
同样还是这个电路,执行下列的程序,看看,会出现什么波形?

	ORG 	0000H
	JMP 	START
START:
;--------------------------------------------
SINE:
	MOV    	DPTR, #SINTAB
	MOV    	R2, #0
LOOP:
	MOV    	A, R2
	MOVC	A, @A + DPTR	; 取数据
	MOV    	P1, A	    	; 输出,进行 D/A 转换
	CALL	DELAY	    	; 延时
	INC    	R2
	SJMP	LOOP
;-----------------------
SINTAB:				        ; 正弦波数据表
	DB  07FH, 083H, 086H, 089H, 08CH, 08FH, 092H, 095H
	DB  098H, 09BH, 09EH, 0A1H, 0A4H, 0A7H, 0AAH, 0ADH
	DB  0B0H, 0B3H, 0B6H, 0B9H, 0BBH, 0BEH, 0C1H, 0C3H
	DB  0C6H, 0C9H, 0CBH, 0CEH, 0D0H, 0D2H, 0D5H, 0D7H
	DB  0D9H, 0DBH, 0DEH, 0E0H, 0E2H, 0E4H, 0E5H, 0E7H
	DB  0E9H, 0EBH, 0ECH, 0EEH, 0EFH, 0F1H, 0F2H, 0F4H
	DB  0F5H, 0F6H, 0F7H, 0F8H, 0F9H, 0FAH, 0FBH, 0FBH
	DB  0FCH, 0FDH, 0FDH, 0FDH, 0FEH, 0FEH, 0FEH, 0FEH
	DB  0FFH, 0FEH, 0FEH, 0FEH, 0FEH, 0FDH, 0FDH, 0FDH
	DB  0FCH, 0FBH, 0FBH, 0FAH, 0F9H, 0F8H, 0F7H, 0F6H
	DB  0F5H, 0F4H, 0F2H, 0F1H, 0EFH, 0EEH, 0ECH, 0EBH
	DB  0E9H, 0E7H, 0E5H, 0E4H, 0E2H, 0E0H, 0DEH, 0DBH
	DB  0D9H, 0D7H, 0D5H, 0D2H, 0D0H, 0CEH, 0CBH, 0C9H
	DB  0C6H, 0C3H, 0C1H, 0BEH, 0BBH, 0B9H, 0B6H, 0B3H
	DB  0B0H, 0ADH, 0AAH, 0A7H, 0A4H, 0A1H, 09EH, 09BH
	DB  098H, 095H, 092H, 08FH, 08CH, 089H, 086H, 083H
	DB  7FH, 7CH, 79H, 76H, 73H, 70H, 6DH, 6AH
	DB  67H, 64H, 61H, 5EH, 5BH, 58H, 55H, 52H
	DB  4FH, 4CH, 49H, 46H, 44H, 41H, 3EH, 3BH
	DB  39H, 36H, 34H, 31H, 2FH, 2CH, 2AH, 28H
	DB  26H, 23H, 21H, 1FH, 1DH, 1BH, 19H, 18H
	DB  16H, 14H, 12H, 11H, 0FH, 0EH, 0DH, 0BH
	DB  0AH, 09H, 08H, 07H, 06H, 05H, 04H, 03H
	DB  03H, 02H, 02H, 01H, 01H, 01H, 01H, 00H
	DB  00H, 00H, 01H, 01H, 01H, 01H, 02H, 02H
	DB  03H, 03H, 04H, 05H, 06H, 07H, 08H, 09H
	DB  0AH, 0BH, 0DH, 0EH, 0FH, 11H, 12H, 14H
	DB  16H, 18H, 19H, 1BH, 1DH, 1FH, 21H, 23H
	DB  26H, 28H, 2AH, 2CH, 2FH, 31H, 34H, 36H
	DB  39H, 3BH, 3EH, 41H, 44H, 46H, 49H, 4CH
	DB  4FH, 52H, 55H, 58H, 5BH, 5EH, 61H, 64H
	DB  67H, 6AH, 6DH, 70H, 73H, 76H, 79H, 7CH
;-----------------------
DELAY:		    		; 延时子程序
	MOV    	R6, #2		; 1 ; 127
	MOV    	R7, #200
	DJNZ	R7, $		; 内循环200遍
	DJNZ	R6, $ - 4	; 外循环127遍
	RET
;--------------------------------------------
END

  确实是个正弦波。

  想要改变波形的形状,修改程序中的数据表内容即可。
  想要改变波形的周期,修改程序中的延时子程序即可。


--本文完--
 

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,这是一个关于模拟电路设计的问题。DAC0832是一个8位数模数转换器,它可以将数字信号转换成模拟电压信号输出。要实现从0V开始逐渐上升到5V在降至0V的三角波电压,需要将DAC0832的数字输入端连接到一个计数器上,然后通过计数器的输出信号控制DAC0832输出电压值。 具体实现步骤如下: 1. 将DAC0832的引脚WR、CS、LDAC、REFBUF分别连接到控制器或微处理器、片选信号、锁存信号和参考电压缓冲器。 2. 将DAC0832的A、B引脚连接到一个运算放大器的反向输入端,将运算放大器的正向输入端接地。 3. 将DAC0832的数字输入端连接到一个计数器的输出端。计数器的输出信号可以是一个逐渐增加的数字序列,可以通过改变计数器的计数范围和时钟频率来控制三角波的频率和幅度。 4. 计算DAC0832输出电压值。DAC0832输出电压值可以通过以下公式计算: Vout = (Vin / 256) * D 其中,Vin是DAC0832的参考电压,通常为2.5V或5V;D是DAC0832的数字输入值,范围为0-255。 5. 将计算出的DAC0832输出电压值传输到运算放大器,然后输出到三角波的输出端。 6. 循环输出三角波信号。可以通过在控制器或微处理器中编写一个循环程序来实现。 希望以上步骤对您有所帮助。需要注意的是,这只是一个简单的实现方案,具体的电路设计和参数设置需要根据实际需求进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值