找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6259|回复: 0
打印 上一主题 下一主题
收起左侧

直流电机调速仿真课程设计报告及单片机汇编程序

[复制链接]
跳转到指定楼层
楼主



电气工程学院

单片机课程设计报告

班    级:134

姓    名:王*旭

学    号:1312021108

设计题目:直流电机调速系统设计

设计时间:12.22~12.28   

评定成绩:

评定教师:

摘要:

近年来,随着科技的进步,电力电子技术得到了迅速的发展,直流电机得到了越来越广泛的应用。直流它具有优良的调速特性,调速平滑、方便,调速范围广;需要能满足生产过程自动化系统各种不同的特殊运行要求,从而对直流电机的调速提出了较高的要求,改变电枢回路电阻调速,改变电枢电压调速等技术已远远不能满足要求,这时通过PWM方式控制直流电机调速的放大应运而生。

本课程设计主要是通过按键调整PWM信号实现直流电机的调速。并实现电路仿真。设计中,采用了AT89C51单片机作为整个控制系统的控制电路的核心部分,配以各种显示、驱动模块,实现对电动机转速的计算和显示。

目录

设计要求  ………………………………………………………  4

总体方案  ………………………………………………………  5

硬件设计  ………………………………………………………  7

软件设计  ………………………………………………………  8

调试过程  ………………………………………………………  11

设计总结  ………………………………………………………  13

其他      ………………………………………………………  14

  • 设计要求

    直流电机调速控制

实现具有电机速度设定、控制及显示的调速系统,功能及指标如下:

  • 电机控制

   要求电机能进行速度设定,速度调控以及正反转功能

  • 数码管显示

   数码管的显示要准确,不可出现异常符号

  • 键盘的输入

   本设计方案中采用键盘输入,要求绘图连线准确,按键无异常响应

  • 程序要求

   程序应尽可能的模块化,对每个模块的功能及作用进行标注

  • 绘图

  绘图的功能要全面,连线尽量少交叉,整体美观。

  • 总体方案

2.1 文献综述

   直流电机的调速方法

  • 电枢回路串电阻调速:调速平滑性差,低速时损耗大、效率低,串入电阻值越大稳定性越差
  • 降低电源电压调速:调速平滑性好,调速前后机械斜率不变稳定性好调速范围广,调速损耗小调速经济性好。
  • 改变励磁磁通调速:调节平滑,励磁电流小能量损耗小经济性好,转速稳定。

芯片选择:DA芯片、mc1413芯片、uln2003芯片等等

分析:在直流电机调速方法中,从性能上选择,应选降低电枢电压调速和改变励磁磁通调速。但从实行的难易程度上看应选择降低电源电压调速。

在芯片的选择上,DA芯片、mc1413芯片和uln2003芯片。前者为数字模拟量转换芯片,后两者功能均为放大电压和电流。这三个芯片均可以设计直流电机的调速控制。从成本上考虑,DA芯片价格超后者,后两者功能都较为相似,但ULN2003便宜少许所以选择ULN2003芯片。

2.2 方案设计

   本方案基于性价比高的原则来设计。通过按键控制PWM信号占空比控制输入电压的幅值来控制直流电机的转速。使用ULN2003芯片来驱动电机。


按键:按键分为停止键,1~10档位调节,正转反转调节及每个档位上的转速微调

数码管显示转速:由占空比计算得转速并加以显示在数码管上

PWM信号:PWM信号占空比控制输入电压的幅值

ULN2003驱动电路:ULN2003 放大信号 通过H桥电路来驱动电机可正反转

直流电机:被控制对象

单片机:用于接收按键值处理并发出相应的PWM信号以及显示转速在数码管上

三、硬件设计

3.1 电路原理图

3.2 器件选择
   考虑单片机无法驱动直流电机所以用了ULN2003这个放大电压的芯片,因为ULN2003最高输出电压为50V完全可以满足所选择电机。且在设计中需要正反转,所以电路选择了H桥电路通过切换输出PWM信号的端口可实现电机的正反转。



F0为输出高电平还是低电平的标志位

JG为定义的数组

JG与JG+1里面分别存储了PWM信号高电平与低电平的次数

FLAG 正反转标志位

IS_BUFF数码管缓冲显示单元首地址

   键盘主要是用线反转法,先给列线全赋0,行线全赋1.有行按下,对应行为0,。同理再给列线全赋1,行线全赋0。哪一列为0则为该列按下。由此可得是哪一个键按下

ULN2003:

ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。ULN2003 采用DIP—16 或SOP—16 塑料封装。
它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTL COMS,由达林顿管组成驱动电路。 ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。用户输出口的外接负载可根据以上参数估算。采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。

五、调试过程

5.1 软硬件调试

用Proteus跟Keil联调。将Proteus跟Keil设置好以后,先运行写的程序,没有错误后进入DEBUG模式,点击运行Proteus做出响应。

遇到的问题:

    在仿真过程中我发现按键电机转速并未有变化。在进行联调后,按下按键,单步运行发现键盘程序始终在按键扫描部分跳转,修改了程序,解决了问题。

