最新日志

发表于:2007-8-21 17:00:29
标签:无标签

1

集成运放芯片资料简介

集成运放芯片资料简介
 

AD824 JFET输入,单电源,低电压,低功耗,精密四运算放大器 MC33171 单电源,低电压,低功
耗运算放大器
AD826 低功耗,宽带,高速双运算放大器 MC33172 单电源,低电压,低功耗双运算放大器
AD827 低功耗,高速双运算放大器 MC33174 单电源,低电压,低功耗四运算放大器
AD828 低功耗,宽带,高速双运算放大器 MC33178 大电流,低功耗,低噪音双运算放大器
AD844 电流反馈型,宽带,高速运算放大器 MC33179 大电流,低功耗,低噪音四运算放大器
AD846 电流反馈型,高速,精密运算放大器 MC33181 JFET输入,低功耗运算放大器
AD847 低功耗,高速运算放大器 MC33182 JFET输入,低功耗双运算放大器
AD8531 COMS单电源,低功耗,高速运算放大器 MC33184 JFET输入,低功耗四运算放大器
AD8532 COMS单电源,低功耗,高速双运算放大器 MC33201 单电源,大电流,低电压运算放大器
AD8534 COMS单电源,低功耗,高速四运算放大器 MC33202 单电源,大电流,低电压双运算放大

AD9617 低失真,电流反馈型,宽带,高速,精密运算放大器 MC33204 单电源,大电流,低电压
四运算放大器
AD9631 低失真,宽带,高速运算放大器 MC33272 单电源,低电压,高速双运算放大器
AD9632 低失真,宽带,高速运算放大器 MC33274 单电源,低电压,高速四运算放大器
AN6550 低电压双运算放大器 MC33282 JFET输入,宽带,高速双运算放大器
AN6567 大电流,单电源双运算放大器 MC33284 JFET输入,宽带,高速四运算放大器
AN6568 大电流,单电源双运算放大器 MC33502 BIMOS,单电源,大电流,低电压,双运算放大器
BA718 单电源,低功耗双运算放大器 MC34071A 单电源,高速运算放大器
BA728 单电源,低功耗双运算放大器 MC34072A 单电源,高速双运算放大器
CA5160 BIMOS,单电源,低功耗运算放大器 MC34074A 单电源,高速四运算放大器
CA5260 BIMOS,单电源双运算放大器 MC34081 JFET输入,宽带,高速运算放大器
CA5420 BIMOS,单电源,低电压,低功耗运算放大器 MC34082 JFET输入,宽带,高速双运算放大

CA5470 BIMOS单电源四运算放大器 MC34084 JFET输入,宽带,高速四运算放大器
CLC400 电流反馈型,宽带,高速运算放大器 MC34181 JFET输入,低功耗运算放大器
CLC406 电流反馈型,低功耗,宽带,高速运算放大器 MC34182 JFET输入,低功耗双运算放大器
CLC410 电流反馈型,高速运算放大器 MC34184 JFET输入,低功耗四运算放大器
CLC415 电流反馈型,宽带,高速四运算放大器 MC35071A 单电源,高速运算放大器
CLC449 电流反馈型,宽带,高速运算放大器 MC35072A 单电源,高速双运算放大器
CLC450 电流反馈型,单电源,低功耗,宽带,高速运算放大器 MC35074A 单电源,高速四运算放
大器
CLC452 单电源,电流反馈型,大电流,低功耗,宽带,高速运算放大器 MC35081 JFET输入,宽
带,高速运算放大器
CLC505 电流反馈型,高速运算放大器 MC35082 JFET输入,宽带,高速双运算放大器
EL2030 电流反馈型,宽带,高速运算放大器 MC35084 JFET输入,宽带,高速四运算放大器
EL2030C 电流反馈型,宽带,高速运算放大器 MC35171 单电源,低电压,低功耗运算放大器
EL2044C 单电源,低功耗,高速运算放大器 MC35172 单电源,低电压,低功耗双运算放大器
EL2070 电流反馈型,宽带,高速运算放大器 MC35174 单电源,低电压,低功耗四运算放大器
EL2070C 电流反馈型,宽带,高速运算放大器 MC35181 JFET输入,低功耗运算放大器
EL2071C 电流反馈型,宽带,高速运算放大器 MC35182 JFET输入,低功耗双运算放大器
EL2073 宽带,高速运算放大器 MC35184 JFET输入,低功耗四运算放大器
EL2073C 宽带,高速运算放大器 MM6558 低电压,低失调电压,精密双运算放大器
EL2130C 电流反馈型,宽带,高速运算放大器 MM6559 低电压,低失调电压,精密双运算放大器
EL2150C 单电源,宽带,高速运算放大器 MM6560 低电压,低失调电压,精密双运算放大器
EL2160C 电流反馈型,宽带,高速运算放大器 MM6561 低功耗,低电压,低失调电压,精密双运
算放大器
EL2165C 电流反馈型,宽带,高速,精密运算放大器 MM6564 单电源,低电压,低功耗,低失调电
压,精密双运算放大器
EL2170C 单电源,电流反馈型,低功耗,宽带,高速运算放大器 MM6572 低噪音,低电压,低失调
电压,精密双运算放大器
EL2175C 电流反馈型,宽带,高速,精密运算放大器 NE5230 单电源,低电压运算放大器
EL2180C 单电源,电流反馈型,低功耗,宽带,高速运算放大器 NE5512 通用双运算放大器
EL2224 宽带,高速双运算放大器 NE5514 通用四运算放大器
EL2224C 宽带,高速双运算放大器 NE5532 低噪音,高速双运算放大器
EL2232 电流反馈型,宽带,高速双运算放大器 NE5534 低噪音,高速运算放大器
EL2232C 电流反馈型,宽带,高速双运算放大器 NJM2059 通用四运算放大器
EL2250C 单电源,宽带,高速双运算放大器 NJM2082 JFET输入,高速双运算放大器
EL2260C 电流反馈型,宽带,高速双运算放大器 NJM2107 低电压,通用运算放大器
EL2270C 单电源,电流反馈型,低功耗,宽带,高速双运算放大器 NJM2112 低电压,通用四运算
放大器
EL2280C 单电源,电流反馈型,低功耗,宽带,高速双运算放大器 NJM2114 低噪音双运算放大

EL2424 宽带,高速四运算放大器 NJM2115 低电压,通用双运算放大器
EL2424C 宽带,高速四运算放大器 NJM2119 单电源,精密双运算放大器
EL2444C 单电源,低功耗,高速四运算放大器 NJM2122 低电压,低噪音双运算放大器
EL2450C 单电源,宽带,高速四运算放大器 NJM2130F 低功耗运算放大器
EL2460C 电流反馈型,宽带,高速四运算放大器 NJM2132 单电源,低电压,低功耗双运算放大

