计算机控制系统课程设计 直流电机测速调速系统_第1页
计算机控制系统课程设计 直流电机测速调速系统_第2页
计算机控制系统课程设计 直流电机测速调速系统_第3页
计算机控制系统课程设计 直流电机测速调速系统_第4页
计算机控制系统课程设计 直流电机测速调速系统_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、XIAN TECHNOLOGICAL UNIVERSITY 课程名称 直流电机测速调速实验 专 业: 电气工程及其自动化 班 级: 姓 名: 学 号: 指导教师: 秦刚 成 绩: 2016 年 7 月 11 日 计算机控制系统课程设计计算机控制系统课程设计 直流电机测速调速系统直流电机测速调速系统 1、选定题目:电机速度控制系统选定题目:电机速度控制系统 二、设计目的和要求:二、设计目的和要求: 计算机控制技术的课程设计是一个综合运用知识的过程,它不仅需要微型 机控制理论、程序设计方面的基础知识,而且还需要具备一定的生产工艺知识。 课程设计包括确定控制任务、系统总体方案设计、硬件系统设计、控制

2、软件的 设计等,以便使学生掌握计算机控制系统设计的总体思路和方法。 三、功能需求:、功能需求: 1、基本功能: (1)该系统使用实验箱的直流电机、1602 液晶、DA、键盘等模块完成设 计; (2)直流电机通过 DA 模块使用 PWM 方式进行驱动及调速; (3)能够通过 1602 液晶显示当前转速及 PWM 占空比; (4)通过按键控制电机的启动和停止。 2、扩展功能: (1)能够通过按键手动输入目标转速(转/秒) ,启动电机后控制电机稳 定在目标转速; (2)使用 1602 液晶实时显示目标转速、当前转速及启停状态(on/off) 。 4 4、实验思路:实验思路: 本直流电机调速系统以单片

3、机系统为依托,根据 PWM 调速的基本原理,控 制电动机的转速为依据,实现对直流电动机的调速,并通过单片机控制速度的 变化。本设计的直流电机调速系统主要是由硬件和软件两大部分组成。硬件部 分是前提,是整个系统执行的基础,它主要为软件提供程序运行的平台。而软 件部分,是对硬件端口所体现的信号,加以采集、分析、处理,最终实现控制 器所要实现的各项功能,达到控制器自动对电机速度的有效控制。 用 51 来产生 PWM 波就必须要用软件编程的方法来模拟。方法大概可以分 为软件延时和定时器产生两种方法。本次课程设计我们采用定时器产生 PWM 方 波。 定时器产生 PWM:这种方法利用了定时器溢出中断,在中

4、断服务程序改变电 平的高低,在程序较复杂、多操作时仍能输出较准确的 pwm 波形。 五、实验设备:五、实验设备: 单片机开发实验仪一台; AT89C51; LCD1602; DA 数模转换; 按键; 光电开关 六、实验原理:六、实验原理: 1 1、硬件框图:、硬件框图: 硬件部分主要由电位器、模数转换模块、 51 单片机、显示模块、驱动电 路和无刷直流电机组成。其功能框图如下: 2 2、硬件介绍:、硬件介绍: 1)1602 液晶显示模块电路 1602C 字符型液晶:CS:片选信号,低电平有效;RS:选择读写的是 指令或数据,L:指令,H:为数据。RW:读写控制端,L:写操作,H:读 操作。 1

5、2864J 图形点阵液晶:CS:片选信号,低电平有效;CS1/2:左右半屏使 能选择,H:左半屏,L:右半屏;RS:选择读写的是指令或数据,L:指令, H:为数据。RW:读写控制端,L:写操作,H:读操作。 12864M 图形点阵液晶:JP6 的 16 脚是空脚,JP6 的 15 脚是 PSB:PSB 接高 电平,CPU 与液晶使用并行接口连接,连接方法与 12864J 完全相同;PSB 接低 电平,CPU 与液晶使用串行接口连接,此时,RS、RW、E 与 CPU 的 I/O 管脚相连 (STAR ES59PA 才有该功能) 。 10K W2 D0 D1 D2 D3 D4 D5 D6 D7 R

