单片机课程设计实验报告

单片机原理与接口技术

直流电机测速系统

课程设计报告

学院:

专业:

学生姓名:

学号

指导教师:

时间:

一、前言

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。

为了使大学生更好的将理论学习与实践相结合,同时增加大学生对所学知识的感性认识,提升大学生的动手能力,在每学期末各高校(特别是工科专业)均开设了“课程设计”。

在数控系统中,检测是不可或缺的一个重要环节。最关键的检测环节之一便是电动机的测速。测速的方法多种多样,并且与选择的传感器类型有关。本设计利用旋转编码器实现电动机的测速。

二、设计要求与设计方案

设计要求:(1)设计驱动电路,实现对直流电机控制,可实现电机的启动、加减速、匀速、制动停机及正、反转等功能。

(2)采用旋转编码器测量电机的转速,以十进制数电机显示转速(转/分钟),用数码管或其他类型的显示器。

(3)实验测试时,采用改变直流永磁电机电枢两端电压的形式改变转速及切换其极性改变电机转动方向,测量系统能够实时测量和显示电机的转速和转向。

(4)当测速系统不测量转速期间,测量显示测试现场温度。

(5)每次测量完成后,把测量时间、测量值等信息通过串口传递到监控器上。信息提示模式“××时××分××秒: 转速:××” (可用字符或编码)。

扩充功能:

(1)转速超限报警,通过LED显示器和蜂鸣器报警。可把报警信息通过串口传递到监视器上。

(2)温度超限报警,通过LED显示器和蜂鸣器报警。可把报警信息通过串口传递到监视器上。

(3)当测速系统不测量转速时,可作为钟表和温度计使用,分时显示时间和温度。

方案 通过单片机实现电机启动、停止、正转、反转的控制,调速利用与电机串联在一起的电位器控制。正反转由H桥电路实现。电路图如下:

图1-1

本设计中采用的旋转编码器,电机每转动一周,输出1024个脉冲。通过统计脉冲个数,经过一系列计算,得出电机转速,并显示在LED数码管上。

本设计中,基准时间为1ms,记脉冲周期为7ms,T0为计数器工作模式,TH0、TL0内存储脉冲个数N。转速n与脉冲N转换公式为:

n=(N*1000*60)/(7*1024)=8.37*N

注:记脉冲周期7ms实现过程为调用七次基准时间,单片机执行程序也会消耗一部分时间,经折中后,n约等于8N,误差在允许的范围内。

显示过程,现将TH0、TL0中数暂存,转换为BCD码,调用显示程序显示BCD码。电机在24V全电压下运行,转速为800r/min。所以显示过程中,只需利用LED数码管后三位。第6位显示正负,以表示正反转。

改变转速利用电位器,改变电机转动方向利用H桥,见图1-1.

实现实时显示是利用:经过转速的处理程序,转速存储在特定单元,判断键盘输入值,当按下四键值时,使程序跳到转速显示模块,显示特定单元的值,从而显示实时转速。

不测量转速时,调用DS18B20测温程序,将温度显示到LED数码管上。

判断键值,如果按下五键,则调用串口显示程序,经过SBUF将数值按字符形式显示在显示器上。

设置上限转速800r/min,将T0中记出的数与上限相比,没有超出上限时,系统正常工作,超出上限,蜂鸣器报警,并调用串口程序,将“OVER SPD!”传递到显示器上。

设置下限温度2度及上限温度35度,当温度超限时,蜂鸣器报警,并将”OVER T TMP!”传递到显示器上。

设计方案:

    单片机控制电机启动、停止。利用H桥实现电机正反转控制。利用旋转编码器实现电动机转速测量。单片机、LED、按键等部分原理见图1-2。电机控制图见图1-1。实物图见图1-3

 


图1-2

图1-3

三、框图及程序介绍

1、整体框图

圆角矩形: 开始      主程序

 

          初始值设定

          调用key程序

         键值存在R5

 


2、键值处理程序

 

3、测温程序

 

