网站大量收购独家精品文档,联系QQ:2885784924

基于单片机AT89C51控制直流电机PWM调速控制系统课程设计报告.doc

基于单片机AT89C51控制直流电机PWM调速控制系统课程设计报告.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第一章:前言 1.1 前言: 直流电机的定义:将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能(直流发电机)的旋转电机。 汽车行业中的各种风扇、刮水器、喷水泵、熄火器、反视镜、宾馆中的自动门、自动门锁、自动窗帘、自动给水系统、柔巾机、导弹、火炮、人造卫星、宇宙飞船、舰艇、飞机、坦克、火箭、雷达、战车等场合 PWM电路由复合体管组成H型桥式电路构成,四部分晶体管以对角组合分为两组:根据两个输入端的高低电平决定晶体管的导通和截止。4个二极管在电路中起防止晶体管产生反向电压的保护作用,防止电动机两端的电流和晶体管上的电流过大的保护作用。 在实验中的控制系统电压统一为5v电源,因此若复合管基极由控制系统直接控制,则控制电压最高为5V,再加上三极管本身压降,加到电动机两端的电压就只有4V左右,严重减弱了电动机的驱动力。基于上述考虑,我们运用了TLP521-2光耦集成块,将控制部分与电动机的驱动部分隔离开来。输入端各通过一个三极管增大光耦的驱动电流;电动机驱动部分通过外接12V电源驱动。这样不仅增加了各系统模块之间的隔离度,也使驱动电流得到了大大的增强。 在电动机驱动信号方面,我们采用了占空比可调的周期矩形信号控制。脉冲频率对电动机转速有影响,脉冲频率高连续性好,但带带负载能力差脉冲频率低则反之。经实验发现,当电动机转动平稳,但加负载后,速度下降明显,低速时甚至会停转;脉冲频率在10Hz以下,电动机转动有明显跳动现象。而具体采用的频率可根据个别电动机性能在此范围内调节。通过P2.6输入高电平信号,P2.7输入低电平,电机正转;通过P2.6输入低电平信号,P2.7输入高电平,电机反转;P2.6、P2.7同时为高电平或低电平时,电机不转。通过对信号占空比的调整来对电机转速进行调节。 2、系统的软件设计 本系统编程部分工作采用KELI-C51语言完成,采用模块化的设计方法,与各子程序做为实现各部分功能和过程的入口,完成键盘输入、按键识别和功能、PWM脉宽控制和数码管显示等部分的设计。 单片机资源分配如下表: P1 显示模块接口 键盘中断 P3 键盘模块接口 P2.6/P2.7 PWM电机驱动接口 系统时钟 ①PWM脉宽控制:本设计中采用软件延时方式对脉冲宽度进行控制,延时程序函数如下: /*****************延时函数*************************/ void delay() { int i,y; for(i=0;i30;i++) for(y=0;y100;y++); } 3、软件设计中的特点: 对于电机的启停,在PWM控制上使用渐变的脉宽调整,即开启后由停止匀加速到默认速度,停止则由于当前速度逐渐降至零。这样有利于保护电机。键盘处理上采用中断方式,不必使程序对键盘反复扫描,提高了程序的效率。 第三章:系统硬件电路设计 整体框图如下: 第四章:系统功能调试 仿真整体图如下: 1、加减速分5档,波形依次如下: /***************基于单片机AT89C51的直流电机PWM调速控制系统*************/ /***************班级:09电气六(2)****************************/ /***************指导老师:唐幼君 陈弢***********************************/ /***************时间:2013年9月22日***********************************/ /***************头文件*************/ #includereg51.h /*******延时******/ void delay() { int i,y; for(i=0;i30;i++) for(y=0;y100;y++); } /*******数码管显示*******/ void suzi(int i) { if(i==0) P1=0x0A0; if(i==1) P1=0x0F9; if(i==2) P1=0x64; if(i==3) P1=0x070; if(i==4) P1=0x39; if(i==5) P1=0x32; } /*******主程序*********/ void main() { int x; int i=0; int zen=1; 正反转 zen为1正传zen为0反转 P2=0x00; 初始化 P1=0x00; while(1) { while(zen==1) { if(

文档评论(0)

bhyq + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档