6、S RW 5 6 4 U3B 1 2 3 U5A WR RD 1 2 JP9 CS VSS 1 VDD 2 V0 3 RS 4 RW 5 E 6 DB0 7 DB1 8 DB2 9 DB3 10 DB4 11 DB5 12 DB6 13 DB7 14 LED+ 15 LED- 16 JP6 1602C VCC 10K R31 470 R4 DS1 (1602C 字符型液晶字符型液晶) 10K W2 D0 D1 D2 D3 D4 D5 D6 D7 RS RW 2 3 1 U3A 5 6 4 U3B 1 2 3 U5A WR RD 1 2 JP9 CS VSS 1 VDD 2 V0 3 RS 4

7、RW 5 E 6 DB0 7 DB1 8 DB2 9 DB3 10 DB4 11 DB5 12 DB6 13 DB7 14 CS1 15 CS2 16 RST 17 VOUT 18 LED+ 19 LED- 20 JP6 12864J VCC CS1/2 10K R31 470 R4 DS1 (1602C 字符型液晶字符型液晶) (12864J 图形点阵液晶)图形点阵液晶) 2)DAC0832 数模转换 VREF 8 RFB 9 DGND 10 IOUT1 11 IOUT2 12 DI7 13 DI6 14 DI5 15 DI4 16 DI0 7 CS 1 WR1 2 AGND 3 DI3 4

8、 DI2 5 DI1 6 XFER 17 WR2 18 ILE 19 VDD 20 U20 DAC0832LCN 1K W5 510 R78 0.1uF C33 2 3 6 47 1 8 5 U23 LM741CN 10K W6 4.7K R79 -12V VCC D5 +12V -12V OUT D0 D1 D2 D3 D4 D5 D6 D7 DS23 470 R71 -12V WR CS 10 9 8 C 411 U26C LM324N R150 R151 R162 Q7 C2655 VCC OUT1 R149 CS:片选,低有效; OUT:转换电压输出; OUT1:经功放电路的电压输出;

9、 电位器 W5:调整基准电压。 3)发光管、按键、开关 1 1 2 2 3 3 4 4 DD CC BB AA Title NumberRevisionSize A4 Date:2006-7-4Sheet of File:F:Inovation.Sheet1.SchDocDrawn By: DS35 DS36 DS37 DS38 DS39 DS40 DS41 DS42 1 2 3 4 5 6 7 8 JP65 1 2 JP63 510R118 510R117 510R116 510R115 510R114 510R113 510R112 510R111 DS32 470 R107 VCC LE

10、D1 LED2 LED3 LED4 JP65:发光管控制接口,0灯亮,1灯灭 第 页 1 1 2 2 3 3 4 4 DD CC BB AA Title NumberRevisionSize A4 Date:2006-7-4Sheet of File:F:Inovation.Sheet1.SchDocDrawn By: S29S30S31S32S33S34S35S36 1 2 3 4 5 6 7 8 JP74 1 2 3 4 5 6 7 8 9 10KR119 VCC 按键电路原理图 1 1 2 2 3 3 4 4 DD CC BB AA Title NumberRevisionSize A4

11、 Date:2006-7-4Sheet of File:F:Inovation.Sheet1.SchDocDrawn By: 1 2 3 4 5 6 7 8 JP80 1 2 3 4 5 6 7 8 9 10KR124 S21S22S23S24S25S26S27S28 VCC K5 K6 K7 K8 开关电路原理图 JP74:按键控制接口;按下0 信号,松开1 信号 JP80:开关控制接口;闭合0 信号,断开1 信号 4) AT89C51 本课题中控制芯片的作用主要是与 ADC0809 相连接,采集模数转换后得到 的 8 位二进制码,过公式计算后得到电压值,同时连接四位数码管进行显示。 综合考

12、虑,选用 AT89C51 即满足要求。 简介: AT89C51 是一种带 4K 字节 FLASH 存储器的低电压、高性能 CMOS 8 位微处 理器。单片机的可擦除只读存储器可以反复擦除 1000 次。该器件采用 ATMEL 高 密度非易失存储器制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼 容。由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的 AT89C51 是一种高效微控制器。AT89C 单片机为很多嵌入式控制系统提供了一种灵活性 高且价廉的方案。 AT89C51 引脚图如下: 主要特性:与 MCS-51 兼容;4K 字节可编程 FLASH 存储器