4、中断计时

 

圆角矩形: 开始5、测速程序

 

 

 

程序代码:

FLAG1   BIT      00H

SIGN    BIT      P3.7

SIGN0   BIT     P3.3

DQ      BIT      P1.3           

TPH     DATA     3AH              

TPL     DATA     3BH

      FUHAO  EQU  20H

      WAN    EQU  21H

      QIAN   EQU  22H

      BAI    EQU  23H

      SHI    EQU  24H

      GEI    EQU  25H      ;转速存储单元

      MIAO  EQU  26H

      FEN    EQU  27H

      HOUR   EQU  28H      ;时间存储单元

      MIAO1 EQU  29H     

      MIAO2  EQU  2AH

      FEN1   EQU  2BH

      FEN2   EQU  2CH

      HOUR1  EQU  2DH

      HOUR2  EQU  2EH      ;时间调整字符

      ORG 0000H

      LJMP  START

      ORG 0003H

      LJMP  JI_SHI         

      ORG 001BH

      LJMP  P_T1             ;基准时间1ms中断

     

        ORG 0030H

 START: MOV  SP ,#70H

        MOV  TMOD,#00010101B    ;计时初始化

        MOV  TH1,#0FCH

        MOV  TL1,#18H               ;1ms初值

        MOV  33H,#20

        MOV  34H,#50

        SETB  EA

        SETB  ET1

        SETB  TR1

        SETB  PT1

        SETB  IT0

        CLR   EX0

        SETB  EA

        CLR   PX0

        SETB P3.5

        SETB P3.6                 ;关电机

        CLR P3.7

        CLR P3.3                 

   MAIN:LCALL KEY

        JNB SIGN0,NEXTP

        LJMP JI_SHI

 NEXTP: LCALL WENDU    

        SJMP  MAIN      

;********************************************

;计时中断

;********************************************    

  P_T1:    PUSH  ACC        ;中断程序  计时

           PUSH  PSW

           CLR  SIGN

           MOV  TH1 ,#0FCH

           MOV  TL1,#18H

           DJNZ 34H,LOOP

           MOV 34H,#50

           DJNZ 33H,LOOP            ;判断是否过完一秒

           MOV 33H,#20

           INC  MIAO

           MOV A,MIAO         

           CJNE A,#59,LOOP

           MOV  MIAO ,#0

           INC  FEN

           MOV  A,FEN         

           CJNE A,#59,LOOP

           MOV  FEN  ,#0

           MOV  MIAO ,#0

           INC  HOUR

           MOV   A,HOUR

           CJNE  A,#24,LOOP

           MOV  HOUR,#0

           MOV  FEN ,#0

           MOV  MIAO ,#0                                       

     LOOP: POP PSW

           POP ACC      ;恢复现场         

           RETI

;****************************************************************             

;按键处理部分

;****************************************************************

     KEY:  ACALL KEY_SCAN

           MOV A,R5

           CJNE A,#01H,NEXT1          

           CLR P3.5

           SETB P3.6

           MOV FUHAO,#0BH

           RET                 ;按一处理

    NEXT1: CJNE A,#02H,NEXT2

           CLR P3.6

           SETB P3.5

           MOV FUHAO,#0AH

           RET                  ;按二处理

    NEXT2: CJNE A,#03H,NEXT3

           SETB  SIGN0                 

           RET                  ;按三处理

    NEXT3: CJNE A,#04H,NEXT4

           CLR SIGN0

           RET                   ;按四处理

    NEXT4: CJNE A,#05H,NEXT5

           LCALL SHI_JIAN

           LCALL CHUANKOU

           RET                    ;按五处理

    NEXT5: RET

           

            

;****************************************************************

;温度