EL2470C 单电源,电流反馈型,低功耗,宽带,高速四运算放大器 NJM2136 低电压,低功耗,宽
带,高速运算放大器
EL2480C 单电源,电流反馈型,低功耗,宽带,高速四运算放大器 NJM2137 低电压,低功耗,宽
带,高速双运算放大器
HA-2640 高耐压运算放大器 NJM2138 低电压,低功耗,宽带,高速四运算放大器
HA-2645 高耐压运算放大器 NJM2140 低电压双运算放大器
HA-2839 宽带,高速运算放大器 NJM2141 大电流,低电压双运算放大器
HA-2840 宽带,高速运算放大器 NJM2147 高耐压,低功耗双运算放大器
HA-2841 宽带,高速运算放大器 NJM2162 JFET输入,低功耗,高速双运算放大器
HA-2842 宽带,高速运算放大器 NJM2164 JFET输入,低功耗,高速四运算放大器
HA-4741 通用四运算放大器 NJM3404A 单电源,通用双运算放大器
HA-5020 电流反馈型,宽带,高速运算放大器 NJM3414 单电源,大电流双运算放大器
HA-5127 低噪音,低失调电压,精密运算放大器 NJM3415 单电源,大电流双运算放大器
HA-5134 低失调电压,精密四运算放大器 NJM3416 单电源,大电流双运算放大器
HA-5137 低噪音,低失调电压,高速,精密运算放大器 NJM4556A 大电流双运算放大器
HA-5142 单电源,低功耗双运算放大器 NJM4580 低噪音双运算放大器
HA-5144 单电源,低功耗四运算放大器 NJU7051 CMOS单电源,低功耗,低电压,低失调电压运
算放大器
HA-5177 低失调电压,精密运算放大器 NJU7052 CMOS单电源,低功耗,低电压,低失调电压双
运算放大器
HA-5221 低噪音,精密运算放大器 NJU7054 CMOS单电源,低功耗,低电压,低失调电压四运算
放大器
HA-5222 低噪音,精密双运算放大器 NJU7061 CMOS单电源,低功耗,低电压,低失调电压运算
放大器
HA-7712 BIMOS,单电源,低功耗,精密运算放大器 NJU7062 CMOS单电源,低功耗,低电压,低失
调电压双运算放大器
HA-7713 BIMOS,单电源,低功耗,精密运算放大器 NJU7064 CMOS单电源,低功耗,低电压,低失
调电压四运算放大器
HA16118 CMOS单电源,低电压,低功耗双运算放大器 NJU7071 CMOS单电源,低功耗,低电压,低
失调电压运算放大器
AD704 低偏置电流,低功耗,低失调电压,精密四运算放大器 MAX430 CMOS单电源运算放大器
AD705 低偏置电流,低功耗,低失调电压,精密运算放大器 MAX432 CMOS单电源运算放大器
AD706 低偏置电流,低功耗,低失调电压,精密双运算放大器 MAX4330 单电源,低电压,低功耗
运算放大器
AD707 低失调电压,精密运算放大器 MAX4332 单电源,低电压,低功耗双运算放大器
AD708 低失调电压,精密双运算放大器 MAX4334 单电源,低电压,低功耗四运算放大器
AD711 JFET输入,高速,精密运算放大器 MAX473 单电源,低电压,宽带,高速运算放大器
AD712 JFET输入,高速,精密双运算放大器 MAX474 单电源,低电压,宽带,高速双运算放大器
AD713 JFET输入,高速,精密四运算放大器 MAX475 单电源,低电压,宽带,高速四运算放大器
AD744 JFET输入,高速,精密运算放大器 MAX477 宽带,高速运算放大器
AD745 JFET输入,低噪音,高速运算放大器 MAX478 单电源,低功耗,精密双运算放大器
AD746 JFET输入,高速,精密双运算放大器 MAX478A 单电源,低功耗,精密双运算放大器
AD795 JFET输入,低噪音,低功耗,精密运算放大器 MAX479 单电源,低功耗,精密四运算放大

AD797 低噪音运算放大器 MAX479A 单电源,低功耗,精密四运算放大器
AD8002 电流反馈型,低功耗,宽带,高速双运算放大器 MAX480 单电源,低功耗,低电压,低失
调电压,精密运算放大器
AD8005 电流反馈型,低功耗,宽带,高速双运算放大器 MAX492C 单电源,低功耗,低电压,精密
双运算放大器
AD8011 电流反馈型,低功耗,宽带,高速运算放大器 MAX492E 单电源,低功耗,低电压,精密双
运算放大器
AD8031 单电源,低功耗,高速运算放大器 MAX492M 单电源,低功耗,低电压,精密双运算放大

AD8032 单电源,低功耗,高速双运算放大器 MAX494C 单电源,低功耗,低电压,精密四运算放
大器
AD8041 单电源,宽带,高速运算放大器 MAX494E 单电源,低功耗,低电压,精密四运算放大器
AD8042 单电源,宽带,高速双运算放大器 MAX494M 单电源,低功耗,低电压,精密四运算放大