13、;寿命:1000 写/擦循环; 数据保留时间:10 年 全静态工作:0Hz-24MHz ; 三级程序存 储器锁定;1288 位内部 RAM ;32 可编程 I/O 线;两个 16 位定时器/计数器; 5 个中断源;可编程串行通道; 低功耗的闲置和掉电模式; 片内振荡器和时钟 电路;直流电机转速测量/控制 5)使用光电开关测速 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 DD CC BB AA Title NumberRevisionSize A0 Date:2005-12-19She

14、et of File:F:Inovation.STAR.SCHDOCDrawn By: 8550 Q4 4.7K R28 VCC REV 1 2 3 4 GP2S05 OP1330 R16 4.7K R20 1 2 JP4 470 R8 DS4 VCC 12 SN74LS14N U7A 34 SN74LS14N U7B M 机机机机 CTRL DS8 DS9 DS10 330 R19 330 R17 330 R18 LIGHT CTRL:控制电压(DAC0832 经功放电路提供)输入; REV:光电开关脉冲输出(用于转速测量); LIGHT:低电平点亮发光管。 第 页 3 3、 软件设计软件设

15、计 主程序设计: 主程序是一个循环程序,其主要思路是,先设定好速度初始值,这个初始 值与测速电路送来的值相比较得到一个误差值,然后用 PID 增量式算法输出控 制系数给 PWM 发生电路改变波形的占空比,进而控制电机的转速。 主程序流程图如下: 第 页 五、实验总结:五、实验总结: 计算机控制技术的课程设计相比硬件的课程设计,简直难了不止一个档次, 作为主要的编程人员,当我实际要去控制一个物体的时候,我才知道自己以前 学的知识有多么的不牢固,不过真真正正的去做一个实物控制程序的时候,才 能真切的体会到以前书本上学的知识是如何运用到实际的,我基本上可以说是 为了应付考试勉勉强强学了一些,这次实际

16、做到项目设计后,才理解其真正的 含义。 还有本次项目,我们采用了 LCD 显示屏作为显示单元,比 LED 数码管复杂, LCD 液晶显示屏这也是以前没有运用到过的,所以总体来说,这次课程设计带 给我的不仅仅是旧知识的复习,还有新的探索。 本课程设计得以完成,首先要感谢秦刚老师,因为课程设计在他的悉心指 导下才能顺利完成。他渊博的专业知识,严谨的治学态度,精益求精的工作作 风,诲人不倦的高尚师德,严以律己、宽以待人的崇高风范、朴实无华、平易 近人的人格魅力对我的影响非常深远。本设计从选题到完成,每一部步是在老 师的指导下完成的,倾注了老师大量的心血。 通过此次的课程设计,我学到了很多知识,跨越了

17、传统方式下的教与学的体制 束缚,在课程设计的写作过程中,通过查资料和搜集有关的文献,培养了自学 能力和动手能力。并且由原先的被动的接受知识转换为主动的寻求知识,这可 以说是学习方法上的一个很大的突破。在以往的传统学习模式下,我们学会了 如何将学到的知识转化为自己的东西,学会了怎么更好地处理知识和实践相结 合的问题。 在课程设计的写作过程中也学到了做任何事情所要的态度和心态,对于发展过 程中出现的任何问题和偏差都不要轻视,要通过正确的途径去解决,在做事 情的过程中要有耐心和毅力,不要一遇到困难就打退堂鼓,只要坚持下去就可 以找到思路去解决问题的。 再次感谢给我鼓励的老师、同学和朋友,谢谢! 6

18、6、附件:程序附件:程序 #include #include 第 页 /*以下硬件连线设置*/ sbit key0=P10; /占空比(设定值)增按键;且 rev 接 int0 sbit key1=P11; /占空比(设定值)减按键 sbit power = P17; /启停按键 sbit auto_run=P15; /自动运行按键 sbit set=P14; /set 按键 sbit left=P12; /左移光标 sbit right=P13; /右移光标 sbit LCD_RS=P30; /1602 的 RS sbit LCD_RW=P31; /1602 的 RW sbit sys_da