;***************************************************************         

          WENDU:  MOV R4,#01H

          WENDU1: LCALL  D1820

                  LCALL  TEMPDISP                   ;温度显示                

                 RET                     

          D1820: CALL DS18B20_Reset           ;设备复位

                 MOV A,#0CCH                     ;跳过ROM命令

                 CALL DS18B20_WriteByte          ;送出命令

                 MOV A,#044H                     ;开始转换

                 CALL DS18B20_WriteByte          ;送出命令

                 JNB DQ,$                        ;等待转换完成

                 CALL DS18B20_Reset              ;设备复位

                 MOV A,#0CCH                     ;跳过ROM命令

                 CALL DS18B20_WriteByte          ;送出命令

                 MOV A,#0BEH                     ;读暂存存储器

                 CALL DS18B20_WriteByte          ;送出命令

                 CALL DS18B20_ReadByte           ;读温度低字节

                 MOV TPL,A                       ;存储数据

                 CALL DS18B20_ReadByte           ;读温度高字节

                 MOV TPH,A                       ;存储数据

                 CALL TEMP_REVERSE

                      RET  

          DelayX0us:NOP                        ;2 当改用1T的MCU时,请调整此延时函数

                    NOP                              ;1

                    NOP                              ;1

                    NOP                              ;1

                    NOP                              ;1

                    NOP                              ;1

                    NOP                              ;1

                    NOP                              ;1

                    DJNZ 3DH,DelayX0us               ;2

                        RET                              ;2

       DS18B20_Reset:CLR DQ                 ;送出低电平复位信号

                     MOV 3DH,#48                      ;延时至少480us

                     CALL DelayX0us

                     SETB DQ                          ;释放数据线

                     MOV 3DH,#6                       ;等待60us

                     CALL DelayX0us

                     MOV C,DQ             ;检测存在脉冲

                     MOV 3DH,#42         ;等待设备释放数据线

                     CALL DelayX0us

                     JC DS18B20_Reset   ;如果设备不存在,则继续等待

                             RET

        DS18B20_ReadByte:CLR A

                         PUSH 0

                         MOV 0,#8             ;8位计数器 

                ReadNext:CLR DQ                       ;开始时间片

                         NOP

                         NOP

                         SETB DQ                      ;准备接收 

                         NOP

                         NOP

                         MOV C,DQ                     ;读取数据 

                         RRC A

                         MOV 3DH,#6                   ;等待时间片结束  

                         CALL DelayX0us

                         DJNZ 0,ReadNext

                         POP 0

                            RET

     DS18B20_WriteByte:PUSH 0

                       MOV 0,#8             ;8位计数器

              WriteNext:CLR DQ                       ;开始时间片

                         NOP

                         NOP

                         RRC A               ;输出数据

                         MOV DQ,C

                         MOV 3DH,#6        ;等待时间片结束

                         CALL DelayX0us

                         SETB DQ            ;准备送出下一位数据

                         DJNZ 0,WriteNext

                          POP 0

                             RET      

        TEMP_REVERSE:MOV A,TPH                 ;将TPH,TPL转换为无符号数,并存放于3CH

                     ANL A,#0FH                ;保留低四位,其最高位为符号位

                     SWAP A

                     MOV 3CH,A

                     MOV A,TPL

                     ANL A,#0F0H                   ;保留高四位,丢弃小数部分

                     SWAP A

                     ORL A,3CH

                     MOV 3CH,A

                     MOV 2FH,A 

                          RET

         TEMPDISP: JB 2FH.7,FUWENDU              ;高位为1时温度为负

                   JMP  DISP_TEMPZ               ;正温度

          FUWENDU:  CPL A

                    ADD A,#01

                    MOV 3CH,A

                    LCALL DISP_TEMP

                    MOV DPTR,#TABLE

                    MOV A,#12

                    MOVC A,@A+DPTR

                    MOV P1,#02     

                    MOV P0,A                       ;显示负号

                    LCALL DL1MS

                     CLR C

                     MOV A,3CH

                     SUBB A, #10                         ;低温报警值

                     JC DISP_TEMP

                     MOV 50H,#0FH

           DREBAO:   MOV P1,#06H            ;低温声光报警

                     LCALL DL1MS

                     MOV P1,#07H

                     LCALL DL1MS

                      DJNZ  50H,DREBAO

                     LJMP DISP_TEMP

          DISP_TEMPZ:CLR C

                      MOV A,3CH

                      SUBB A,#35              ;高温报警值

                      JC DISP_TEMP

                      MOV 50H,#0FH

              GREBAO: LCALL CHUANKOU1

                     MOV P1,#06H           ;高温声光报警

                     LCALL DL1MS

                     MOV P1,#07H

                     LCALL DL1MS

                     DJNZ  50H,GREBAO

                     LJMP DISP_TEMP

            DISP_TEMP:MOV A,3CH                       ;温度暂存储 

                      MOV DPTR ,#TABLE1               ;查表获得十进制温度    

                      MOVC A,@A+DPTR       

                      MOV 3CH,A                       ;十进制温度存储于3CH单元  

                      ANL A,#0F0H                           ;分离温度的十位数   

                      SWAP A

                      MOV DPTR,#TABLE

                      MOVC A,@A+DPTR                     ;取十位数字型码   

                      MOV P1,#03                         ;显示位置 

                      MOV P0,A  

                      LCALL DL1MS             ;延时

                      MOV A,3CH       ;

                      ANL A,#0FH                         ;分离温度的个位数

                      MOV DPTR,#TABLE

                      MOVC A,@A+DPTR                     ;取个位字型码

                      MOV P1,#04H           ;显示低位

                      MOV P0,A     

                      LCALL DL1MS      

                      MOV A,#11

                      MOVC A,@A+DPTR                     ;取C的字型码

                      MOV P1,#05      ;显示C,表示摄氏度  

                      MOV P0,A 

                      LCALL DL1MS

                      RET

