欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于PCF8951单片机设计.docx

    • 资源ID:15370210       资源大小:324.54KB        全文页数:17页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于PCF8951单片机设计.docx

    1、基于PCF8951单片机设计1 引言 现在工业生产中,电机是主要的驱动设备,目前在直流电机拖动系统中已大量采用晶闸管装置控制电机的KZD拖动系统,取代了笨重的发电机-电动机的FD系统,又伴随着电子技术的高度发展,促进使直流电机调速逐步从模拟化向数字化转变,特别是单片机技术的应用,使直流电机调速又进入了一个新的阶段,智能化,高可靠性已成为它的发展趋势。直电机调速基本原理是比较简单的(相对于交流电机),只要改变电机的电压就可以改变转速了。1.1设计任务与要求设计一个基于PCF8591的直流电动机转速控制电路,在相应的软件控制下可以完成要求的功能,即使用具有IIC接口的PCF8591模数与数模转换芯

    2、片,使用1602LCD液晶显示屏显示PCF8591模数与数模转换芯片上的4个通道的模数转换结果,同时,0通道的转换结果再通过PCF8591转换为模拟信号,经过放大后调控直流电动机的转速。2 设计过程21 设计过程与步骤2.1.1 芯片介绍1)PCF8591PCF8591 是一种具有 I2C 总线接口的 8 位 A/D D/A 转换芯片,在与 CPU的信息传输过程中仅靠时钟线 SCL 和数据线 SDA 就可以实现。 I2C 总线是Philips (飞利浦)公司推出的串行总线,它与传统的通信方式相比具有读写方便,结构简单 ,可维护性好, 易实现系统扩展, 易实现模块化标准化设计, 可靠性高等优点。

    3、PCF8591 为单一电源供电(2.5 6 V)典型值为 5 V,CMOS 工艺 PCF8591 有 4 路 8 位 A/D 输入,属逐次比较型,内含采样保持电路; 1 路 8 位 D/A 输出,内含有 DAC的数据寄存器 A/D D/A 的最大转换速率约为 11 kHz,但是转换的基准电源需由外部提供 PCF8591 的引脚功能如图2.1所图 2.1 PCF8591引脚功能在 PCF8591 内部的可编程功能控制字有两个,一个为地址选择字,另一个为转换控制字 PCF8591 采用典型的I2C总线接口的器件寻址方法,即总线地址由器件地址引脚地址和方向位组成 Philips (飞利浦)公司规定

    4、A/D器件高四位地址为 1001,低三位地址为引脚地址A0A1A2,由硬件电路决定,地址选择字格式具体描述如表2 所示 因此 I2C 系统中最多可接 23=8 个具有总线接口的 A/D 器件 地址的最后一位为方向位 R/W,当主控器对 A/D 器件进行读操作时为 1,进行写操作时为 0 总线。操作时,由器件地址 引脚地址和方向位组成的从地址为主控器发送的第一字节。图2.2 地址选择字格式描述D0:读写控制位,对转换器件进行读操作时为1 ,进行写操作时为0。D1,D2,D3:引脚硬件地址设置位,由硬件电路设定该PCF8591的物理地址。D7,D6,D5,D4:器件地址位固定为1001.PCF85

    5、91的转换控制字存放在控制寄存器中,用于实现器件的各种功能 总线操作时为主控器发送的第二字节 转换控制字的格式功能具体描述如图2.3所示图2.3 转换控制字格式描述D0,D1:通道选择位。00 :通道 0; 01:通道1 ; 10:通道2; 11:通道3。D2:自动增量允许位,为 1时,每对一个通道转换后自动切换到下一通道进行转换,为0 时不自动进行通道转换,可通过软件修改进行通道转换D3:特征位,固定位0。D4,D5:模拟量输入方式选择位 。00:输入方式0 ,四路单端输入;01 :输入方式 1,三路差分输入;10 :输入方式2,二路单端输入,一路差分输入; 11:输入方式3 ,两路差分输入

    6、。D6:模拟输出允许位,A/D 转换时设置为 (地址选择字D0 位此时设置为1 ),D/A 转换时设置为 1(地址选择字 位此时设置为 )。D7:特征位,固定为0。PCF8591的A/D 转换为逐次比较型,在 A/D转换周期中借用 DAC及高增益比较器 对 PCF8591进行写读操作后便立即启动 A/D转换,并读出A/D 转换结果 在每个应答信号的后沿触发 转换周期,采样模拟电压并读出前一次转换后的结果。A/D转换中,一旦 A/D采样周期被触发,所选择通道的采样电压便保存在采样,保持电路中,并转换成8 位二进制码(单端输入)或二进制补码(差分输入)存放在ADC数据寄存器中等待器件读出。如果控制

    7、字节中自动增量选择位置 1,则一次A/D 转换完毕后自动选择下一通道 。读周期中读出的第一个字节为前一个周期的转换结果 。上电复位后读出的第一字节为80H。PCF8591的A/D 转换亦使用的是I2C 总线的读方式操作完成的 。其数据操作格式如图 2.4所示。图2.4 A/D转换数据操作格式其中data0datan 为 A/D的转换结果,分别对应于前一个数据读取期间所采样的模拟电压。A/D 转换结束后,先发送一个非应答信号位A 再发送结束信号位P。 灰底位由主机发出,白底位是由PCF8591 产生。 上电复位后控制字节状态为00H ,在 A/D转换时须设置控制字,即须在读操作之前进行控制字节的

    8、写入操作。逻辑操作波形时序图如图2.5所示。图2.5 A/D转换逻辑操作波形时序图2)LCD1602 LCD1602液晶显示容量:162个字符,芯片工作电压:4.55.5V,工作电流:2.0mA(5.0V),模块最佳工作电压:5.0V,字符尺寸:2.954.35(WH)mm。1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,

    9、低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令

    10、或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。2.1.2 设计思路本次设计要求设计利用带有IIC接口的PCF8592模数与数模转换芯片,实现对直流电机转速的控制。利用PCF8591芯片通道0采集到的模拟量,再次由AD转换成模拟量输出去控制直流电机的转速,由于D/A输出的的电流普遍偏小,而此不能直接驱动电机,要加上放大电路,而选用的直流电机是12V的DA的最大输出电压是5V,因此要先进行电压放大,采用LM358运放,将电压放大两倍,这样最高输出电压是10V,由于运放的驱动能力还是很弱,因此要进行电流放大,这边采用三极管进行电压放大,以射极跟随器的方式进行放大。2.1.3 电

    11、路设计由设计思路在Ptotues上面画出总的电路图如下:图2.6 总的电路图2)放大电路及直流电机驱动电路如 图2.7图2.7 放大电路 如图所示PCF8591的D/A输出经过电阻R6接到运放LM358的同向输入端,设DA的输出电压为VDA,LM358运放的输出电压为VDA*(1+R5/R4)=2*VDA,所以LM358对PCF8591的D/A输出电压放大两倍,LM358输出的电压经过三极管S8050组成的射极跟随器后的输出到直流电机的电压为2*VDA-Vbe(三极管基极和发射极的导通电压)。这样就组成了对D/A输出的电压,进行电压放大和电流放大,最后去驱动直流电机的驱动电路。3)PCF859

    12、1应用电路如下图2.8图2.8 PCF8591应用电路 PCF8591应用电路如上图所示,IIC接口SCL,SDA各接一个10K的上拉电阻。A0、A1、A2接地,这样对PCF8591写话地址为0x90,对PCF8591写的话地址为0x90。PCF8591的VREF参考电压引脚接+5V,这样A/D的最大输入电压是5V,D/A的最大输出电压也是5V,PCF8591的四个A/D道道接四个可调电阻,用来改变输入电压的大小。4)单片机最小系统电路图2.9 单片机最小系统电路 单片机最小系统电路主要包含两个部分,一个是由电阻电容组成的上电复位电路,让单片机在上电时先复位一下,再继续工作,另外一部分是由无源

    13、晶振和瓷片电容组成的时钟电路,为单片机提供工作时的必要的时钟信号。3 测试 实验的结果测试如图所示在A0电压为5V时,电机转速为235图3.1 在A0电压为5V时电机的转速 如图3.2在A0通道电压为3V时电机的转速为205图3.2 在A0电压为3V时电机的转速如图3.3在A0通道电压为1.3V时,电机的转速为80.2转图3.3 在A0通道电压为1.3V 时电机的转速4 总结 采用PCF8591对A0-A3的四个通道模拟量的采样,并在LCD1602液晶上面显示,对应的值,并将A0通道采集到到值输出给D/A去控制直流电机的转速,由于D/A的驱动能力很弱,因此加上了由LM358组成的电压放大电路,

    14、和由S8050三极管组成的电流放大电路再去驱动直流电机,通过在Protues仿真验证此方案是合理可行的。附录A:源程序#include/PCF8591相关定义 sbit SCL=P20; /时钟脉冲sbit SDA=P21; /双向输入输出数据端#define SCL_SET SCL=1#define SCL_CLR SCL=0#define SDA_SET SDA=1#define SDA_CLR SDA=0#define AddWr 0x90 /写数据地址#define AddRd 0x91 /读数据地址#define adCon 0x40 /AD控制字节/LCD1602相关定义sbit

    15、RS=P26;sbit RW=P25;sbit E=P27;#define setRS RS=1#define clrRS RS=0#define setRW RW=1#define clrRW RW=0#define setE E=1#define clrE E=0unsigned int time=0;unsigned char ADFlag=0;unsigned char str8=Ai n.mv ;/延时1USvoid delay(unsigned int cnt) while(-cnt);/延时1MSvoid delayms(unsigned int time) unsigned i

    16、nt i; for(i=0; itime; i+) delay(120);/写数据,P0void writeData(unsigned char Data) setRS; clrRW; delay(1); setE; delay(1); P0=Data; delay(5); clrE;/写命令,P0void writeCom(unsigned char Com) clrRS; clrRW; delay(1); setE; delay(1); P0=Com; delay(5); clrE;/清屏函数 void clear_scr(void) writeCom(0x01); delayms(5);

    17、 /写一个字符串在(X,Y )位置void disStr(unsigned char x, unsigned char y, unsigned char *str) if(y=0) writeCom(0x80+x); /第一行 else writeCom(0xc0+x); /第二行 while(*str) writeData(*str); str+; /LCD1602初始化void lcdInitial() writeCom(0x38); /显示模式设置 delayms(5); writeCom(0x08); /显示关闭 clear_scr(); /清屏 writeCom(0x06); /显示

    18、光标移动设置 delayms(5); writeCom(0x0C); /显示开及光标设置 void start() SDA_SET; delay(1); SCL_SET; delay(5); SDA_CLR;void stop() SDA_CLR; delay(1); SCL_SET; delay(5); SDA_SET; void ack() SDA_CLR; SCL_SET; delay(1); SCL_CLR;void noAck() SDA_SET; SCL_SET; delay(1); SCL_CLR;void send(unsigned char Data) unsigned ch

    19、ar i=0; unsigned char temp=0; temp=Data; for(i=0; i8; i+) SCL_CLR; delay(1); if(temp&0x80) SDA_SET; else SDA_CLR; delay(1); SCL_SET; delay(1); temp=1; SCL_CLR;unsigned char recive() unsigned char i=0; unsigned char temp=0;SDA_SET; /必须设置 for(i=0; i8; i+) SCL_CLR; /拉低允许数据改变 delay(1); SCL_SET; /拉高保持数据,

    20、等待读走 delay(2); if(SDA) temp|=0x01; else temp&=0xfe; if(i7) temp=1; /最低位发送完成不能移位,否则出错 SCL_CLR; return temp;unsigned char read(unsigned char ch ) unsigned char temp=0;start(); send(AddWr); /确认芯片 ack(); send(adCon|ch); /确认通道 ack(); /读出数据,放进temp start(); send(AddRd); ack(); temp=recive(); noAck(); stop(

    21、); return temp;void DAC(unsigned char light) start(); send(AddWr); ack(); send(0x40); /写入控制位,使能DAC输出 ack(); send(light); ack(); stop();void dis(unsigned char *date) float j; unsigned int k; unsigned char i=0; unsigned char ch1, ch2, ch3;for(i=0; i1) disStr(i*8-16, 1, str); else disStr(i*8, 0, str); void main() unsigned char i=0; unsigned char vot4; lcdInitial(); while(1) vot3=read(0); vot0=read(1); vot1=read(2); vot2=read(3); DAC(vot0); /DA转换函数,A0的模拟量值送到DA输出 dis(vot); delayms(5); 参考文献: 1 彭伟. 单片机C语言程序设计实训基于8051+Protues仿真M.电子工业出版社.20102 徐玮,徐富军,沈建良. C51单片机高效入门M.机械工业出版社.2010


    注意事项

    本文(基于PCF8951单片机设计.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开