AD8044 单电源,宽带,高速四运算放大器 MAX495C 单电源,低功耗,低电压,精密运算放大器
AD8047 宽带,高速运算放大器 MAX495E 单电源,低功耗,低电压,精密运算放大器
AD8055 低功耗,宽带,高速运算放大器 MAX495M 单电源,低功耗,低电压,精密运算放大器
AD8056 低功耗,宽带,高速双运算放大器 MC1458 通用双运算放大器
AD8072 电流反馈型,宽带,高速双运算放大器 MC1458C 通用双运算放大器
AD812 电流反馈型,低电压,低功耗,高速双运算放大器 MC33071A 单电源,高速运算放大器
AD817 低功耗,宽带,高速运算放大器 MC33072A 单电源,高速双运算放大器
AD818 低功耗,宽带,高速运算放大器 MC33074A 单电源,高速四运算放大器
AD820 JFET输入,单电源,低电压,低功耗,精密运算放大器 MC33078 低噪音双运算放大器
AD822 JFET输入,单电源,低电压,低功耗,精密双运算放大器 MC33079 低噪音四运算放大器
AD823 JFET输入,单电源,低电压,低功耗,精密,高速双运算放大器 MC33102 低功耗双运算放
大器
HA16119 CMOS单电源,低电压,低功耗双运算放大器 NJU7072 CMOS单电源,低功耗,低电压,低
失调电压双运算放大器
HFA1100 电流反馈型,宽带,高速运算放大器 NJU7074 CMOS单电源,低功耗,低电压,低失调电
压四运算放大器
HFA1120 电流反馈型,宽带,高速运算放大器 OP-07 低漂移,精密运算放大器
HFA1205 电流反馈型,低功耗,宽带,高速双运算放大器 OP-113 BICMOS单电源,低噪音,低失
调电压,精密运算放大器
HFA1245 电流反馈型,低功耗,宽带,高速双运算放大器 OP-150 COMS,单电源,低电压,低功耗
ICL7611 CMOS低电压,低功耗运算放大器 OP-160 电流反馈型,高速运算放大器
ICL7612 CMOS低电压,低功耗运算放大器 OP-162 单电源,低电压,低功耗,高速,精密运算放
大器
ICL7621 CMOS低电压,低功耗双运算放大器 OP-177 低失调电压,精密运算放大器
ICL7641 CMOS低电压四运算放大器 OP-183 单电源,宽带运算放大器
ICL7642 CMOS低电压,低功耗四运算放大器 OP-184 单电源,低电压,高速,精密运算放大器
ICL7650S 稳压器 OP-191 单电源,低电压,低功耗运算放大器
LA6500 单电源,功率OP放大器 OP-193 单电源,低电压,低功耗,精密运算放大器
LA6501 单电源,功率OP放大器 OP-196 单电源,低电压,低功耗运算放大器
LA6510 2回路单电源功率OP放大器 OP-200 低功耗,低失调电压,精密双运算放大器"
LA6512 高压,功率OP放大器双运算放大器 OP-213 BICMOS单电源,低噪音,低失调电压,精密
双运算放大器
LA6513 高压,功率OP放大器双运算放大器 OP-250 COMS,单电源,低电压,低功耗双运算放大

LA6520 单电源,功率OP放大器三运算放大器 OP-260 电流反馈型,高速双运算放大器
LF356 JFET输入,高速运算放大器 OP-262 单电源,低电压,低功耗,高速,精密双运算放大器
LF356A JFET输入,高速运算放大器 OP-27 低噪音,低失调电压,精密运算放大器
LF411 JFET输入,高速运算放大器 OP-270 低噪声,低失调电压,精密双运算放大器
LF411A JFET输入,高速运算放大器 OP-271 精密双运算放大器
LF412 JFET输入,高速双运算放大器 OP-275 高速双运算放大器
LF412A JFET输入,高速双运算放大器 OP-279 单电源,大电流双运算放大器
LF441 低功耗,JFET输入运算放大器 OP-282 JFET输入,低功耗双运算放大器
LF441A 低功耗,JFET输入运算放大器 OP-283 单电源,宽带双运算放大器
LF442 低功耗,JFET输入双运算放大器 OP-284 单电源,低电压,高速,精密双运算放大器
LF442A 低功耗,JFET输入双运算放大器 OP-290 单电源,低功耗,精密双运算放大器
LF444 低功耗,JFET输入四运算放大器 OP-291 单电源,低电压,低功耗双运算放大器
LF444A 低功耗,JFET输入四运算放大器 OP-292 BICMOS单电源,通用双运算放大器
LM2902 单电源四运算放大器 OP-293 单电源,低电压,低功耗,精密双运算放大器
LM2904 单电源双运算放大器 OP-295 BICMOS低功耗,精密双运算放大器
LM324 单电源四运算放大器 OP-296 单电源,低电压,低功耗双运算放大器
LM358 单电源双运算放大器 OP-297 低电压,低功耗,低漂移,精密双运算放大器
LM4250 单程控、低功耗运算放大器 OP-37 低噪音,低失调电压,高速,精密运算放大器
LM607 低失调电压,精密运算放大器 OP-400 低功耗,低失调电压,精密四运算放大器
LM6118 宽带,高速双运算放大器 OP-413 BICMOS单电源,低噪音,低失调电压,精密四运算放
大器

点击此处查看原文 >>

系统分类: 消费电子   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(1423)
发表于:2007-8-21 16:58:45
标签:无标签

0

A/D转换芯片ADC0832的应用

A/D转换芯片ADC0832的应用

ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换
芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,
其目前已经有很高的普及率。学习并使用ADC0832 可是使我们了解A/D转换器
的原理,有助于我们单片机技术水平的提高。
ADC0832 具有以下特点:
· 8位分辨率;
· 双通道A/D转换;
· 输入输出电平与TTL/CMOS相兼容;
· 5V电源供电时输入电压在0~5V之间;
· 工作频率为250KHZ,转换时间为32μS;
· 一般功耗仅为15mW;
· 8P、14P—DIP(双列直插)、PICC 多种封装;
· 商用级芯片温宽为0°C to +70°C,工业级芯片温宽为.40°C to +85°C;
芯片顶视图:(图1、图2)
点击看大图


图1 图2

-DYDIYE-
mail:DYDIY@126.COM 第 2 页
芯片接口说明:
· CS_ 片选使能,低电平芯片使能。
· CH0 模拟输入通道0,或作为IN+/-使用。
· CH1 模拟输入通道1,或作为IN+/-使用。
· GND 芯片参考0 电位(地)。
· DI 数据信号输入,选择通道控制。
· DO 数据信号输出,转换数据输出。
· CLK 芯片时钟输入。
· Vcc/REF 电源输入及参考电压输入(复用)。
ADC0832 与单片机的接口电路:

点击看大图


图3

-DYDIYE-
mail:DYDIY@126.COM 第 3 页
ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应
一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟
电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据
校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使
多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现
通道功能的选择。
单片机对ADC0832 的控制原理:
正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、
DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双
向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。(见图3)
当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和
DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并
且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯
片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的
数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。
在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能,其功能项
见表1。

点击看大图


表1     

-DYDIYE-
mail:DYDIY@126.COM 第 4 页
如表1 所示,当此2 位数据为“1”、“0”时,只对CH0 进行单通道转换。
当2位数据为“1”、“1”时,只对CH1进行单通道转换。当2 位数据为“0”、
“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当2 位
数据为“0”、“1”时,将CH0作为负输入端IN-,CH1 作为正输入端IN+进行
输入。
到第3 个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI
端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下沉开始由DO
端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。
直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。也正是
从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATD0。
随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的
结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。
更详细的时序说明请见表2。

点击看大图


表2