;******************************************************    

;键盘扫描程序

;******************************************************

    KEY_SCAN:MOV P2,#0F0H                        ;置P2.4~P2.6为入口

             MOV A,P2                            ;读P2口状态

             ANL A,#0F0H

             XRL A,#0F0H

             JZ NO_KEY                            ;没有键按下

             LCALL DL10MS                          ;稳定

             MOV A,P2

             ANL A,#0F0H                           ;重读键值

             XRL A,#0F0H

             JZ NO_KEY           

             MOV R2,#11110111B                   ;行扫描,从第三行开始

       SCAN: MOV A,R2

             MOV P2,A                               ;再次给P2口赋值

             MOV A,P2                               ;读P2口状态

             ANL A,#11110000B

             MOV R3,A

             CJNE A,#0F0H,KEY_PRSD                  ;有键按下

             MOV A,R2

             RR A                                 ;产生下次的行线输出

             MOV R2,A

             XRL A,#01111111B                        ;检测完否

             JNZ SCAN

      NO_KEY:MOV R5,#09H                             ;存放键值

             RET

    KEY_PRSD:MOV A,R2                                ;取行扫描值

             ANL A,#00001111B                        ;计算行特征值

             ORL A,R3                                    ;计算行特征码

             MOV R4,A                                 ;暂存

             MOV R5,#01H                              ;置按键键值初值

             MOV DPTR,#KEY_TAB                        ;特征码表首地址

      JIANCE:MOV A,R5

             MOVC A,@A+DPTR

             XRL A,R4

             JZ FIXED                                  ;键值已经找到

             INC R5

             MOV A,R5

             CJNE A,#07H,JIANCE                       ;七个键是否全部检测完

             AJMP NO_KEY

       FIXED:MOV P2,#0F0H

             MOV A,P2                                     ;判断键是否释放

             ANL A,#0F0H

             XRL A,#0F0H

             JNZ FIXED

             LCALL DL10MS                              ;延时消抖

             MOV A,P2

             ANL A,#0F0H

             XRL A,#0F0H

             JNZ FIXED

             RET

;****************************************************

;报警程序

;****************************************************