19、ta=P34; /继电器控制脚,用于切换 DA 功率输出方向 (电机 or 加热电阻) xdata unsigned char dac0832_addr _at_ 0 xd000;/DA 的地址 xdata unsigned char LCD_DATA _at_ 0 x8000;/LCD1602 的地址 /*以下为系统的状态量设置*/ bit rps_triger=0;/转速(温度)刷新显示控制,1 为需要刷 新显示,0 为不需要刷新显示 bit scale_triger=0;/占空比刷新显示控制 bit power_triger=0;/电源指示刷新显示控制 bit power_data=0;

20、/电源状态,0 为关断,1 为运行 bit set_triger=0;/设置状态,0 为正常运行,1 为设置模式 bit auto_triger=0;/auto(自动调整)状态,0 为正常模式, 1 为自动调整模式 bit auto_triger_triger=0;/auto 标志刷新显示控制,当 auto 状态被被 改变时才需刷新显示 /*以下为系统的数据量*/ char set_data=0; /设置模式下设置的是第几位,03(转速 设定为 4 位) ,02(温度设定为 3 位) unsigned int scale=10;/占空比数据(2 倍关系,可以控制到 0.5%) ,初值为 5%

21、unsigned int rps=0;/转速计数变量 unsigned int rps1=0;/目标值变量 unsigned int rps_data=0;/转速值 unsigned int time=0;/每秒计数变量(计数周期为 250u 秒,故 4000 次为 1 秒) unsigned int time2=0;/检测插值计数变量(0.05 秒检测 1 次, 实时调整比例系数) unsigned int time3=0;/比例系数控制(若当前值和目标值差 值值大,则调整迅速,反之则缓慢调整) unsigned char time_scale=0;/占空比总周期计数变量,一个周期 200

22、次,可以精确到 0.5% unsigned int time_check4=1000,3000,6000,10000;/转速调整时间系数表格 unsigned char check=0;/检测周期等级,分为 04 共 5 个等级, 0 为极小时间系数,4 为稳定不变 void _nop_(void); /*延时函数*/ void delay(int a) while(a-); /*外部中断初始化*/ void init_int0() IT0=1; EX0=1; EA=1; /*计数器 0 初始化*/ void T0_init() TMOD = 0 x01; TH0 = 0 xff; /计数周期

23、为 250u 秒 TL0 = 0 x1a; ET0=1; EA=1; TR0=1; /*LCD1602 相关函数*/ void LCD_write_com(unsigned char com) LCD_RS=0; LCD_RW=0; LCD_DATA=com; delay(80); void LCD_write_data(unsigned char dat) LCD_RS=1; LCD_RW=0; LCD_DATA=dat; delay(80); /*LCD1602 在电机调速系统下的初始化函数*/ void LCD_init(void) LCD_write_com(0 x38); LCD_w

24、rite_com(0 x0c); LCD_write_com(0 x06); LCD_write_com(0 x01); LCD_write_com(0 x80); LCD_write_data(R); LCD_write_data(P); LCD_write_data(M); LCD_write_com(0 x88); LCD_write_data(S); LCD_write_data(e); LCD_write_data(t); LCD_write_com(0 xc8); LCD_write_data(R); LCD_write_com(0 xcd); LCD_write_data(.);

25、 LCD_write_com(0 xcf); LCD_write_data(%); LCD_write_com(0 x8b); LCD_write_data(rps1/1000+0 x30); LCD_write_data(rps1%1000/100+0 x30); LCD_write_data(rps1%100/10+0 x30); LCD_write_data(rps1%10+0 x30); /*光标闪烁开*/ void flash_on(void) LCD_write_com(0 x0f); /*光标闪烁关*/ void flash_off(void) LCD_write_com(0 x

26、0c); /*显示当前转速或温度*/ void display_rps(void) flash_off(); LCD_write_com(0 x80); LCD_write_data(R); LCD_write_data(P); LCD_write_data(M); LCD_write_data(rps_data/1000+0 x30); LCD_write_data(rps_data%1000/100+0 x30); LCD_write_data(rps_data%100/10+0 x30); LCD_write_data(rps_data%10+0 x30); rps_triger=0;

