




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE39设计、旅行、影视、摄影、科技、音乐、艺术、人文、出版、饮食、漫画游戏梦想从相信开始创意从筹资起步基于单片机的直流电机测速、调速及显示系统设计课程设计报告题目:基于单片机的直流电机测速、调速及显示系统设计摘要本文主要研究了利用Quick51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法。单片机具有体积小、功能强、成本低、应用面广泛等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮在全社会大规模地兴起.学习单片机的最有效方法就是理论与实践并重,本文用8051单片机自制了一个采用了专门的芯片组成了PWM信号的发生系统,并且对PWM信号的原理、产生方法以及如何通过软件编程对PWM信号占空比进行调节,从而控制其输入信号波形等均作了详细的阐述。还对直流电机的速度进行了测量和显示。关键词:单片机、PWM、调速、测速、显示系统目录TOC\o”1—3”\h\z\u摘要 1HYPERLINK\l”_Toc277444798”目录 2HYPERLINK\l”_Toc277444799”第一章 概述 3HYPERLINK\l”_Toc277444800"1。1 概述 3_Toc277444802”1.2。1SmartSOPC与Quick51 3_Toc277444804"第二章总体方案设计 5HYPERLINK\l”_Toc277444805”2.18051单片机简介 6HYPERLINK\l”_Toc277444806”2.2PWM信号发生电路设计 12HYPERLINK\l”_Toc277444807"2.2.1PWM的基本原理 12HYPERLINK\l”_Toc277444808"2。3128*64液晶显示 13_Toc277444810”3.1传感器电路设计 14HYPERLINK\l”_Toc277444811”3。2信号处理电路设计 16HYPERLINK\l”_Toc277444812”3.3存储器电路设计 17HYPERLINK\l”_Toc277444813"3。3.1I2C总线概述 17_Toc277444817”第四章软件设计 20HYPERLINK\l”_Toc277444818”4.1系统软件总流程图 20HYPERLINK\l”_Toc277444819”4.2程序清单 21第五章结论与展望 31_Toc277444824”参考文献 36\l”_Toc534483044”3.3.2存储器电路图3—12AT24CO2与单片机的接口电路
3.4显示电路设计3.5PWM信号发生电路设计PWM波可以由具有PWM输出的单片机通过编程来得以产生,也可以采用PWM专用芯片来实现。当PWM波的频率太高时,它对直流电机驱动的功率管要求太高,而当它的频率太低时,其产生的电磁噪声就比较大,在实际应用中,当PWM波的频率在18KHz左右时,效果最好。在本系统内,采用了两片4位数值比较器4585和一片12位串行计数器4040组成了PWM信号发生电路。两片数值比较器4585,即图上U2、U3的A组接12位串行4040计数输出端Q2—Q9,而U2、U3的B组接到单片机的P1端口。只要改变P1端口的输出值,那么就可以使得PWM信号的占空比发生变化,从而进行调速控制。12位串行计数器4040的计数输入端CLK接到单片机C51晶振的振荡输出XTAL2。计数器4040每来8个脉冲,其输出Q2—Q9加1,当计数值小于或者等于单片机P1端口输出值X时,图中U2的(A>B)输出端保持为低电平,而当计数值大于单片机P1端口输出值X时,图中U2的(A〉B)输出端为高电平。随着计数值的增加,Q2—Q9由全“1"变为全“0”时,图中U2的(A〉B)输出端又变为低电平,这样就在U2的(A〉B)端得到了PWM的信号,它的占空比为(255—第四章软件设计4.1系统软件总流程图开始开始设堆栈清标志清暂存清显示T0初始化串行口初始化CPU开中断扫描键盘速度采样显示图4。1系统软件主程序流程图4。2程序清单/* LCD。C 128×64LCD驱动程序头文件*/#ifndefLCD_H_#defineLCD_H_#include〈REG51。H>//定义背光控制信号sbitLCD_BL=P1^4;//点亮背光灯voidLcdLightOn();//熄灭背光灯voidLcdLightOff();//清屏voidLcdClear();//初始化voidLcdInit();//显示ASCⅡ码voidLcdPutChar(unsignedcharc);//显示字符串voidLcdPuts(unsignedchar*s);#endif//LCD_H_/* LCD。C 128×64LCD驱动程序*/#include<INTRINS。H〉#include<ABSACC.H〉//#include"LCD。H”//定义屏幕光标(取值0~63,光标本身不可见)unsignedcharLcdCursor;inti,j;/*函数:LcdLightOn()功能:点亮背光灯*/voidLcdLightOn(){ LCD_BL=1;}/*函数:LcdLightOff()功能:熄灭背光灯*/voidLcdLightOff(){ LCD_BL=0;}/*函数:LcdGetBF()功能:读出状态位BF返回: BF=1,表示忙,不可进行任何操作 BF=0,表示不忙,可以进行正常操作*/bitLcdGetBF(){ unsignedchardat; dat=XBYTE[0xD002]; //XBYTE的定义见<ABSACC。H〉 return(bit)(dat&0x80);}/*函数:LcdWriteCmd()功能:向LCD发送命令参数: cmd:命令字,详见器件的数据手册*/voidLcdWriteCmd(unsignedcharcmd){ while(LcdGetBF()); XBYTE[0xD000]=cmd;}/*函数:LcdWriteDat()功能:向LCD写入数据参数:dat,要写入的数据说明:目标地址由地址计数器AC隐含指定,写完后AC自动加1*/voidLcdWriteDat(unsignedchardat){ while(LcdGetBF()); XBYTE[0xD001]=dat;}/*函数:LcdReadDat()功能:从LCD读出数据返回:读出的数据*//*unsignedcharLcdReadDat(){ volatileunsignedchardat; while(LcdGetBF()); dat=XBYTE[0xD003]; dat=XBYTE[0xD003]; //需要连续执行两次才能够读出真正的数据 returndat;}*//*函数:LcdSetAC()功能:设置DDRAM(显示数据RAM)的AC(地址计数器)值参数: ac:地址计数器值,范围0~63*/voidLcdSetAC(unsignedcharac){ ac&=0x3F; ac|=0x80; LcdWriteCmd(ac);}/*函数:LcdClear()功能:LCD清屏,并使光标回到0*/voidLcdClear(){ LcdWriteCmd(0x01); //清屏命令 LcdCursor=0;}/*函数:LcdDelay()功能:延时(t*100)个机器周期*/voidLcdDelay(unsignedchart){ unsignedcharn; do { n=49; while(--n!=0); }while(-—t!=0);}/*函数:LcdInit()功能:LCD初始化*/voidLcdInit(){ LcdWriteCmd(0x30); //设置基本指令集 LcdDelay(3); LcdWriteCmd(0x30); //设置基本指令集(需要再执行一次) LcdDelay(1); LcdWriteCmd(0x0C); //开启显示 LcdDelay(3); LcdClear(); //清屏 LcdDelay(250); LcdWriteCmd(0x06); //设置进入点 LcdDelay(10);}/*函数:LcdCheckAC()功能:根据光标位置调整AC*/voidLcdCheckAC(){ switch(LcdCursor) { case16: LcdSetAC(16); break; case32: LcdSetAC(8); break; case48: LcdSetAC(24); break; case64: LcdCursor=0; LcdSetAC(0); break; default: break; }}/*函数:LcdPutChar()功能:显示ASCII码参数: c为可显示的ASCII码(0x20~0x7F)*/voidLcdPutChar(unsignedcharc){ LcdWriteDat(c); LcdCursor++; LcdCheckAC();}/*函数:LcdPutHZ()功能:显示汉字参数: ch,cl:汉字编码*/voidLcdPutHZ(unsignedcharch,unsignedcharcl){ if(LcdCursor&0x01) {//显示汉字时,必须偶地址对准,即光标位置不能是奇数 LcdPutChar('’); //额外输出一个空格 } LcdWriteDat(ch); LcdWriteDat(cl); LcdCursor+=2; LcdCheckAC();}/*函数:LcdPuts()功能:显示字符串参数: *s:要显示的字符串(可同时包含ASCII码和汉字)*/voidLcdPuts(unsignedchar*s){ unsignedcharch,cl; for(;;) { ch=*s++; if(ch==’\0’)break; if(ch<0x80) { LcdPutChar(ch); } else { cl=*s++; LcdPutHZ(ch,cl); } }}/* 显示主程序*///#include”LCD.H"#include<REG51.H〉//#include"DELAY。H”/*包含延时函数的头部文件delay_us();delay_ms();*//*函数:Delay()延时1ms65.53st>0时,延时(t*0。001)st=0时。延时65.53s*//********************************************************/unsignedcharSD[4]={'1’,'2',’3’,'4'};//速度设定unsignedcharFK[4]={'2',’2’,'3’,'4’};//速度反馈intD=0;//方向控制中间变量 unsignedintPwm=0;//速度产生中间变量unsignedintp=0;unsignedintValue=0; unsignedintPwm_Value=0; unsignedintm;//unsignedinta,b,c,d;sbitKEY1=P2^0;sbitKEY2=P2^1;sbitKEY3=P2^2;sbitMotorA=P1^6;sbitMotorB=P1^7; bitSWTR;bitSWTF;unsignedintSWTV;#definePwm_MAX255voidDelay(unsignedintT){SWTV=T;SWTR=1;while(!SWTF);SWTR=0;SWTF=0;}voidKEY(){ if(KEY1==0) { Value=Value+1; } if(KEY2==0) { Value=Value-1; } if(KEY3==0) { if(D==0) { D=1; } else { D=0; } }}voidPWM_Init(){static unsignedchart=0; t++; if(t〉Pwm_MAX)t=0; if(t<=Pwm_Value) { Pwm=1; } else { Pwm=0; } if(D==0) { MotorA=0; MotorB=Pwm; } else { MotorA=Pwm; MotorB=0; }}voidShow_Value(unsignedcharCH[]){inti;for(i=0;i〈4;i++) { LcdPutChar(CH[i]); }}voidShow_Init(){LcdWriteCmd(0x80);LcdPuts("速度设定");LcdWriteCmd(0x90);LcdPuts("速度反馈");LcdWriteCmd(0x88);LcdPuts(”速度方向");LcdWriteCmd(0x98);LcdPuts("测控071”);LcdWriteCmd(0x9c);LcdPuts("14号");} voidT_int()//定时器初始化{TMOD&=0x00;TMOD=0x25;TH1=TL1=0xa4;TH0=TL0=0;ET1=1;TR1=1;EA=1;}voidMeasureSpeed(){TH0=TL0=0;TR0=1;Delay(2420);TR0=0;TF0=0;m=2*(TH0*255+TL0);if(m>Value){Pwm_Value=Pwm_Value-1;}if(m〈Value){Pwm_Value=Pwm_Value+1;}FK[3]=(m%10)+48;FK[2]=(m/10%10)+48;FK[1]=(m/100%10)+48;FK[0]=(m/1000%10)+48;SD[3]=(Value%10)+48;SD[2]=(Value/10%10)+48;SD[1]=(Value/100%10)+48;SD[0]=(Value/1000%10)+48;}voidmain(){ unsignedchari;MotorA=0; MotorB=0;EA=0; T_int();Delay(50);LcdInit();//LCD初始化/*****************************************/for(i=0;i〈2;i++) { LcdLightOff(); Delay(660); LcdLightOn(); Delay(660); }Delay(660);LcdClear();Delay(660);/****************************************/EA=1; Show_Init();Delay(20); Value=200;Pwm_Value=Value;for(;;) { KEY();//按键处理 MeasureSpeed(); LcdWriteCmd(0x94); Show_Value(FK); LcdWriteCmd(0x84); Show_Value(SD); LcdWriteCmd(0x8c); if(D==0) { LcdPuts("正向”); } if(D==1) { LcdPuts("反向"); } }}voidT1ZD()interrupt3{TR1=0; // KEY();//按键处理 PWM_Init();if(SWTR)//延时 { if(——SWTV==0)SWTF=1; }TR1=1;}第五章结论与展望本设计以8051为核心,利用单片机的运算和控制功能,并采用系统化LCD显示模块实时显示所测速度的设计方案,以及串口数据存储电路和系统软件。传感器也是实现测量与控制不可缺少的环节,是测控系统的关键部件,如果没有传感器对原始被测信号进行准确可靠的捕捉和转换,一切准确的测量和控制都将无法实现。工业生产过程的自动化测量和控制,几乎主要依靠各种传感器来检测和控制生产过程中的各种参量,使设备和系统正常运行在最佳状态,从而保证生产的高效率和高质量。本方案基本实现了直流电机的速度即时显示,并可通过控制按键显示速度,并通过PWM方波对直流电机的速度与转向进行控制。这一方案可以在很多领域有很好的应用,例如我们现在交通不可缺少的代步工具—-电动车的车速表,采用数字式显示不仅一目了然,还很精确。随着科技的不断发展,传感器的广泛应用,各种智能仪表都会采用数字式显示,不仅读取方便,而且精度更高,更可靠。附录附一速度控制子程序voidT_int();//定时器初始化{Tmod=0x00;Tmod=0x25;TH1=TL1=0xa4;TH0=TL0=0;}voidDelay(unsignedintt}){SWTV=T;SWTR=1;WHILE(!SWTF);SWTR=0;SWTF=0}voidMeasureSpeed();//速度计算{intm;TH0=TL0=0TR0=1Delay(2500);TR0=0;TF0=0;m=TH0*255+TH0;//已知速度不吵过100a=m%10;b=m/10%10;c=m/100%10;d=m/1000%10;FK[3]=’a’;FK[3]=’b';FK[3]='c’;FK[3]='d’;}voidShow_init();{LcdWriteCmd(0x83);LcdPuts("速度方向");LcdWriteCmd();LcdPuts("速度设定”);LcdWriteCmd();//速度反馈}voidShowValue(){inti;for(i=0;i〈4;i++) { LcdPutChar(s++); }}voidT1ZD(){unsignedcharm=0;staticunsignedchart=0;TR1=0;t++;if(t〉=Pwm_MAX) t=0;if(t<=PwmVlue) { Pwm=1; }else { Pwm=0; }if(SWTR) { IF(--SWTV==0)SWTF=1; }TR1=1;if(m%4==0) { MeasureSpeed(); }}voidmain(){T_init();Show_init();while(1) { Lcd(); Delay(?);//更新速度由这里决定 }}void key()//速度加减处理 {if(key1==0) { PwmValue=PwmValue+2;//2由实际决定 }if(key2==0) { PwmValue=PwmValue—2; }if(key3==0)d=~d;}voidShow_Value(unsignedchar*s){inti;for(i=0;i〈4;i++) { LcdPutChar(*(s+i)) }}voidShow_Value(unsignedcharFK[])voidCopy_String(char*from,char*to){for(;*form!=’\0’;from++)}voidPwm(){staticunsignedchart=0; t++; if(t〉=Pwm_MAX)t=0; if(t〈=PwmValue)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025商业办公楼租赁合同协议书样本
- 证据运用培训课件
- 二零二五版借款合同股权质押协议
- 二零二五版婚介服务合同范文
- 公司租厂房合同范例二零二五年
- 部队班组安全管理制度
- 装修公司投标管理制度
- 高端中餐前厅管理制度
- 2025年度四月度固态电池研发借款协议循环寿命测试
- 轮胎维修各项管理制度
- 外贸客户报价单中英文格式模板
- 中药学中药性味归经功效归纳
- 专业技术人员职务聘任书
- GB/T 13911-1992金属镀覆和化学处理表示方法
- GB/T 13452.2-2008色漆和清漆漆膜厚度的测定
- 医疗器械经营公司-年度培训计划表
- 【泉州南音传承与发展研究(论文7200字)】
- 《马克思主义发展史》第五章 马克思列宁主义在苏联的发展及曲折
- 现代汉语词汇学精选课件
- 军考哲学知识点
- 2023版北京协和医院重症医学科诊疗常规
评论
0/150
提交评论