FENGMING: MOV P1,#00000111B              ;蜂鸣器

          ACALL DELY   

          MOV P1,#00000110B               ;亮灯

          ACALL DELY

    DELY: MOV R3,#100

    DEL6: MOV R4,#100

    DEL7: NOP

          NOP

          NOP

          DJNZ R4,DEL7

          DJNZ R3,DEL6

             RET

;****************************************************

 ; 显示程序

;**************************************************** 

     DIS:  MOV R0,#20H

           MOV R2,#06H

           MOV R3,#00H        ;地址和输出初始化

    RED0:  MOV DPTR,#SEG_TAB  

           MOV A,@R0

           MOVC A,@A+DPTR

           MOV P0,A

           MOV A,R3

           MOV P1,A

           ACALL DL10MS

           INC R0

           INC R3

           DJNZ R2,RED0        ;从高位循环到低位显示

           RET                        

;****************************************************

;延迟函程序

;****************************************************

      DL1MS:MOV R0,#20

       DEL1:MOV R7,#10

       DEL0:NOP

            NOP

            NOP

            DJNZ R7,DEL0

            DJNZ R0,DEL1

            RET

     DL10MS:MOV  R7,#0C9H    

       DLMS:NOP

            NOP

            NOP

            DJNZ R7,DLMS

       STOP:RET

     DL50MS:MOV R6,#04H

     DLMS1: MOV  R7,#0C9H    

      DLMS0:NOP

            NOP

            NOP

            DJNZ R7,DLMS0

            DJNZ R6,DLMS1

            RET

  DL100MS:  MOV R6,#2

     DLMS11: MOV  R7,#0C9H   

      DLMS00:NOP

            NOP

            NOP

            DJNZ R7,DLMS00

            DJNZ R6,DLMS11

            RET

  DL500MS: MOV  R0,#250

     DELY1:MOV  R7,#250

     DELY2:NOP

           NOP

           NOP

           NOP

           NOP

           NOP

           DJNZ R7,DELY2

           DJNZ R0,DELY1

           RET

SEG_TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,3FH,39H,5EH,79H,71H    ;转速数据编码表

SEG_TAB1:DB  0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH 

KEY_TAB: DB 00H,77H,07BH,7DH,0B7H,0BBH,0BDH,0D7H ;按键键值表,1~7七个键值

TABLE:   DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,39H,40H                    

TABLE1:  DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,10H,11H,12H

         DB 13H,14H,15H,16H,17H,18H,19H,20H,21H,22H,23H,24H,25H

         DB 26H,27H,28H,29H,30H,31H,32H,33H,34H,35H,36H,37H,38H

         DB 39H,40H,41H,42H,43H,44H,45H,46H,47H,48H,49H,50H 

;**************************************************************

;   计数部分(查询方式记脉冲,每7ms记录一次脉冲数)

;**************************************************************                           

 JI_SHI:   NOP                 

  NW0:     MOV TH0,#00H

           MOV TL0,#00H

           SETB SIGN

  NW2:     JNB SIGN,NW3    

           AJMP  NW2

    NW3:   SETB TR0

           MOV R1,#07

    NW7:   SETB SIGN

    NW4:   JNB SIGN,NW5

           AJMP NW4

     NW5:  DJNZ R1,NW7    

           CLR TR0

           MOV 60H,TL0

           MOV 61H,TH0         ;存储计数结果          

           LCALL YOUYI

           LCALL YOUYI

           LCALL YOUYI

           LCALL YOUYI

           LCALL JISUAN         ;调整计数乘以八

           MOV R1,#20

    NW6:   LCALL DIS

           LCALL PANDUAN

           LCALL DL100MS

           DJNZ R1,NW6

           NOP    

           LJMP MAIN            ;循环显示转速

PANDUAN:   MOV A,BAI

           CJNE A,#8,STOPP

           LCALL FENGMING

           LCALL CHUANKOU0

    STOPP: RET

;***************************************************

;数据处理

;***************************************************

YOUYI:     CLR C

           MOV A,60H

           RLC A

           MOV 60H,A

           MOV A,61H

           RLC A

           MOV 61H,A

           CLR C

           RET                  ;八位数乘以2