27、/*显示当前占空比*/ void display_scale(void) flash_off(); LCD_write_com(0 xcb); LCD_write_data(scale/2/10+0 x30); LCD_write_data(scale/2%10+0 x30); LCD_write_com(0 xce); LCD_write_data(scale%2*5+0 x30); scale_triger=0; /*显示 auto 模式的状态*/ void display_auto(void) flash_off(); if(auto_triger=1) LCD_write_com(0

28、xc3); LCD_write_data(a); LCD_write_data(u); LCD_write_data(t); LCD_write_data(o); else LCD_write_com(0 xc3); LCD_write_data( ); LCD_write_data( ); LCD_write_data( ); LCD_write_data( ); auto_triger_triger=0; /*显示 power 的状态(on 或 off)*/ void display_power(void) flash_off(); LCD_write_com(0 xc0); if(pow

29、er_data=0) LCD_write_data(o); LCD_write_data(f); LCD_write_data(f); power_triger=0; auto_triger=0; else LCD_write_data(o); LCD_write_data(n); LCD_write_data( ); power_triger=0; auto_triger=0; /*调整输出占空比函数*/ void check_rps(void) if(power_data=0) return; if(rps1=199) scale=199; scale_triger=1; /*显示电机调速

30、系统下 set 模式函数*/ void display_set(void) switch(set_data) case 0:flash_on();LCD_write_com(0 x8b);LCD_write_data(rps1/1000+0 x30);LCD_write_ com(0 x8b);delay(1000);break; case 1:flash_on();LCD_write_com(0 x8c);LCD_write_data(rps1%1000/100+0 x30);LCD_ write_com(0 x8c);delay(1000);break; case 2:flash_on()

31、;LCD_write_com(0 x8d);LCD_write_data(rps1%100/10+0 x30);LCD_writ e_com(0 x8d);delay(1000);break; case 3:flash_on();LCD_write_com(0 x8e);LCD_write_data(rps1%10+0 x30);LCD_write_c om(0 x8e);delay(1000);break; default:flash_off();break; /*以下为各个按键的函数*/ /*power 电源键*/ void fn_power() if(power=1) return; e

32、lse delay(20); /按键去抖 if(power=0) while(power!=1); power_data=power_data; power_triger=1; set_triger=0; auto_triger_triger=1; else return; /*自动调整模式键*/ void fn_auto() if(auto_run=1) return; else delay(20); /按键去抖 if(auto_run=0) while(auto_run!=1); if(power_data=0) auto_triger=0; else auto_triger=auto_t

33、riger; auto_triger_triger=1; set_triger=0; else return; /*set 设置模式键*/ void fn_set() if(set=1) return; else delay(20); /按键去抖 if(set=0) while(set!=1); set_triger=set_triger; auto_triger=0; auto_triger_triger=1; else return; /*减键(set 模式为调整目标值,运行模式调整占空比) */ void fn_key0() if(key0=1) return; else delay(2

34、0); /按键去抖 if(key0=0) while(key0!=1); if(set_triger=1) switch(set_data) case 0:if(rps1/1000=1) rps1=rps1-1000; break; case 1:if(rps1%1000/100=1) rps1=rps1-100; break; case 2:if(rps1%100/10=1) rps1=rps1-10; break; case 3:if(rps1%10=1) rps1=rps1-1; break; else if(scale=1) scale=1; else scale-; scale_tr

35、iger=1; else return; /*加键(set 模式为调整目标值,运行模式调整占空比) */ void fn_key1() if(key1=1) return; else delay(20); /按键去抖 if(key1=0) while(key1!=1); if(set_triger=1) switch(set_data) case 0:if(rps1/10009) rps1=rps1+1000; break; case 1:if(rps1%1000/1009) rps1=rps1+100; break; case 2:if(rps1%100/10=3) set_data=3; else set_data+; else return; else return; /*光标右移键(set 模式下有效)*/ void fn_right() if(right=1) return; else delay(20); /按键去抖 if(right=0) while(right!=1); if(set_triger=1) if(set_data=200) time_scale=0;/占空比计数控制 if(time=4000) /如果计满 1 秒,计秒变量归零,并将 rps 的转数数据送到转速(温度)数据变量中保存 time=0; time_scale=0; if(sys_d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论