-DYDIYE-
mail:DYDIY@126.COM 第 5 页
作为单通道模拟信号输入时ADC0832的输入电压是0~5V且8位分辨率时
的电压精度为19.53mV。如果作为由IN+与IN-输入的输入时,可是将电压值设
定在某一个较大范围之内,从而提高转换的宽度。但值得注意的是,在进行IN+
与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为
00H。
ADC0832 芯片接口程序的编写:
ADC0832 数据读取程序流程:
为了高速有效的实现通信,我们采用汇编
语言编写接口程序。由于ADC0832 的数据转
换时间仅为32μS,所以A/D转换的数据采样
频率可以很快,从而也保证的某些场合对A/D
转换数据实时性的要求。数据读取程序以子程
序调用的形式出现,方便了程序的移植。
程序占用资源有累加器A,工作寄存器R7,
通用寄存器B 和特殊寄存器CY。通道功能寄
存器和转换值共用寄存器B。在使用转换子程
序之前必须确定通道功能寄存器B 的值,其赋
值语句为“MOV B,#data”(00H~03H)。运
行转换子程序后的转换数据值被放入B 中。子
程序退出后即可以对B 中数据处理。


ADC0832 芯片接口程序[汇编]:

-DYDIYE-
mail:DYDIY@126.COM 第 6 页
/*-------------------------------------------
子程序名: ADC0832子程序
编写人: 杜洋
初写时间: 2005年10 月10日
程序功能: 将模拟电压量转换成数字量
实现方法: 串行通信。
CPU说明: MCS-51
植入说明: 占用A、B、CY、R7
-------------------------------------------*/
;以下接口定义根据硬件连线更改
ADCS BIT P3.5 ;使能接口
ADCLK BIT P3.4 ;时钟接口
ADDO BIT P3.3 ;数据输出接口(复用)
ADDI BIT P3.3 ;数据输入接口
;以下语句在调用转换程序前设定
MOV B,#00H ;装入通道功能选择数据值
;以下为ADC0832读取数据子程序
;==== ADC0832读数据子程序====
ADCONV:
SETB ADDI ;初始化通道选择  
NOP
NOP
CLR ADCS ;拉低/CS端
NOP
NOP
SETB ADCLK ;拉高CLK端
NOP
NOP
CLR ADCLK ;拉低CLK端,形成下降沿
MOV A,B
MOV C,ACC.1 ;确定取值通道选择
MOV ADDI,C
NOP
NOP
SETB ADCLK ;拉高CLK端
NOP
NOP
CLR ADCLK ;拉低CLK端,形成下降沿2
MOV A,B
MOV C,ACC.0 ;确定取值通道选择
MOV ADDI,C
NOP

NOP
SETB ADCLK ;拉高CLK端
NOP
NOP
CLR ADCLK ;拉低CLK端,形成下降沿3
SETB ADDI
NOP
NOP
MOV R7,#8 ;准备送下后8个时钟脉冲
AD_1:
MOV C,ADDO ;接收数据
MOV ACC.0,C
RL A ;左移一次
SETB ADCLK
NOP
NOP
CLR ADCLK ;形成一次时钟脉冲
NOP
NOP
DJNZ R7,AD_1 ;循环8次
MOV C,ADDO ;接收数据    接收数据的最后一位
MOV ACC.0,C
MOV B,A
MOV R7,#8
AD_13:
MOV C,ADDO ;接收数据
MOV ACC.0,C
RR A ;右移一次
SETB ADCLK
NOP
NOP
CLR ADCLK ;形成一次时钟脉冲
NOP
NOP
DJNZ R7,AD_13 ;循环8次
CJNE A,B,ADCONV ;数据校验
SETB ADCS ;拉高/CS端
CLR ADCLK ;拉低CLK端
SETB ADDO ;拉高数据端,回到初始状态
RET
;====子程序结束====

2:44

点击此处查看原文 >>

系统分类: 消费电子   |    用户分类: 无分类    |    来源: 转贴

评论(3) | 阅读(1280)
发表于:2007-8-21 16:56:26
标签:无标签

0

步进电机模块

步进电机模块
 


点击看大图

点击看大图

原理图:
点击看大图


两相六线步进电机,步进角7.5度,额定工作电压12V,完全可以使用5V做实验。

以下是引用 gguoqing2006-6-11 15:10:02 的发言:

使用伟纳定做的20CM杜邦头实验连接线,可以很方便的将ME300与步进电机模块连接起来。

http://www.willar.com/shop_view.asp?id=47

在ME300B上使用时,可从J7上引出5V电源到步进电机模块J1上。

将J1(ICE)上的P1.0-P1.3用杜邦头实验连接线连接到步进电机模块J2上。


  
产品详情:

    
http://www.willar.com/shop_view.asp?id=48



以下是本站管理员gguoqing专门编写的演示程序。

C语言范例:
/*******************************************************************
/*                                                                
/* ME300系列单片机开发系统演示程序-步进电机键控正反转实验   
/*                                                                
/* 邮箱: gguoqing@willar.com                                
/* 网站: http://www.willar.com ;                                  
/* 作者: gguoqing                                                
/* 时间: 2006/05/30                                              
/*                                                                
/*【版权】COPYRIGHT(C)伟纳电子 www.willar.com ALL RIGHTS RESERVED
/*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!      
/*                                                                
/******************************************************************/
    
#include <reg51.h>        //51芯片管脚定义头文件
#include <intrins.h>        //内部包含延时函数 _nop_();

#define uchar unsigned char
#define uint   unsigned int

uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};

sbit   K1    = P1^4;          //正转
sbit   K2    = P1^5;          //反转
sbit   K3    = P1^6;          //停止
sbit   K4    = P1^7;
sbit   BEEP = P3^7;        //蜂鸣器
      
/********************************************************/
/*                                                  
/* 延时t毫秒
/* 11.0592MHz时钟,延时约1ms                                     
/*                                                      
/********************************************************/
void delay(uint t)
{                           
    uint k;
    while(t--)
    {
      for(k=0; k<125; k++)
      { }
    }
}

/**********************************************************/
void delayB(uchar x)     //x*0.14MS
{
    uchar i;
    while(x--)
    {
      for (i=0; i<13; i++)
      { }
    }
}

/**********************************************************/
void beep()
{
    uchar i;
    for (i=0;i<100;i++)
     {
      delayB(4);
      BEEP=!BEEP;                  //BEEP取反
     }
      BEEP="1";                         //关闭蜂鸣器
}

/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void   motor_ffw()
{
    uchar i;
    uint   j;
    for (j=0; j<12; j++)             //转1*n圈
     {
     if(K4==0)
         {break;}                         //退出此循环程序
       for (i=0; i<8; i++)          //一个周期转30度
         {
           P1 = FFW[ i ];               //取数据
           delay(15);                  //调节转速
         }
     }
}