JISUAN:    CLR A          

           MOV R3,#00H

           MOV R4,#00H

           MOV R5,#00H        

           MOV WAN,#00H

           MOV R2,#10H

           CLR C

HB:        MOV A,60H            ;八位2进制转BCD

           RLC A

           MOV 60H,A

           MOV A,61H

           RLC A

           MOV 61H,A

           MOV A,R5

           ADDC A,R5

           DA A

           MOV R5,A

           MOV A,R4

           ADDC A,R4

           DA A

           MOV R4,A

           MOV A,R3

           ADDC A,R3

           DA A

           MOV R3,A      

           DJNZ R2,HB;

           MOV A,R5

           ANL A,#0FH

           MOV GEI,A

           MOV A,R5

           SWAP A

           ANL A,#0FH

           MOV SHI,A

           MOV A,R4

           ANL A,#0FH

           MOV BAI,A

           MOV A,R4

           SWAP A

           ANL A,#0FH

           MOV QIAN,A                  

           RET

;****************************************

;时间调整

;****************************************

SHI_JIAN:  MOV A,MIAO

           DA A

           MOV MIAO1,A

           MOV A,FEN

           DA A

           MOV FEN1,A

           MOV A,HOUR

           DA A

           MOV HOUR1,A

           MOV A,MIAO1        

           ANL A,#0F0H

           SWAP A

           MOV MIAO2,A

           MOV A,MIAO1

           ANL A,#0FH

           MOV MIAO1,A

           MOV A,FEN1

           ANL A,#0F0H

           SWAP A

           MOV FEN2,A

           MOV A,FEN1

           ANL A,#0FH

           MOV FEN1,A

           MOV A,HOUR1

           ANL A,#0F0H

           SWAP A

           MOV HOUR2,A

           MOV A,HOUR1

           ANL A,#0FH

           MOV HOUR1,A          ;将时间数据调整为BCD码

          

;****************************************

;串口助手

;****************************************

CHUANKOU:  CLR EA

           MOV TMOD,#20H

           MOV TH1,#0FDH

           MOV TL1,#0FDH          

           MOV SCON,#40H

           MOV PCON,#00H

           SETB TR1                 ;串口初始化

           MOV DPTR,#SEG_TAB0

           MOV R2,#05         

  LOOP00:  MOV A,#00H

           MOVC A,@A+DPTR          

           MOV SBUF,A

  WAIT00:  JBC TI,NEXT00

           SJMP WAIT00

  NEXT00:  INC DPTR

           DJNZ R2,LOOP00

           MOV R0,#2EH

           MOV R2,#06H        

RED11:     MOV A,@R0

           ADD A,#30H

           MOV SBUF,A

 WAIT11:   JBC TI,NEXT11

           SJMP WAIT11         

NEXT11:    DEC R0         

           DJNZ R2,RED11          

           MOV DPTR,#SEG_TAB2

           MOV R2,#05         

  LOOP33:  MOV A,#00H

           MOVC A,@A+DPTR          

           MOV SBUF,A

  WAIT33:  JBC TI,NEXT33

           SJMP WAIT33

  NEXT33:  INC DPTR

           DJNZ R2,LOOP33

           MOV R0,#20H

           MOV R2,#06H        

RED22:     MOV A,@R0

           ADD A,#30H

           MOV SBUF,A

 WAIT22:   JBC TI,NEXT22

           SJMP WAIT22         

NEXT22:    DEC R0         

           DJNZ R2,RED22              ;传递数据到显示器上

           MOV TMOD,#00010101B

           MOV  TH1,#0FCH

           MOV  TL1,#18H

           SETB EA

           RET

SEG_TAB0:  DB 'T','I','M','E',':'  

SEG_TAB2:  DB ' ','S','P','D',':'      ;字符表