5.2 运行效果

电机停转

电机正60转

电机反转150转

六、设计总结

    通过本次设计,加强了我对知识的掌握,使我对设计过程有了全面的了解。为了完成这次设计,我查阅了相关资料,学会了许多知识,培养了我独立解决问题的能力。同时在对电路设计的过程中,巩固了我的专业知识,使我受益匪浅。

    这次的设计也有不足之处。在测量转速上,我并未用反馈的方法来显示转速,而是通过计算得到转速。这使得转速与真实值有一定的偏差。这主要是因为我一开始所做的准备工作不充分。并未注意到这一部分。这是本次设计给我教训,在以后的工作中一定要对课题做好充分的了解以及准备工作。

参考文献

【1】张毅刚,单片机原理及其应用,高等教育出版社

【2】张毅刚,基于Proteus的单片机课程的基础实验与课程设计,人民邮电出版社

【3】羌予践,电机与电力拖动基础教程,电子工业出版社

【4】谷腰欣司,直流电动机实际应用技巧,科学出版社   


单片机源程序如下:
  1. FLAG BIT 00H      ;正反转标志位
  2. DIS_BUFF EQU 30H  ;数码管缓冲显示单元首地址
  3. JG  EQU 40H       ;PWM信号占空比数值 & 数码管位选循环次数存储地址
  4. ORG 0000H
  5. LJMP MAIN
  6. ORG 000BH
  7. LJMP IT0P
  8. ORG 0100H
  9. MAIN:MOV SP,#60H
  10.      MOV TMOD,#02H ;T0 方式2
  11.          MOV TL0,#0FEH
  12.          MOV TH0,#0FEH
  13.          MOV JG,#0    ;占空比为0%
  14.          MOV JG+1,#1
  15.          MOV JG+3,#1  ;数码管位选循环1次
  16.          MOV R5,JG
  17.          SETB P2.5    ;输出PWM信号(p2.5为信号输出,将p2.5给p2.7为正转,将p2.5给p2.6为反转)
  18.          SETB F0
  19.          SETB ET0
  20.          SETB EA
  21.          SETB TR0
  22. LOOP:
  23.      LCALL KEY    ;按键扫描
  24.          LCALL DISPLAY;数码管动态显示
  25.          LJMP LOOP
  26. IT0P:DJNZ R5,PWM0
  27.      JB F0,S_LOW
  28.          SETB P2.5
  29.          SETB F0
  30.          MOV R5,JG
  31. PWM0:JB FLAG,PWM1;置1为反转,置0为正转
  32.      JB P2.5,S1
  33.      CLR P2.7
  34.          RETI
  35. S1:         SETB P2.7
  36.          RETI
  37. PWM1:JB P2.5,S2
  38.          CLR P2.6
  39.          RETI
  40. S2:         SETB P2.6
  41.          RETI
  42.          
  43. S_LOW:CLR P2.5
  44.      CLR F0
  45.          MOV R5,JG+1
  46.          
  47. EXIT:RETI

  48. KEY: MOV P1,#0FH   ;列线(p1.4~p1.7)为0,行线(p1.0~p1.3)为1
  49.      MOV A,P1
  50.      CJNE A,#0FH,T;检测是否有行按下
  51.          RET
  52. T:   LCALL DELAY   ;延时消抖
  53.      CJNE A,#0FH,H0;是否真的有按键按下
  54.          LJMP LOOP
  55. H0:  JB P1.0,H1    ;检测哪一行按下(为0)
  56.      MOV R3,#0
  57.          LJMP L_SCAN
  58. H1:  JB P1.1,H2
  59.      MOV R3,#4
  60.          LJMP L_SCAN
  61. H2:  JB P1.2,H3
  62.      MOV R3,#8
  63.          LJMP L_SCAN
  64. H3:  JB P1.3,L_SCAN
  65.      MOV R3,#12
  66. L_SCAN:MOV P1,#0F0H;列线(p1.4~p1.7)为1,行线(p1.0~p1.3)为0
  67. L0:  JB P1.4,L1    ;检测哪一行按下(为0)
  68.      MOV R2,#0
  69.          LJMP JS
  70. L1:  JB P1.5,L2
  71.      MOV R2,#1
  72.          LJMP JS
  73. L2:  JB P1.6,L3
  74.      MOV R2,#2
  75.          LJMP JS
  76. L3:  JB P1.7,JS
  77.      MOV R2,#3
  78. JS:  MOV A,R3      ;计算行列值
  79.      ADD A,R2

  80.          


  81. KEY0:CJNE A,#0,KEY1;关闭电机
  82.          CLR TR0
  83.          SETB P2.5
  84.          MOV JG+3,#1
  85.          MOV DIS_BUFF,#0H
  86.          SETB P2.7
  87.          SETB P2.6
  88.          LJMP LOOP
  89. KEY1:CJNE A,#1,KEY2;一档30转
  90.      SETB TR0
  91.          MOV JG,#208    ;PWM占空比
  92.          MOV JG+1,#30         
  93.          LJMP SCREEN
  94. KEY2:CJNE A,#2,KEY3;二挡60转
  95.      SETB TR0
  96.          MOV JG,#178
  97.          MOV JG+1,#60         
  98.          LJMP SCREEN
  99. KEY3:CJNE A,#3,KEY4;三挡90转
  100.      SETB TR0
  101.          MOV JG,#148
  102.          MOV JG+1,#90         
  103.          LJMP SCREEN
  104. KEY4:CJNE A,#4,KEY5;四挡110转
  105.      SETB TR0
  106.          MOV JG,#128
  107.          MOV JG+1,#110        
  108.          LJMP SCREEN
  109. KEY5:CJNE A,#5,KEY6;五档130转
  110.      SETB TR0
  111.          MOV JG,#108
  112.          MOV JG+1,#130         
  113.          LJMP SCREEN
  114. KEY6:CJNE A,#6,KEY7;六档150转
  115.      SETB TR0
  116.          MOV JG,#88
  117.          MOV JG+1,#150
  118.          LJMP SCREEN
  119. KEY7:CJNE A,#7,KEY8;七档170转
  120.      SETB TR0
  121.          MOV JG,#68
  122.          MOV JG+1,#170         
  123.          LJMP SCREEN
  124. KEY8:CJNE A,#8,KEY9;八档190转
  125.      SETB TR0
  126.          MOV JG,#48
  127.          MOV JG+1,#190         
  128.          LJMP SCREEN
  129. KEY9:CJNE A,#9,KEY10;九档210转
  130.      SETB TR0
  131.          MOV JG,#28
  132.          MOV JG+1,#210                  
  133.          LJMP SCREEN
  134. KEY10:CJNE A,#10,KEY11;满转(由于关闭T0,手动装入数值显示)
  135.       CLR TR0
  136.           CLR P2.5                  
  137.           MOV JG+3,#3      
  138.           JNB FLAG,MINUS1     ;检测正反转
  139.           MOV JG+3,#4
  140.           MOV DIS_BUFF+3,#0AH
  141. MINUS1:                        
  142.       MOV DIS_BUFF,#8H
  143.           MOV DIS_BUFF+1,#3H
  144.           MOV DIS_BUFF+2,#2H
  145.           JB FLAG,PWM3
  146.           CLR P2.7
  147.          
  148.           LJMP LOOP
  149. PWM3: CLR P2.6
  150.       LJMP LOOP
  151. KEY11:CJNE A,#11,KEY12
  152.                         
  153.       CLR FLAG          ;标志位置0 正传
  154.           MOV A,#00H
  155.           LJMP KEY0

  156. KEY12:CJNE A,#12,KEY13
  157.       SETB FLAG         ;标志位置1 反转
  158.           MOV A,#00H
  159.           LJMP KEY0


  160. KEY13:CJNE A,#13,KEY14 ;微调占空比  增加转速
  161.       CLR C
  162.           SETB TR0
  163.       MOV A,JG+1
  164.       SUBB A,#239
  165.           MOV A,#10
  166.           JNC KEY10
  167.           MOV R0,#JG+1
  168.       INC @R0
  169.           MOV R0,#JG
  170.       DEC @R0
  171.          
  172.           LJMP SCREEN

  173. KEY14:CJNE A,#14,KEY15  ;微调占空比 减少转速
  174.       CLR C
  175.       SETB TR0
  176.       MOV A,JG+1
  177.       SUBB A,#1
  178.           MOV A,#11
  179.           JC KEY11
  180.       MOV R0,#JG
  181.           INC @R0
  182.           MOV R0,#JG+1
  183.       DEC @R0
  184.          
  185.           LJMP SCREEN
  186. KEY15:LJMP LOOP
  187.         
  188. SCREEN:
  189.        MOV A,JG+1      ;计算转速      
  190.        MOV B,#64H
  191.            DIV AB  
  192.            MOV DIS_BUFF+2,A
  193.            MOV A,B
  194.            MOV B,#0AH
  195.            DIV AB
  196.            MOV DIS_BUFF+1,A
  197.            MOV DIS_BUFF,B
  198.            MOV R1,#33H
  199.            

  200. LOOP0: MOV DIS_BUFF+3,#00H;计算位选循环次数
  201.        CJNE @R1,#00H,FZ
  202.            DEC R1
  203.            CJNE R1,#2FH,LOOP0
  204. FZ:    JB FLAG,MINUS      
  205.        MOV A,R1
  206.        SUBB A,#2FH
  207.        MOV JG+3,A
  208.        LJMP LOOP

  209. MINUS: INC R1             ;显示负号
  210.        MOV @R1,#0AH
  211.        MOV A,R1
  212.        SUBB A,#2FH
  213.                      
  214.        MOV JG+3,A
  215.        LJMP LOOP           
  216. DISPLAY:MOV R1,#DIS_BUFF ;动态显示程序
  217.         MOV R4,JG+3
  218.                 MOV B,#10H
  219. ……………………

  220. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
直流电机.rar (144.85 KB, 下载次数: 112)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表