/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void   motor_rev()
{
      uchar i;
uint   j;
for (j=0; j<12; j++)                //转1×n圈
       {
     if(K4==0)
          {break;}                              //退出此循环程序
         for (i=0; i<8; i++)             //一个周期转30度
         {
           P1 = REV[ i ];                     //取数据
           delay(15);                        //调节转速
         }
       }
}

/********************************************************
*                                                       
*   主程序                                               
*                                                      
*********************************************************/

main()
{
       uchar r,N=5;              //N 步进电机运转圈数
    while(1)
     {  
       if(K1==0)
   {
         beep();
for(r=0;r<N;r++)
          {
    motor_ffw();                  //电机正转
    if(K4==0)
           {beep();break;}     //退出此循环程序
      }
       }
   else if(K2==0)
        {
     beep();
for(r=0;r<N;r++)
          {
        motor_rev();              //电机反转
    if(K4==0)
           {beep();break;}     //退出此循环程序
}
        }
   else  
P1 = 0xf0;
     }
}


汇编语言范例

;/*****************************************************************
;/*                                                                                                                               
;/* ME300系列单片机开发系统演示程序 - 步进电机键控正反转实验
;/*                                                                                                                                
;/*                                                                                                                                
;/* 邮箱:   gguoqing@willar.com                                                                                    
;/* 网站: http://www.willar.com ;                                                                               
;/* 作者: gguoqing                                                                                                     
;/* 时间: 2006/05/30                                                                                                 
;/*                                                                                                                                
;/*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved                          
;/*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!                            
;/*                                                                                                                                 
;/******************************************************************


; 步进电机步进角为 7.5度,一圈 360 度。
; 双四拍工作方式:
; AB-BC-CD-DA (即一个脉冲,转 7.5 度)
; 单双八拍工作方式:
; A-AB-B-BC-C-CD-D-DA (即一个脉冲,转 3.75 度)
; 一个取数工作周期,步进电机转30度
; 步进电机转一圈需要12个取数工作周期
;-------------------------------------------------------
; A组线圈对应 P1.0     (桔色)
; B组线圈对应 P1.1     (棕色)
; C组线圈对应 P1.2     (黄色)
; D组线圈对应 P1.3     (黑色)
;-------------------------------------------------------
          K1   BIT   P1.4      ;步进电机正转
          K2   BIT   P1.5      ;步进电机反转
          K3   BIT   P1.6
          K4   BIT   P1.7      ;步进电机停止转动
        BEEP   BIT   P3.7
;-------------------------------------------------------
            ORG 0000H
            LJMP MAIN
            ORG 0030H
;-------------------------------------------------------
MAIN:
            MOV   SP,#60H
            MOV   P1,#0F0H    ;关闭步进电机,键输入线置高
MAIN1:           
            JB   K1,MAIN2
            ACALL   BEEP_BL    ;步进电机正转
            ACALL   FFW          
MAIN2:           
            JB   K2,MAIN1
            ACALL   BEEP_BL    ;步进电机反转
            ACALL   REV                     
            JMP   MAIN1
;------------------------正转-------------------------           
FFW:
            ;MOV R3,#12          ;7.5度电机正转1圈共12个周期
            MOV   R3,#60          ;转5圈
FFW1:
            MOV R0,#00H
FFW2:
            JB   K4,FFW3          ;终止步进电机运行
            ACALL   BEEP_BL
            JMP   FFW4
FFW3:           
            MOV P1,#0F0H
            MOV A,R0
            ;MOV DPTR,#TABLE_F   ;选择工作方式
            MOV DPTR,#TABLE1
            MOVC A,@A+DPTR
            MOV P1,A
            LCALL DELAY
            INC R0
            CJNE   A,#0FFH,FFW2
            DJNZ R3,FFW1
FFW4:
            MOV P1,#0F0H
            RET
;---------------------------反转--------------------------
REV:
            ;MOV R3,#12          ;7.5度电机反转1圈共12个周期
            MOV   R3,#60          ;转5圈
REV1:
            MOV R0,#00H
REV2:
            JB   K4,REV3           ;终止步进电机运行
            ACALL   BEEP_BL
            JMP   REV4
REV3:
            MOV P1,#0F0H
            MOV A,R0
           ; MOV DPTR,#TABLE_R    ;选择工作方式
            MOV DPTR,#TABLE2
            MOVC A,@A+DPTR
            MOV P1,A
            CALL DELAY
            INC R0
            CJNE   A,#0FFH,REV2
            DJNZ R3,REV1
REV4:
            MOV P1,#0F0H
            RET
           
;-------------------------------------------------------
DELAY:
            MOV R7,#40        ;步进电机的转速
DEL1:       MOV R6,#248
            DJNZ R6,$
            DJNZ R7,DEL1
            RET
;-------------------------------------------------------
DELAY1:
            MOV    R5,#20      ;2S 延时子程序
DEL2:
            MOV    R7,#200
DEL3:
            MOV    R6,#250
            DJNZ   R6,$
            DJNZ   R7,DEL3
            DJNZ   R5,DEL2
            RET
;-------------------------------------------------------
; 单双八拍工作方式
TABLE_F:   ;正转表
           DB   0F1H,0F3H,0F2H,0F6H,0F4H,0FCH,0F8H,0F9H
           DB   0FFH
TABLE_R:   ;反转表
           DB   0F9H,0F8H,0FCH,0F4H,0F6H,0F2H,0F3H,0F1H
           DB   0FFH
;-------------------------------------------------------
; 双四拍工作方式:
TABLE1:
         DB    0F3H,0F6H,0FcH,0F9H   ;正转表
         DB    0FFH   ;正转结束
TABLE2:
         DB    0F9H,0FCH,0F6H,0F3H   ;反转表
         DB    0FFH   ;反转结束
;--------------------------------------------------------
;蜂鸣器响一声子程序
;--------------------------------------------------------
BEEP_BL:
          MOV   R6,#100
   BL1:
          CALL   DEX1
          CPL   BEEP
          DJNZ   R6,BL1
          RET
DEX1:
          MOV   R7,#180
DEX2:
          NOP
          DJNZ   R7,DEX2
          RET
;---------------------------------------------------------
          END




演示程序打包下载

程序包中有简单的正反转演示程序和键控演示程序,分别用汇编和C语言编写,共4个范例:


此内容需要回复才能浏览




步进电机加速启动演示程序:

http://www.willar.com/forum_view.asp?forum_id=18&view_id=8485


四相步进电机:

齿距角: Qz = 2π/ Z    Z --- 转子的齿数

步距角---转子走一步所转过的角度

步距角: Qn = Qz/N = 2π/NZ   N --- 步进电机工作拍数

步进电机转速:

   n = 60×f / N×Z    (转/分)   ; f =脉冲频率(Hz)

对于步距角为7.5度的步进电机而言:

Qn = 7.5度

Qz = Qn×N = 7.5×4=30度 (齿距角)

Z   =   2π/Qz = 360/30 = 12 (转子的齿数)

四相步进电机有三种运行状态:

1、步进电机为四相单四拍运行状态:
当电机绕组通电时序为A-B-C-D时为正转,通电时序为D-C-B-A时为反转。
N = 4
步距角: Qn = Qz/N = 2π/NZ =360/4*12=7.5°
则步进电机转一圈所需步进数: 360°/   7.5°=48 (步进数)

2、步进电机为四相双四拍运行状态:
当电机绕组通电时序为AB-BC-CD-DA时为正转,通电时序为DA-CD-BC-AB时为反转。
N = 4
步距角: Qn = Qz/N = 2π/NZ =360/4*12=7.5°
则步进电机转一圈所需步进数: 360°/   7.5°=48 (步进数)

3、步进电机为四相八拍运行状态。
当电机绕组通电时序为A-AB-B-BC-C-CD-D-DA时为正转,通电时序为DA-D-CD-C-BC-B-BA-A时为反转。
N = 8
步距角: Qn = Qz/N = 2π/NZ =360/8*12=3.75°
则步进电机转一圈所需步进数: 360°/   3.75°=96 (步进数)

http://www.willar.com/forum_view.asp?forum_id=18&view_id=6604

点击此处查看原文 >>

系统分类: 消费电子   |    用户分类: 无分类    |    来源: 转贴

评论(6) | 阅读(1109)
发表于:2007-8-21 16:54:19
标签:无标签

2

关于用2003驱动步进电机的问题

关于用2003驱动步进电机的问题
 
在仿真的时候,通电后,单片机向2003送送信号,2003的输入端有信号输入,但是输出端不显示有信号输出,为什么会出现这种情况?仿真图如下图所示:
点击看大图
程序:ORG      0000H
STOP:    ORL    P1,#0FFH      ;步进电机停止
LOOP:    JNB    P1.0,FOR2      ;如果p1.0按下正转
                  JNB      P1.1,REV2      ;如果p1.1按下反转
                  JNB      P1.2,STOP1    ;如果p1.2按下停止?
                  JMP      LOOP          ;反复监测键盘
FOR:     LCALL XIAN
                  MOV      R0,#00H        ;正转到tab取码指针初值
FOR1:    CLR    A
           MOV      A,R0          ;取码
           MOV      DPTR,#TABLE  
           MOVC     A,@A+DPTR
                  JZ       FOR           ;是否到了结束码00H
         CPL    A
         MOV    P2,A          ;输出到p2开始正转
         JNB    P1.2,STOP1    ;如果p1.2按下停止
         JNB    P1.1,REV2     ;如果p1.1按下反转
         LCALL DELAY         ;转动的速度
              INC    R0            ;取下一个码
         JMP    FOR1          ;继续正转
REV: LCALL XIAN
                MOV    R0,#05H     ;反转到TAB取码指针初值
REV1: CLR    A
         MOV    A,R0          ;取码
         MOV    DPTR,#TABLE
         MOVC   A,@A+DPTR
         JZ     REV           ;是否到了结束码00H
                CPL    A
         MOV    P2,A          ;输出到p2开始反转
         JNB    P1.2,STOP1    ;如果p1.2按下停止
         JNB    P1.0,FOR2     ;如果p1.0按下正转
         LCALL DELAY         ;转动的速度
         INC    R0            ;取下一个码
         JMP    REV1          ;继续反转
STOP1:   LCALL DELAY         ;按p1.2的消除抖动
         JNB    P1.2,$        ;p1.2放开否?
         LCALL DELAY         ;放开消除抖动
                MOV    SCON,#0
                MOV    A,#0
         MOV    SBUF,A
         JNB    TI,$
         CLR    TI
         MOV    SBUF,A
         JNB    TI,$
         CLR    TI
         JMP    STOP
FOR2:                    LCALL DELAY         ;按p1.0的消除抖动
         JNB    P1.0,$        ;p1.0放开否
         LCALL DELAY         ;放开消除抖动
         JMP    FOR
REV2:                    LCALL DELAY         ;按p1.1的消除抖动
         JNB    P1.1,$        ;p1.1放开否
         LCALL DELAY         ;放开消除抖动
         JMP    REV
XIAN:                  MOV   SCON,#0 ; 允许接受数据
         MOV   DPTR,#S ;查表
                         CLR   A ;累加器清零
                         MOV   A,#7
                      MOVC A,@A+DPTR
         MOV SBUF,A ;
         JNB TI,$ ;
         CLR TI
         CLR A
         MOV A,#4
         MOVC A,@A+DPTR
         MOV SBUF,A ;
         JNB   TI,$ ;
         CLR   TI
                         RET
;DELAY1:    MOV   R1,#255        ;延时20ms
;D11: MOV   R2,#255
;          DJNZ R2,$
;              DJNZ R1,D11
DELAY:    MOV   R1,#40        ;延时20ms
D1: MOV   R2,#248
         DJNZ R2,$
                DJNZ R1,D1
         RET
S:       DB    3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H
TABLE:   DB    03H,09H,0CH,06H ; 正转表
         DB    00H            ; 正转结束
         DB    06H,0CH,09H,03H ; 反转表
         DB    00H            ; 反转结束
         END

点击此处查看原文 >>

系统分类: 消费电子   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(880)
发表于:2007-8-21 16:53:11
标签:无标签

0

math.h

math.h
 

C库函数手册---math.hstdlib.hstring.hfloat.h

数学函数,所在函数库为math.hstdlib.hstring.hfloat.h
int       abs(int i)                    
返回整型参数i的绝对值

double   cabs(struct complex znum)      
返回复数znum的绝对值
double   fabs(double x)                 
返回双精度参数x的绝对值
long     labs(long n)                   
返回长整型参数n的绝对值
double    exp(double x)                 
返回指数函数ex的值
double frexp(double value,int *eptr)   
返回value=x*2nx的值,n存贮在eptr
double ldexp(double value,int exp);    
返回value*2exp的值
double    log(double x)                 
返回logex的值
double log10(double x)                 
返回log10x的值
double    pow(double x,double y)        
返回xy的值
double pow10(int p)                    
返回10p的值
double   sqrt(double x)                 
返回+x的值
double   acos(double x)                 
返回x的反余弦cos-1(x),x为弧度
double   asin(double x)                 
返回x的反正弦sin-1(x),x为弧度
double   atan(double x)                 
返回x的反正切tan-1(x),x为弧度
double atan2(double y,double x)        
返回y/x的反正切tan-1(x),yx为弧度
double    cos(double x)                 
返回x的余弦cos(x),x为弧度
double    sin(double x)                 
返回x的正弦sin(x),x为弧度
double    tan(double x)                 
返回x的正切tan(x),x为弧度
double   cosh(double x)                 
返回x的双曲余弦cosh(x),x为弧度
double   sinh(double x)                 
返回x的双曲正弦sinh(x),x为弧度
double   tanh(double x)                 
返回x的双曲正切tanh(x),x为弧度
double hypot(double x,double y)        
返回直角三角形斜边的长度(z),
                                        x
y为直角边的长度
,z2=x2+y2
double   ceil(double x)                 
返回不小于x的最小整数

double floor(double x)                 
返回不大于x的最大整数
void    srand(unsigned seed)            
初始化随机数发生器
int      rand()                         
产生一个随机数并返回这个数
double   poly(double x,int n,double c[])
从参数产生一个多项式
double   modf(double value,double *iptr)
将双精度数value分解成尾数和阶
double   fmod(double x,double y)        
返回x/y的余数
double frexp(double value,int *eptr)   
将双精度数value分成尾数和阶
double   atof(char *nptr)               
将字符串nptr转换成浮点数并返回这个浮点数
double   atoi(char *nptr)               
将字符串nptr转换成整数并返回这个整数
double   atol(char *nptr)               
将字符串nptr转换成长整数并返回这个整数
char    *ecvt(double value,int ndigit,int *decpt,int *sign)
         
将浮点数value转换成字符串并返回该字符串
char    *fcvt(double value,int ndigit,int *decpt,int *sign)
         
将浮点数value转换成字符串并返回该字符串
char    *gcvt(double value,int ndigit,char *buf)
         
将数value转换成字符串并存于buf,并返回buf的指针
char   *ultoa(unsigned long value,char *string,int radix)
         
将无符号整型数value转换成字符串并返回该字符串,radix为转换时所用基数
char    *ltoa(long value,char *string,int radix)
         
将长整型数value转换成字符串并返回该字符串,radix为转换时所用基数
char    *itoa(int value,char *string,int radix)
         
将整数value转换成字符串存入string,radix为转换时所用基数
double atof(char *nptr)
将字符串nptr转换成双精度数,并返回这个数,错误返回0
int     atoi(char *nptr)
将字符串nptr转换成整型数,  并返回这个数,错误返回
0
long    atol(char *nptr)
将字符串nptr转换成长整型数,并返回这个数,错误返回
0
double strtod(char *str,char **endptr)
将字符串str转换成双精度数,并返回这个数
,
long    strtol(char *str,char **endptr,int base)
将字符串str转换成长整型数
,
                                               
并返回这个数
,
int           matherr(struct exception *e)
              
用户修改数学错误返回信息函数(没有必要使用
)
double        _matherr(_mexcep why,char *fun,double *arg1p,
                       double *arg2p,double retval)
                
用户修改数学错误返回信息函数(没有必要使用
)
unsigned int _clear87()   
清除浮点状态字并返回原来的浮点状态

void          _fpreset()   
重新初使化浮点数学程序包
unsigned int _status87()  
返回浮点状态字

点击此处查看原文 >>

系统分类: 消费电子   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(689)
发表于:2007-8-21 16:52:00
标签:无标签

0

C语言专题——标准库(转)

C语言专题——标准库<math.h>
 

1 三角函数

double sin (double);
double cos (double);
double tan (double);

2 反三角函数

double asin (double);     结果介于[-PI/2, PI/2]
double acos (double);     结果介于[0, PI]
double atan (double);     反正切(主值), 结果介于[-PI/2, PI/2]
double atan2 (double, double);    反正切(整圆值), 结果介于[-PI/2, PI/2]

3 双曲三角函数

double sinh (double);
double cosh (double);
double tanh (double);

4 指数与对数

double exp (double);
double pow (double, double);使用方法如pows(5,3)表示5开3次方根
powt(5,3)表示5的三次方,呵呵不过第二个参数只能是整数哦

double sqrt (double);
double log (double);     以e为底的对数
double log10 (double);

5 取整

double ceil (double);     取上整
double floor (double);     取下整

6 绝对值

double fabs (double);

7 标准化浮点数

double frexp (double f, int *p); 标准化浮点数, f = x * 2^p, 已知f求x, p ( x介于[0.5, 1] )
double ldexp (double x, int p); 与frexp相反, 已知x, p求f

8 取整与取余

double modf (double, double*);    将参数的整数部分通过指针回传, 返回小数部分
double fmod (double, double);    返回两参数相除的余数

点击此处查看原文 >>

系统分类: 消费电子   |    用户分类: 无分类    |    来源: 转贴

评论(0) | 阅读(579)
发表于:2007-8-21 16:49:47
标签:无标签

2

DDS芯片AD9850的工作原理及其与单片机的接口(转)

DDS芯片AD9850的工作原理及其与单片机的接口
 
摘要:介绍了美国AD公司采用先进的直接数字频率合成(DDS)技术推出的高集成度频率合成器AD9850的工作原理、主要特点及其与MCS51单片机的接口,并给出了接口电路图和部分源程序。

    关键词:直接数字频率合成(DDS) 控制字 控制时序 接口 AD9850

1 AD9850简介

随着数字技术的飞速发展,用数字控制方法从一个参考频率源产生多种频率的技术,即直接数字频率合成(DDS)技术异军突起。美国AD公司推出的高集成度频率合成器AD9850便是采用DDS技术的典型产品之一。

AD9850采用先地蝗CMOS工艺,其功耗在3.3V供电时仅为155mW,扩展工业级温度范围为-40~80℃,采用28脚SSOP表面封装形式。AD9850的引脚排列如图1所示,图2为其组成框图。图2中层虚线内是一个完整的可编程DDS系统,外层虚线内包含了AD9850的主要组成部分。

AD9850内含可编程DDS系统和高速比较器,能实现全数字编程控制的频率合成。可编程DDS系统的核心是相位累加器,它由一个加法器和一个N位相位寄存器组成,N一般为24~32。每来一个外部参考时钟,相位寄存器便以步长M递加。相位寄存器的输出与相位控制字相加后可输入到正弦查询表地址上。正弦查询表包含一个正弦波周期的数字幅度信息,每一个地址对应正弦波中0°~360°范围的一个相位点。查询表把输入地址的相位信息映射成正弦波幅度信号,然后驱动DAC以输出模式量。

相位寄存器每过2N/M个外部参考时钟后返回到初始状态一次,相位地正弦查询表每消费品一个循环也回到初始位置,从而使整个DDS系统输出一个正弦波。输出的正弦波周期To=Tc2N/M,频率fout=Mfc/2N,Tc、fc分别为外部参考时钟的周期和频率。

AD9850采用32位的相位累加器将信号截断成14位输入到正弦查询表,查询表的输出再被截断成10位后输入到DAC,DAC再输出两个互补的电流。DAC满量程输出电流通过一个外接电阻RSET调节,调节关系为ISET=32(1.148V/RSET),RSET的典型值是3.9kΩ。将DAC的输出经低通滤波后接到AD9850内部的高速比较器上即可直接输出一个抖动很小的方波。其系统功能如图3所示。

AD9850在接上精密时钟源和写入频率相位控制字之间后就可产生一个频率和相位都可编程控制的模拟正弦波输出,此正弦波可直接用作频率信号源或经内部的高速比较器转换为方波输出。在125MHz的时钟下,32位的频率控制字可使AD9850的输出频率分辨率达0.0291Hz;并具有5位相位控制位,而且允许相位按增量180°、90°、45°、22.5°、11.25°或这些值的组合进行调整。

2 AD9850的控制字与控制时序

AD9850有40位控制字,32位用于频率控制,5位用于相位控制。1位用于电源休眠(Power down)控制,2位用于选择工作方式。这40位控制字可通过并行方式或串行方式输入到AD9850,图4是控制字并行输入的控制时序图,在并行装入方式中,通过8位总线A0…D7将可数据输入到寄存器,在重复5次之后再在FQ-UD上升沿把40位数据从输入寄存器装入到频率/相位数据寄存器(更新DDS输出频率和相位),同时把地址指针复位到第一个输入寄存器。接着在W-CLK的上升沿装入8位数据,并把指针指向下一个输入寄存器,连续5个W-CLK上升沿后,W-CLK的边沿就不再起作用,直到复位信号或FQ-UD上升沿把地址指针复位到第一个寄存器。在串行输入方式,W-CLK上升沿把25引脚的一位数据串行移入,当移动40位后,用一个FQ-UD脉冲即可更新输出频率和相位。图5是相应的控制字串行输入的控制时序图。

AD9850的复位(RESET)信号为高电平有效,且脉冲宽度不小于5个参考时钟周期。AD9850的参考时钟频率一般远高于单片机的时钟频率,因此AD9850的复位(RESET)端可与单片机的复位端直接相连。

值得一提的是:用于选择工作方式的两个控制位,无论并行还是串行最好都写成00,并行时的10、01和串行时的10、01、11都是工厂测试用的保留控制字,不慎使用可能导致难以预料的后果。

3 单片机与AD9850的接口

AD9850有两种与微机并行打印口相连的评估版,并配有Windows下运行的软件,可以作为应用参考,但运用单片机实现对DDS的控制与微机实现的控制相比,具有编程控制简便、接口简单、成本低,容易实现系统小型化等优点,因此普遍采用MCS51单片机作为控制核心来向AD9850发送控制字。

单片机与AD9850的接口既要客商用并行方式,也可采用串行方式,但为了充分发挥芯片的高速性能,应在单片机资源允许的情况下尽可能选择并行方式,本文重点介绍其并行方式的接口。

3.1 I/O方式并行接口

I/O方式的并行接口电路比较简单,但占用单片机资源相对较多,图8是I/O方式并行接口的电路图,AD9850的数据线D0~D7与P1口相连,FQ-UD和W-CLK分别与P3.0(10引脚)和P3.1(11引脚)相连,所有的时序关系均可通过软件控制实现。

将DDS控制字从高至低存放于30H至34H中,发送控制字的程序清单如下:

MOV R0,#05H

MOV R1,#30H

DD:MOV P1,@R1

SETB P3.1

CLR P3.1

INC R1

DJNZ R0,DD

SETB P3.0

CLR P3.0

END

在程序中,每将一字节的数据送到P1口后,必须将P3.1(W-CLK)置高。在其上升沿,AD9850接收到P1口相连的数据线上的数据,然后将P3.1置低,并准备下一字节的发送,连续发送5个字节后,须将P3.0(FQ-UD)再次置高,以使AD9850根据则输入的控制字更改频率和相位输出,随后再置P3.0为低,准备下一组发送。单片机的P3.0、P3.1引脚为串行口,当被占用时,W-CLK和FQ-UD引脚也可与其它I/O脚相连,这时需要修改相应的发送程序。

3.2 总线方式并行接口

总线方式并行接口占用的单片机资源较少,在这种方式下,AD9850仅作为一扩展芯片而占用RAM的一段地址,必须时也可以只占用一个地址。图7是总线方式并行接口的电路原理图。同样将DDS控制字从高至低存放于30H至34H中,发送控制字的程序清单如下:

MOV R0,#05H

MOV R1,#30H

MOV DPTR,#0700H

DD:MOV A,@R1

MOVX @DPTR,A

INC R1

DJNZ R0,DD

MOVX A,@DPTR

END

AD9850的W-CLK和FQ-UD信号都是上升沿有效,用MOVX @DPTR,A指令向AD9850传送控制字时,由74F138将高八位地址的低三位译码,其输出经反相并与反相后的信号相与得到一上升沿送至AD9850的W-CLK脚,此时已送到总线上的数据将被AD9850接收,连续五次将40位的控制字全部发送以后,用MOVA A,@DPTR指令产生FQ-UD信号,使AD9850更改输出频率和相位,此时读入到单片机内的数据实际上无任何意义。图7中AD9850的地址为0700H。

上述两种接口方式经实际应用证明:工作可靠,效果良好。单片机与AD9850的串行接口可参照有关资料进行设计。上述接口电路和程序也适用于与AD9850脚对脚兼容的AD9851,值得注意的是:AD9851的控制字与AD9850控制辽中别位的定义稍有区别,编程时应予以注意。

点击此处查看原文 >>

系统分类: 电子制造   |    用户分类: 无分类    |    来源: 转贴

评论(2) | 阅读(989)
发表于:2007-8-19 21:05:38
标签:无标签

1