课程设计报告课程名称:计算机控制系统设计题目:直流电机闭环调速院系:电气信息学院班级:姓名:学号:姓名:学号:姓名:学号:指导教师:设计时间:摘要在电气时代的今天,电动机在工农业生产、人们日常生活中起着十分重要的作用。
直流电机是最常见的一种电机,在各领域中得到广泛的应用。
研究直流电机的控制和测量方法,对提高控制精度和响应速度、节约能源等都具有重要意义。
电机调速问题一直是自动化领域中比较重要的问题之一。
不同领域对于电机的调速性能有着不同的要求,因此,不同的调速方法有着不同的应用场合。
为了提高直流调速系统的动态、静态性能,通常采用闭环控制系统(主要包括单闭环、双闭环)。
而在对调速指标要求不高的场合,采用单闭环即可。
闭环系统较之开环系统能自动侦测把输出信号的一部分拉回到输入端,与输入信号相比较,其差值作为实际的输入信号;能自动调节输入量,能提高系统稳定性。
在对调速系统性能有较高要求的领域常利用直流电动机,但直流电动机开环系统稳定性不能满足要求,可利用转速单闭环提高稳态精度。
本次课程设计利用软件定时方式采用Intel 8255A可编程外设接口芯片唐都TD-PITC 实验系统上模拟直流电动机闭环调速系统,A/D转换器实现模拟信号到数字信号的转换,设置电机转速的给定值,通过PWM方式可实现电机转速的调节,LED灯显示电机转速的大小状态。
关键字:闭环调速、inter 8255A、A/D转换器、PWM、LED目录摘要1 控制系统总体设计方案 (3)2 系统的组成及工作原理 (4)2.1 8255工作原理 (4)2.2 转速调节原理 (5)2.3 A/D转换原理 (5)2.4 LED灯的工作原理 (6)2.5 实现两位十进制数的显示 (6)3 硬件设计 (7)3.1 接线图 (7)4 软件设计 (8)4.1 转速调节程序设计框图 (8)4.2 主程序流程图 (9)4.3 程序清单 (10)5 调试及结果 (21)5.1 调试步骤 (21)5.2结果分析 (21)5.2结论 (21)参考文献 (22)1 控制系统总体设计方案本设计是利用PC微机一台、TD-PIT实验系统一套实现对直流电机转速调节的应用。
编写程序,用ADC0809完成模拟信号到数字信号的转换。
输入模拟信号有A/D转换单元可调电位器提供的0~5V,将其转换后的数字信号读入累加器,做为控制电机的给定转速。
用8255的B口作为直流电机的控制信号输出口,通过对电机转速反馈量的运算,调节控制信号,达到控制电机匀速转动的的作用。
并将累加器中给定的转速和当前测量转速显示在屏幕上。
再通过LED灯显示出转速的大小变化。
整个程序设计过程分为基本功能实现阶段,检测程序阶段,功能扩展和功能验证及程序补充四个实验阶段。
基本功能实验阶段,在“轻松编程”软件中完成,主要完成各个子程序的调试;在检测程序阶段,在“轻松编程”软件中通过编译和链接,并反复检查没有逻辑错误;调试结果正确以后在进行相应的连接,将各个子模块联系起来功能扩展及程序的补充,在实验室里完成,使用唐都硬件实验箱,用TDPIT来编程实现;功能验证阶段,在实验室里完成。
2 系统的组成及工作原理2.1 8255工作原理:本设计利用8255的A口作为输出口,控制8个单色LED灯,来实现电机转速的大小调节。
并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息,CPU和接口之间的数据传递总是并行的,即可以同时进行传递8位,16位,32位等。
8255可编程外围接口芯片是具有A、B、C三个并行接口,+5V单电源供电,能在以下三种方式下工作:方式0—基本输入/出方式、方式1—选通输入/出方式、方式2—双向选通工作方式。
其控制字、内部结构图和引脚图见图1-1-1、图1-1-2.图2-1-1 8255控制字图2-1-2 8255内部结构图和引脚图2.2 转速调节原理:PWM的占空比决定输出到直流电机的平均电压.PWM不是调节电流的.PWM的意思是脉宽调节,也就是调节方波高电平和低电平的时间比,一个20%占空比波形,会有20%的高电平时间和80%的低电平时间,而一个60%占空比的波形则具有60%的高电平时间和40%的低电平时间,占空比越大,高电平时间越长,则输出的脉冲幅度越高,即电压越高.如果占空比为0%,那么高电平时间为0,则没有电压输出.如果占空比为100%,那么输出全部电压. 所以通过调节占空比,可以实现调节输出电压的目的,而且输出电压可以无级连续调节.在使用PWM控制的直流无刷电动机中,PWM控制有两种方式:(1)使用PWM信号,控制三极管的导通时间,导通的时间越长,那么做功的时间越长,电机的转速就越高(2)使用PWM控制信号控制三极管导通时间,改变控制电压高低来实现直流电机单元由DC12V、1.1W的直流电机,小磁钢,霍尔元件及输出电路构成。
PWM示意图如图2-2-1所示。
通过调节T1的脉冲宽度,改变T1的占空比,从而改变输出,达到改变直流电机转速的目的图2-2-1 PWM示意图利用8255的PB0产生脉冲信号作为控制量,经驱动电路驱动电机运转。
霍尔测速元件输出的脉冲信号记录电机转速构成反馈量。
在参数给定的情况下,经PID运算,电机可在控制量的作用下,按PC机累加器给定的转速运转。
通过PC 的0号通道,设置为输出1ms方波,作为采样时钟,PB0产生PWM脉冲计时及转速累加,系统总线上INTR中断用于测量电机转速。
2.3 A\D转换原理图2-3-1 ADC0809外部管脚图本设计用ADC0809完成模拟信号到数字信号的转换。
输入模拟信号有A/D 转换单元可调电位器提供的0~5V,将其转换后的数字信号读入累加器,做为控制电机的给定转速。
2.4 LED灯的工作原理:LED灯显示器有8个单色发光二极管构成,在共阳极接法中,各二极管的阳极被连在一起,使用的时候要将它与+5V项链,而把各段的阴极连到器件的相应引脚上。
当某的LED灯的引脚为低电平的时候,该灯工作。
图2-4-1 LED灯管脚图通过8255的A口信号作为输入信号,控制各灯的工作状态。
来显示出此时电机转速的大小变化。
1.5 实现两位十进制数的显示:在计算机中,对数字的输入和输出是用二进制进行的,而在计算机内部十进制数要转换为二进制来表示,要实现两位十进制数的显示,必须将他们转换为目前最普遍使用的字符编码ASCII码。
本设计中通过作除法,即拆分法,将两位十进制AB转换为A*10+B的形式,再通过A+30H与B+30H来转换为ASCII码,若溢出,加7运算。
3 硬件设计3.1 接线图:图3-1-1 A\D转换接线图ADC转换单元中,D0-D7分别与系统总线的XD0-XD7对应相连,WR、RD、CLK分别与系统总线的XIOW、XIOR、CLK相连,片选引脚与系统IOY0相连,A、B、C接地,IN0接+5V直流电压源,如图 3-1-1所示。
图3-1-2 直流电机闭环接线图直流电机闭环接线中,8255芯片的A口作为输出信号与LED灯项连,即PA0-PA7与系统总线的XD0-XD7相连,同时与ADC0809的D0-D7相连;B口的PB0作为直流电机控制信号输出口,经驱动电路A口,与直流电机相连驱动电机运转;片选信号线接系统的IOY1,读写信号线分别对应系统的XIO、RXIOW相连,其中,系统的中断INTR引脚用于测量电机转速与直流电机的HR引脚相连。
4 软件详细设计4.1 转速调节程序设计框图:(a)转速调节主程序图(b)测速中断处理程序图(c)定时采样中断处理程序图图4-1-1转速调节程序设计框图4.2 主程序流程图:图4-2-1主程序流程图说明 B 口转速控制程序转上页将转换结果以16进制形式显示在屏幕上设置8255工作方式将AD 送的结果装入8255初始化8255控制寄存器将结果送到8255A 口输出,执行B 口的调速程序 是否有键按下返回DOS结束启用A/D 转换在屏幕上显示给定的转速读取转换结果定义寄存器清屏屏幕显示菜单开 始4.3 程序清单:根据主程序流程图和转速调节设计框图写出相应程序,在“轻松编程”软件中完成各个子程序的调试;通过编译和链接,并反复检查没有逻辑错误;调试结果正确以后在进行相应的连接,将各个子模块联系起来,由于自己不具备硬件资源,所以调试的时候只能检查程序本身的错误,经过调试能显示各个子程序的功能,同时嵌套有延时子程序,方便程序的调用,端口地址的选择与确定,在实验室里完成,具体程序设计如下:INTR_IVADD EQU 0038H ;INTR对应的中断矢量地址INTR_OCW1 EQU 21H ;INTR对应PC机内部8259的OCW1地址 INTR_OCW2 EQU 20H ;INTR对应PC机内部8259的OCW2地址 INTR_IM EQU 0BFH ;INTR对应的中断屏蔽字PCI_INTCSR EQU 0CC38H ;PCI卡中断控制寄存器地址IOY0 EQU 0600H ;片选IOY0对应的端口始地址IOY1 EQU 0640H ;片选IOY0对应的端口始地址MY8255_A EQU IOY0+00H*4 ;8255的A口地址MY8255_B EQU IOY0+01H*4 ;8255的B口地址MY8255_C EQU IOY0+02H*4 ;8255的C口地址MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址AD0809 EQU IOY1+00H ;AD0809的端口地址STACK1 SEGMENT STACKDW 64 DUP(?)TOP LABEL WORDSTACK1 ENDSDATA SEGMENTTABLE1 DB 'Assumed Fan Speed:(/s)',0AH,0DH,'$' ;字符串变量 TABLE2 DB 'Current Fan Speed:(/s)',0AH,0DH,'$' ;字符串变量 ENT DB 0AH,0DH,'$' ;换行,回车CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量IM_BAK DB ? ;保存INTR原中断屏蔽字的变量CS_BAK1 DW ? ;保存定时器0中断处理程序入口段地址的变量IP_BAK1 DW ? ;保存定时器0中断处理程序入口偏移地址的变量IM_BAK1 DB ? ;保存定时器0中断屏蔽字的变量TS DB 14H ;采样周期SPEC DW 55 ;转速给定值IBAND DW 0060H ;积分分离值KPP DW 1060H ;比例系数KII DW 0010H ;积分系数KDD DW 0020H ;微分系数YK DW ?CK DB ?VADD DW ?ZV DB ?TC DB ?FPWM DB ?CK_1 DB ?EK_1 DW ?AEK_1 DW ?BEK DW ?AAAA DB ?VAA DB ?BBB DB ?VBB DB ?MARK DB ?R0 DW ?R1 DW ?R2 DW ?R3 DW ?R4 DW ?R5 DW ?R6 DW ?R7 DB ?R8 DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET TABLE1 ;显示字符串1MOV AH,09HINT 21HMOV AX,SPEC ;显示给定值CALL DECSHOWMOV DX,OFFSET ENT ;回车,换行MOV AH,09HINT 21HMOV DX,OFFSET TABLE2 ;显示字符串2MOV AH,09HINT 21HCLIMOV AX,0000HMOV ES,AXMOV DI,0020HMOV AX,ES:[DI]MOV IP_BAK1,AX ;保存定时器0中断处理程序入口偏移地址 MOV AX,OFFSET TIMERISRMOV ES:[DI],AX ;设置实验定时中断处理程序入口偏移地ADD DI,2MOV AX,ES:[DI]MOV CS_BAK1,AX ;保存定时器0中断处理程序入口段地址 MOV AX,SEG TIMERISRMOV ES:[DI],AX ;设置实验定时中断处理程序入口段地址 IN AL,21HMOV IM_BAK1,AL ;保存INTR原中断屏蔽字AND AL,0F7HOUT 21H,AL ;打开定时器0中断屏蔽位MOV DX,PCI_INTCSR ;初始化PCI卡中断控制寄存器MOV AX,1F00H ;向PCI_INTCSR中写入003F1F00HOUT DX,AXADD DX,2MOV AX,003FHOUT DX,AXMOV DI,INTR_IVADDMOV AX,ES:[DI]MOV IP_BAK,AX ;保存INTR原中断处理程序入口偏移地址MOV AX,OFFSET MYISRMOV ES:[DI],AX ;设置当前中断处理程序入口偏移地址 ADD DI,2MOV AX,ES:[DI]MOV CS_BAK,AX ;保存INTR原中断处理程序入口段地址MOV AX,SEG MYISRMOV ES:[DI],AX ;设置当前中断处理程序入口段地址 MOV DX,INTR_OCW1IN AL,DXMOV IM_BAK,AL ;保存INTR原中断屏蔽字AND AL,INTR_IMOUT DX,AL ;打开INTR的中断屏蔽位MOV VADD,0000H ;变量的初始化MOV ZV,00HMOV ZVV,00HMOV CK,00HMOV YK,0000HMOV CK_1,00HMOV EK_1,0000HMOV AEK_1,0000HMOV BEK,0000HMOV BBB,00HMOV VBB,00HMOV R1,0000HMOV R2,0000HMOV R3,0000HMOV R4,0000HMOV R5,0000HMOV R6,0000HMOV R7,00HMOV R8,0000HMOV MARK,00HMOV FPWM,01HMOV AAAA,7FHMOV VAA,7FHMOV TC,00HMOV AL,80H ;初始化8255MOV DX,MY8255_MODEOUT DX,ALMOV AL,00HMOV DX,MY8255_BOUT DX,ALMOV DX,MY8255_AOUT DX,ALMOV DX,PC8254_MODE ;初始化PC机定时器0,定时1msMOV AL,36HOUT DX,ALMOV DX,PC8254_COUNT0MOV AL,8FHOUT DX,ALMOV AL,04HOUT DX,ALSTIM1: MOV AL,TS ;判断采样周期到否?SUB AL,TCJNC M1 ;没到则继续等待MOV TC,00H ;采样周期到,将采样周期变量清0 MOV AL,ZVVMOV AH,00HMOV YK,AX ;得到反馈量YKLOOP1: MOV DX,AD0809 ;启动A/D转换OUT DX,ALCALL DALLYMOV DX,AD0809 ;读出转换结果IN AL,DXMOV DX,MY8255_A ;将结果显示于LEDMOV BL,ALMOV BH,ALCALL PID ;调用PID子程序,得到控制量CKMOV AL,CK ;把控制量转化成PWM输出SUB AL,80HJC IS0MOV AAAA,ALJMP COUIS0: MOV AL,10H ;电机的启动值不能低于10HMOV AAAA,ALCOU: MOV AL,7FHSUB AL,AAAAMOV BBB,ALMOV AX,YK ;将反馈值YK送到屏幕显示CALL DECSHOWMOV DL,0DH ;回车MOV AH,02HINT 21HMOV AH,1 ;判断是否有按键按下INT 16HJZ M1 ;无按键则跳回继续等待,有则退出 EXIT: CLIMOV AL,00H ;退出时停止电机运转MOV DX,MY8255_BOUT DX,ALMOV DX,PC8254_MODE ;恢复PC机定时器0状态 MOV AL,36HOUT DX,ALMOV DX,PC8254_COUNT0MOV AL,00HOUT DX,ALMOV AL,00HOUT DX,ALMOV DX,PCI_INTCSR ;恢复PCI卡中断控制寄存器MOV AX,0000HOUT DX,AXMOV AX,0000H ;恢复INTR原中断矢量MOV ES,AXMOV DI,INTR_IVADDMOV AX,IP_BAK ;恢复INTR原中断处理程序入口偏移地址MOV ES:[DI],AXADD DI,2址MOV ES:[DI],AXMOV DX,INTR_OCW1 ;恢复INTR原中断屏蔽寄存器的屏蔽字MOV AL,IM_BAKOUT DX,ALMOV DI,0020HMOV AX,IP_BAK1 ;恢复定时器0中断处理程序入口偏移地址MOV ES:[DI],AXADD DI,2MOV AX,CS_BAK1 ;恢复定时器0中断处理程序入口段地址MOV ES:[DI],AXMOV AL,IM_BAK1OUT 21H,AL ;恢复屏蔽字STIMOV AX,4C00HINT 21HMYISR PROC NEAR ;系统总线INTR中断处理程序PUSH AXPUSH CXPUSH DXMOV AX,DATAMOV DS,AXMOV AL,MARKCMP AL,01HJZ IN1MOV MARK,01HJMP IN2IN1: MOV MARK,00H ;计算转速VV: MOV DX,0000HMOV AX,03E8HMOV CX,VADDCMP CX,0000HJZ MM1DIV CXMM: MOV ZV,ALMOV VADD,0000HMM1: MOV AL,ZVMOV ZVV,ALIN2: MOV DX,PCI_INTCSR ;清PCI卡控制寄存器标志位MOV DX,PCI_INTCSRADD DX,2MOV AX,003FHOUT DX,AXMOV DX,INTR_OCW2 ;向PC机内部8259发送中断结束命令MOV AL,20HOUT DX,ALMOV AL,20HOUT 20H,ALPOP DXPOP CXPOP AXIRETMYISR ENDPTIMERISR PROC NEAR ;PC机定时器0中断处理程序PUSH AXPUSH CXPUSH DXMOV AX,DATAMOV DS,AXINC TC ;采样周期变量加1CALL KJCLCCMP MARK,01HJC TT1INC VADDCMP VADD,0700H ;转速值溢出,赋极值JC TT1MOV VADD,0700HMOV MARK,00HTT1: MOV AL,20H ;中断结束,发EOI命令OUT 20H,ALPOP DXPOP CXPOP AXIRETTIMERISR ENDPKJ PROC NEAR ;PWM子程序PUSH AXCMP FPWM,01H ;PWM为1,产生PWM的高电平JNZ TEST2MOV FPWM,02HMOV AL,BBBCLCRCR AL,01HMOV VBB,ALJMP TEST2ANOT0: DEC VAAMOV AL, 01H ;PB0=1 电机转动MOV DX, MY8255_BOUT DX,ALTEST2: CMP FPWM,02H ;PWM为2,产生PWM的低电平JNZ OUTTCMP VBB,00HJNZ BNOTOMOV FPWM,01HMOV AL,AAAACLCRCR AL,01HMOV VAA,ALJMP OUTTBNOT0: DEC VBBMOV AL,00H ;PB0=0 电机停止MOV DX,MY8255_BOUT DX,ALOUTT: POP AXRETKJ ENDPPID: MOV AX,BX ;PID子程序SUB AX,YK ;求偏差EKMOV R0,AXMOV R1,AXSUB AX,EK_1MOV R2,AXSUB AX,AEK_1 ;求BEKMOV BEK,AXMOV R8,AXMOV AX,R1 ;求偏差变化量AEKMOV EK_1,AXMOV AX,R2MOV AEK_1,AXTEST R1,8000HJZ EK1 ;若偏差EK为正数,则不需要求补码 NEG R1 ;若偏差EK为负数,则求偏差EK的补EK1: MOV AX,R1 ;判断偏差EK是否在积分分离值的范围内SUB AX,IBANDJC II ;在积分分离值范围内,则跳转到II,计算积分项MOV R3,00H ;若不在积分分离值范围内,则将积分项清0JMP DDD ;计算微分项II: MOV AL,TS ;计算积分项,结果放在R3变量中(R3=EK*TS/KII)MOV AH,00H ;其中TS和KII均为正数,所以R3的正负由EK决定MOV CX,R1MUL CXMOV CX,KIIDIV CXMOV R3,AXTEST R0,8000H ;判断积分项的正负JZ DDD ;为正数,则跳转去计算微分项NEG R3 ;为负数,则将积分项的结果求补码DDD: TEST BEK,8000H ;判断BEK的正负JZ DDD1 ;为正数,则BEK不变NEG BEK ;为负数,则求BEK的补码DDD1: MOV AX,BEK ;计算微分项(R4=KDD*BEK/8TS)MOV CX,KDDMUL CXPUSH AXPUSH DXMOV AL,TSMOV AH,00H ;将微分项缩小8倍,防止溢出MOV CX,0008HMUL CXMOV CX,AXPOP DXPOP AXDIV CXMOV R4,AXTEST R8,8000H ;判断微分项的正负JZ DD1 ;为正数,则结果不需要求补码NEG R4 ;为负数,则微分项结果R4求补码DD1: MOV AX,R3 ;积分项和微分项相加,结果放在R5变量中ADD AX,R4MOV R5,AXL2: MOV AX,R5ADD AX,R2MOV R6,AX ;R6=R5+R2=积分项+微分项+AEKJO L3L5: MOV AX,R6 ;计算KPP*R6MOV CX,KPPIMUL CXMOV CX,1000HIDIV CXMOV CX,AXRCL AH,01H ;判断溢出,溢出赋极值PUSHFRCR AL,01HPOPFJC LLL1CMP CH,00HJZ LLL2MOV AL,7FHJMP LLL2LLL1: CMP CH,0FFHJZ LLL2MOV AL,80HLLL2: MOV R7,AL ;CK=CK_1+CKADD AL,CK_1JO L8L18: MOV CK_1,ALADD AL,80HMOV CK,ALRETL8: TEST R7,80H ;CK溢出处理程序JNZ L17MOV AL,7FH ;若为正溢出,则赋给正极值7FH JMP L18L17: MOV AL,80H ;若为负溢出,则赋给赋极值80H JMP L18L9: TEST R3,8000HJNZ L1MOV R5,7FFFH ;若为正溢出,则赋给正极值7FFFH JMP L2L1: MOV R5,8000H ;若为负溢出,则赋给负极值8000H JMP L2L3: TEST R2,8000HJNZ L4MOV R6,7FFFHL4: MOV R6,8000HJMP L5DALLY PROC NEAR ;软件延时子程序PUSH CXPUSH AXMOV CX,4000HD1: MOV AX,0600HD2: DEC AXJNZ D2LOOP D1POP AXPOP CXRETDALLY ENDPDECSHOW PROC NEAR ;完成两位十进制数显示子程序MOV DX,0MOV BX,10 ;计算AX/10DIV BXADD AL,30H ;商+30H,即为十位数ASCII码 MOV AH,0EHINT 10HADD DL,30H ;余+30H,即为个位数ASCII码 MOV AH,2INT 21HRETDECSHOW ENDPCODE ENDSEND START5 调试及结果5.1 调试步骤:(1)确认从PC机引出的两根扁平电缆已经连接在平台上。