欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于51单片机的直流电机控制.docx

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

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

    基于51单片机的直流电机控制.docx

    1、基于51单片机的直流电机控制一、 试验器件选择1、 控制芯片的作用主要是与L289相连接驱动直流电机,以及与八位数码管相连显示。(1)、AT89C51是一种带4K自己FLASH存储器的低压、高性能CMOS8为微处理器。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失真存储制造技术制造,与工业标准的MCS-51指令集和输出关键相兼容。由于将多功能8位CPU和闪存组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性奥高且廉价的方案。(2)、AT89C51引脚图如下:2、电机驱动芯片(1)、电机驱动芯

    2、片选择L298。其主要功能是作为单片机与直流电机中间的过度链接,单片机输出的信号通过L298加载到直流电机上驱动直流电机运行。其引脚图如下:(2)、主要工作原理:1、15脚分别是两个H桥的电流反馈脚,不用时可以直接接地;2、3为一对输出端口,13、14为一对输出端口;4为驱动电压输入,最小值必须比输入的低电平高2;5、7一对输入端口,10、12一对输入端口,TTL电平兼容6、11使能端,低电平禁止输出;8、9分别为接地和逻辑电源3、直流电机。在protues中选择motor-encoder直流电机,引脚图如下:上方左右的两个引脚在点击运转时输出频率相同的方波,但是在相位上相差90 ,而且在正转

    3、和反转是相反,因此可以根据这两个引脚的输出情况判断点击的转向。上方中间的引脚每当电机转一圈就输出一个正脉冲,可以据此册数点击的转速。左右两个引脚是电机的电压输入端。4、 74HC74。当D触发器的D和CLK输入端分别接电机上方的左右两个输出端口时可以根据D触发器的输出情况判断点击的转速。5、 八位数码管。用以显示。二、系统硬件设计连接1、 系统的器件连接图如下:2、单片机与数码管通过P0口和P2口相连,其中P2口选择点亮哪一个数码管,P0口则控制被点亮的数码管显示的数据。3、单片通过P10和P11和L298的第一对输入端IN1和IN2相连,然后又L298的第一对输出端OUT1和OUT2与直流电

    4、机相连,已达到控制直流电机的目的。4、从P14到P17分别接一个Button按钮来实现PID控制,P36和P37分别接Button按钮实现对电机的加速与减速控制。5、双刀双掷开关SW1课实现点击的正转与反转,单刀双掷开关SW2可实现点击的开启与停止。三、 系统程序设计及功能实现1、 程序流程图:开始输入一个值,点击Enter按钮,通过PID算法,改变PWM波输出让电机运行循环通过按钮加减改变当前值,Enter键确定判断新的输入值与当前值的差值,将差值加到原值上,通过PID算法改变PWM波输出控制电机运行2、 各部分实现程序:(1)、普通延时:#include void delayms(unsi

    5、gned char x) unsigned char i ; while(x-) for(i = 0 ; i 120 ; i+) ;(2)、数码管显示:#include #include #include void display_lilun(double num) char code table = 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, /07对应数码 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71; /8F对应数码long int n=num; P0 = 0; P2 =0x7f; P0

    6、= tablen % 1000/100; delayms(2);/百位加小数点 P0 = 0; P2 =0xbf; P0 = tablen % 100 / 10; delayms(2);/十位 P0 = 0; P2 =0xdf; P0 = tablen % 10; delayms(2);/个位 P0 = 0; /关闭显示器void display(double num,int dir) char code table = 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, /07对应数码 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0

    7、x5e, 0x79, 0x71; /8F对应数码long int n=num*10; P0 = 0; P2 =0xf7; P0 = tablen / 1000; delayms(2); /百位加小数点 P0 = 0; P2 =0xfb; P0 = tablen % 1000/100; delayms(2); /百位加小数点 P0 = 0; P2 =0xfd; P0 = tablen % 100 / 10+128; delayms(2);/十位 P0 = 0; P2 =0xfe; P0 = tablen % 10; delayms(2);/个位 P0 = 0; /关闭显示器if(dir=1)P0

    8、=0;P2=0xef;P0=0x40;delayms(2);(3)、按键扫描:#include sbit jiashi=P13; /对各个按钮进行位定义sbit jianshi=P14;sbit jia=P15;sbit jian=P16;sbit enter=P17;extern int num_key5; /定义全局变量void keyscan()if(jiashi=0)while(!jiashi);num_key0+;if(jianshi=0)while(!jianshi);num_key1+;if(jia=0)while(!jia);num_key2+;if(jian=0)while(

    9、!jian);num_key3+;if(enter=0)while(!enter);num_key4+;(4)、PWM波输出:#include #include #include extern int PWM ; /赋初值extern int start,sudu_lilun;extern double dis_count;sbit S2 =P36 ; /PWM值减少键sbit S3 =P37 ; /PWM值增加键void PWM_duty() if(start=1) PWM=sudu_lilun;doif(PWM!=0xff) PWM+ ;delayms(10); while(S3=0);d

    10、oif(PWM=0x02)PWM- ;delayms(10); while(S2=0);(5)、中断服务程序:#include extern int PWM,count,count1,dir,count20ms_flag;extern double dis_count;sbit PWM_OUT1=P11;sbit PWM_OUT2=P10;void timer0() interrupt 1 long int i; TR1=0 ;dir=0; TL0=0x00;TH0=0xd8; /10msTL0=0xf0; TH1=PWM ; TR1=1 ;PWM_OUT1=0 ; /启动输出PWM_OUT2

    11、=0;if(i+=492)count20ms_flag=1;i=0;dis_count=(double)(count+count1)/2;count=0;count1=0;void timer1() interrupt 3 TR1=0 ;if(dir=0)PWM_OUT1=1 ; /结束输出PWM_OUT2=0;elsePWM_OUT1=0;PWM_OUT2=1;void EIRQ0(void) interrupt 0EX0=0;count+;EX0=1;void EIRQ1(void) interrupt 2EX1=0;count1+;EX1=1;(6)、PID控制:#include #in

    12、clude int P,I,D;extern int sudu_lilun;typedef struct PID /定义结构体int SetPoint; /目标long SumError; /误差double Proportion; /比例系数double Integral; /积分系数 double Derivative; /微分系数int LastError; int PrevError; PID;static PID sPID;static PID *sptr = &sPID;void IncPIDInit()sptr-SumError = 0;sptr-LastError =0; /E

    13、rror-1sptr-PrevError =0; /Error-2sptr-Proportion =0.5; /比例系数sptr-Integral =0.3; /积分系数sptr-Derivative = 0.3; /微分系数sptr-SetPoint =sudu_lilun;int IncPIDCalc(int NextPoint)register int iError, iIncpid; /当前的误差值iError = sptr-SetPoint - NextPoint; /计算增加量iIncpid = sptr-Proportion * iError /Ek项- sptr-Integra

    14、l * sptr-LastError /Ek1项+ sptr-Derivative * sptr-PrevError; /Ek2项/存储当前误差以便后面计算sptr-PrevError = sptr-LastError;sptr-LastError = iError;/返回增量值return(iIncpid);(7)、main函数:#include #include #include #include #include #include #include sbit P10=P12; /确定电机转向int num_key5;int PWM,PWM1,count,count1,dir,sudu_l

    15、ilun,start,count20ms_flag;double dis_count;int PWM_PID;void init();void main() init(); while(1) PWM_duty();if(P10=1)dir=0;elsedir=1; keyscan();sudu_lilun=num_key0*10-num_key1*10+num_key2-num_key3;display_lilun(sudu_lilun);if(num_key4=1)start=1;display(dis_count,dir);if(start=1&count20ms_flag=1)count20ms_flag=0;IncPIDInit();PWM_PID=IncPIDCalc(dis_count);PWM=PWM+PWM_PID*2;void init() /定时器、外部中断初始化TMOD=0x01 ;TH0=0xd8;TL0=0xf0;IT0=1;EX0=1;IT1=1;EX1=1; TH1=PWM ; TL1=0xff ;EA=1;ET0=1;ET1=1; TR0=1 ;3、 程序实现效果:


    注意事项

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922