TLC549Proteus仿真&Sallen-Key滤波器&AD736Vrms到DC转换&Proteus查看51寄存器值

如题,本篇博客是讲了4块内容,但是只通过一个小实验就解决了!
原来是有道作业题说要用51和TLC549测低通电压有效值,寻思着要用有效值到DC转换,所以用了AD736芯片仿真。

Sallen-Key低通滤波原理

(虽然百度也可以搜,但是作为本人最方便的资料库,顺便也写了)。
TLC549Proteus仿真&Sallen-Key滤波器&AD736Vrms到DC转换&Proteus查看51寄存器值_第1张图片
传函:是个二阶的低通滤波
TLC549Proteus仿真&Sallen-Key滤波器&AD736Vrms到DC转换&Proteus查看51寄存器值_第2张图片

参数选择和电路连接

稍微提一下,不知道是因为仿真原因还是真是这样,输入1Hz的信号AD736就仿不出来,加了10Hz就好了,然后RC选的是1k和10uF,按照上面的公式算出来就是w0=100(rad/s)。

然后输入正弦,幅值1V,滤波输出幅值0.7V左右,有效值0.5V左右。
TLC549Proteus仿真&Sallen-Key滤波器&AD736Vrms到DC转换&Proteus查看51寄存器值_第3张图片
AD736的接法如上。
电压探针上看确实是0.5V左右。
后面就是AD736输出端接AIN,P1.5接DO,P1.6接SCK,P1.7接CS非,两个电容是滤波用的。
TLC549Proteus仿真&Sallen-Key滤波器&AD736Vrms到DC转换&Proteus查看51寄存器值_第4张图片
整个电路差不多这样:
TLC549Proteus仿真&Sallen-Key滤波器&AD736Vrms到DC转换&Proteus查看51寄存器值_第5张图片

仿真过程和结果

用Proteus查看寄存器很简单,因为我这里是循环运行,不需要运行到哪一步停下来,所以先点左下方的运行,然后点调试(debug)下拉列表里的暂停,然后移动光标到8051CPU这里:
TLC549Proteus仿真&Sallen-Key滤波器&AD736Vrms到DC转换&Proteus查看51寄存器值_第6张图片
跳出来的东西里选寄存器(Register),当然你要看其它可以点别的很方便。
转换结果理论上是1AH:
在这里插入图片描述
TLC549Proteus仿真&Sallen-Key滤波器&AD736Vrms到DC转换&Proteus查看51寄存器值_第7张图片
转换结果我是存在R6,可以看到仿真的结果和计算一毛一样,实验完成。

TLC549时序

书上说CS非拉低之后要等两个上升沿,我就信了,结果一开始我做出来的结果是68H,刚好是1AH的4倍,因为差了两个0,就是等这两个上升沿等出来的。
其实CS非拉低之后SCK高电平直接读8位就好了,CS非拉高之后需要等36个周期(书上说的,可能不一定,但是结果是没问题)。

程序

汇编写时序比C方便,C的话在集成上略微比汇编强,这里我用的当然是汇编:

	CS BIT P1.7
	SCK BIT P1.6
	DO BIT P1.5
	ORG 0000H
	START:SETB CS
	CLR SCK
	SETB DO
ADC:MOV A,#0
	MOV R0,#08H
	CLR CS
	CLR SCK
	LP1:CPL SCK
	NOP
	MOV C,DO
	RLC A
	CPL SCK
	NOP
	DJNZ R0,LP1
	SETB CS
	MOV R6,A
	MOV R0,#48H
	LP4:CPL SCK
	NOP
	DJNZ R0,LP4
	AJMP ADC
	END

你可能感兴趣的:(微机和嵌入式)