CHUANKOU0:  CLR EA

           MOV TMOD,#20H

           MOV TH1,#0FDH

           MOV TL1,#0FDH          

           MOV SCON,#40H

           MOV PCON,#00H

           SETB TR1

           MOV DPTR,#SEG_TAB4

           MOV R2,#10         

  LOOP44:  MOV A,#00H

           MOVC A,@A+DPTR          

           MOV SBUF,A

  WAIT44:  JBC TI,NEXT44

           SJMP WAIT44

  NEXT44:  INC DPTR

           DJNZ R2,LOOP44                 ;传递数据到显示器上

           RET  

SEG_TAB4: DB 'O','V','E','R',' ','S','P','D',' ','!'          

CHUANKOU1: CLR EA

           MOV TMOD,#20H

           MOV TH1,#0FDH

           MOV TL1,#0FDH          

           MOV SCON,#40H

           MOV PCON,#00H

           SETB TR1

           MOV DPTR,#SEG_TAB5

           MOV R2,#10         

  LOOP55:  MOV A,#00H

           MOVC A,@A+DPTR          

           MOV SBUF,A

  WAIT55:  JBC TI,NEXT55

           SJMP WAIT55

  NEXT55:  INC DPTR

           DJNZ R2,LOOP55                  ;传递数据到显示器上

           RET

SEG_TAB5: DB 'O','V','E','R',' ','T','P','E',' ','!'

           END

四、系统调试

1、温度显示

       单片机写入温度程序后,上电即显示温度。

注:室内温度低于26摄氏度。实验班在工作时,会放出一定热量,导致温度传感器周围温度要比室温高。

    显示速度过程中,按下键4,会自动跳回温度界面。

按下键4

2、速度显示

按下键1,电机正转,按下键3,开始测速,并实时显示转速

按下键2,电机反转,按下键3,开始测速,并实时显示转速,此时转速为负数

注:速度是不间断刷新,实时变化的。调动电位器改变转速后,会显示不同的转速。

3、监控器应用

显示实时转速:“TIME 00 00 00 SPD000000“,

显示超速报警:“OVER SPD”,

显示超温报警:“OVER TMP”。

程序改进:

(一)问题:显示器上程序无法实时显示转速,都是000000?

改进:在程序中一处指令本应为INC,结果由于编码疏忽,成了DEC,现已改进

(二)问题:当程序超速报警后,无法调回主程序?

改进:经分析得知,报警程序有些混乱,现在已经重新编码

五、最终结果及个人总结

   (一)。最终结果:本次课程设计,基本上完成了设计要求。由于时间紧迫,另外设计人员水平有限,对于扩展功能,只完成了一部分。具体如下:

第一、设计并制作了电机外接驱动电路,利用该驱动电路,完成了电机启动停止、正反转、调速功能。

第二、利用旋转编码器,通过编写测速及显示程序,能够利用LED数码管以十进制数显示电机转速(r/min)。

第三、能够通过改变直流永磁电机电枢两端电压的形式改变转速及切换其极性改变电机转动方向,测量系统能够实时测量和显示电机的转速和转向。(反转显示转速前加负号)

第四、通过编写程序,能够实现在不测量转速时,测量显示现场温度。(由于温度传感器18B20安装在实验板上,时间测量温度会随着实验板工作放热而发生改变,略高于实验室内温度)

第五、通过串口通信,可以将需要的数值输到显示器上,由于时钟程序没有做的精准,显示实时转速时,时间无法调节,但测速基本满足要求

第六、完成了速度超限报警,当速度超过800转上限时,蜂鸣器会报警,并传递信息到显示器上。

第七、完成了温度报警,当温度小于2度或者大于35度,蜂鸣器报警,并传递信息到显示器上。

(二)。个人总结:回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说三极管PNP管脚不懂怎么放置,不懂分得二极管的正负极,对单片机汇编语言掌握得不好,通过这次课程设计之后,一定把以前所学过的知识重新温故。
   六鸣谢

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在实验老师的辛勤指导下,终于游逆而解。同时,在实验老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!

附录:

元器件明细表

相关推荐