第六章微机控制系统举例.ppt

上传人:wj 文档编号:2508269 上传时间:2023-05-03 格式:PPT 页数:59 大小:1.79MB
下载 相关 举报
第六章微机控制系统举例.ppt_第1页
第1页 / 共59页
第六章微机控制系统举例.ppt_第2页
第2页 / 共59页
第六章微机控制系统举例.ppt_第3页
第3页 / 共59页
第六章微机控制系统举例.ppt_第4页
第4页 / 共59页
第六章微机控制系统举例.ppt_第5页
第5页 / 共59页
第六章微机控制系统举例.ppt_第6页
第6页 / 共59页
第六章微机控制系统举例.ppt_第7页
第7页 / 共59页
第六章微机控制系统举例.ppt_第8页
第8页 / 共59页
第六章微机控制系统举例.ppt_第9页
第9页 / 共59页
第六章微机控制系统举例.ppt_第10页
第10页 / 共59页
第六章微机控制系统举例.ppt_第11页
第11页 / 共59页
第六章微机控制系统举例.ppt_第12页
第12页 / 共59页
第六章微机控制系统举例.ppt_第13页
第13页 / 共59页
第六章微机控制系统举例.ppt_第14页
第14页 / 共59页
第六章微机控制系统举例.ppt_第15页
第15页 / 共59页
第六章微机控制系统举例.ppt_第16页
第16页 / 共59页
第六章微机控制系统举例.ppt_第17页
第17页 / 共59页
第六章微机控制系统举例.ppt_第18页
第18页 / 共59页
第六章微机控制系统举例.ppt_第19页
第19页 / 共59页
第六章微机控制系统举例.ppt_第20页
第20页 / 共59页
亲,该文档总共59页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第六章微机控制系统举例.ppt

《第六章微机控制系统举例.ppt》由会员分享,可在线阅读,更多相关《第六章微机控制系统举例.ppt(59页珍藏版)》请在冰点文库上搜索。

第六章微机控制系统举例.ppt

第六章微机控制系统举例,单片机控制步进电机系统,通过键盘键入不同的命令,使步进电机实现正转、反转和停止的操作。

并在显示器最右边的数码管上分别显示F、B和0。

具体要求如下:

系统初始化时,显示器显示8个0。

当按下F键时,步进电机正转,并在最右边的数码管上显示F。

当按下B键时,步进电机反转,并在最右边的数码管上显示B。

当按下0键时,步进电机停转,并在最右边的数码管上显示0。

一、系统要求,步进电机工作原理,步进电机驱动原理是切换每相线圈中的电流和顺序,来使电机作步进式旋转。

单片机输出的脉冲信号经驱动电路作用于步进电机的每相线圈。

调节脉冲信号的频率便可改变步进电机的转速。

改变每相驱动脉冲的顺序便可改变步进电机的旋转方向。

步进电机状态不变,则步进电机停转。

脉冲分配方式,步进电机按四相双4拍方式工作。

四相是指有4根相线(A、B、C、D)。

4拍是指有4个循环状态(0、1、2、3)双是指每一个状态中有两个“1”(高电平),计算步进马达的转速,若步进电机的步角是5步进电机每转一步的间隔为20ms。

计算转速。

解:

设转速为n,单位是转/分,则,n=60/电机转一圈所需时间,电机转一圈所需时间=每一步时间360/步角=20360/5=1440(ms)=1.44(s),所以,n=60/1.4441.7转/分,控制步进电机注意点,步进电机启动时驱动脉冲的相位变化不能太快,只能逐步加速。

若步进电机的驱动脉冲的相位不变化,则步进电机停止转动。

二、硬件电路(步进电机驱动电路图),89C58,(键盘显示器电路),电路说明,步进电机的相数为4,即A、B、C、D。

集成电路MC1413是驱动电路,它将单片机输出的信号传递至单片机的相线上。

DE1DE4是连接在相线上的LED,作为显示相线上状态。

单片机输出线P1.0P1.3作为各相脉冲信号的输出线。

三、定时方案,1)单片机采用T0进行定时,T0每隔5ms中断一次。

2)T0与软件计数器配合来制定步进电机转动一步的间隔时间。

四、程序设计框图(主程序),中断服务子程序框图,五、程序设计,M_stateDATA40H;电机工作状态变量,用于确定电机的正转、反转和停止M_CodeDATA41H;状态编码,用于控制电机转动TimerDATA42H;软件计数器变量,用于控制电机转速Key_inBIT00H;键盘状态变量,用于判断是否有键按下,变量定义,主程序,ORG0000HAJMPMAINORG000BHLJMPTimer_0_INTORG0030H;MAIN:

MOVSP,#60HMOVP1,#03H;电机初始化MOVM_state,#00H;MOVM_Code,#33HLCALLInit_8279;MOVTMOD,#01H;将T0设置为方式1定时器MOVTH0,#0EEH;设置T0定时器初值高8位,T0每隔5ms中断一次MOVTL0,#00H;设置T0定时器初值低8位,T0每隔5ms中断一次SETBEA;打开单片机系统中断SETBET0;打开T0中断CLRTR0;关闭T0计数器,主程序(初始化显示缓冲器),MOVR0,#78H;MOVR7,#08H;CLRA;LOOP:

MOVR0,A;INCR0;DJNZR7,LOOPCLRKey_in,主程序(巡视键盘状态),LCALLDISPLOOP1:

LCALLKey_scanJBCKey_in,NEXTSJMPLOOP1NEXT:

CJNEA,#0FH,NEXT1MOVM_state,AMOV7FH,AMOVTimer,#200;设置步进电机转速,每1秒转动1个步角。

SETBTR0;启动T0.LCALLDISPSJMPLOOP1;NEXT1:

CJNEA,#0BH,NEXT2MOVM_state,AMOV7FH,AMOVTimer,#200;设置步进电机转速,每1秒转动1个步角。

SETBTR0;启动T0.LCALLDISPSJMPLOOP1,主程序(巡视键盘状态),NEXT2:

CJNEA,#0,LOOP1;MOVM_state,AMOV7FH,ACLRTR0;关闭T0,步进电机停止转动。

LCALLDISPSJMPLOOP1,8279初始化子程序,Init_8279:

;8279初始化C8279EQU0E001H;定义8279控制口地址D8279EQU0E000H;定义8279数据口地址MOVDPTR,#C8279;设置8279控制口指针MOVA,#0H;8X8左边输入显示,编码键盘扫描,双键封锁.MOVXDPTR,A;写8279方式字MOVA,#2AH;分频系数为10.MOVXDPTR,A;写分频系数MOVA,#0D0H;将显示RAM清0控制字.MOVXDPTR,A;清显示DISP1:

MOVXA,DPTR;读入FIFO状态字JBACC.7,DISP1;判断8279工作是否正常RET,显示子程序,DISP:

;显示子程序,缓冲区为78H-7FHMOVA,#90H;写显示数据命令MOVDPTR,#C8279;设置8279控制口指针MOVXDPTR,A;设置从左边开始写入数据MOVR0,#78H;设置指针,准备送入显示数据.MOVR6,#08HDISP2:

MOVA,R0;从显示缓存器取数据.MOVDPTR,#TABMOVCA,A+DPTR;转换成显示码.MOVDPTR,#D8279;设置8279数据口指针.MOVXDPTR,A;将显示码送到8279显示RAM.INCR0;调整显示缓存器指针.DJNZR6,DISP2RETTAB:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;0,1,2,3,4,5,6,7DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;8,9,A,B,C,D,E,FDB73H,3EH,40H,6EH,76H,38H,00H,80H;P(10),U(11),-(12),Y(13),H(14),L(15),关(16),.(17),键盘扫描子程序,Key_scan:

;键盘扫描子程序MOVDPTR,#C8279MOVXA,DPTRANLA,#07HCJNEA,#0H,GET1SJMPKEY4GET1:

MOVA,#40H;有键输入,则设置读FIFO/RAM数据命令.MOVXDPTR,A;发出读FIFO/RAM数据命令.MOVDPTR,#D8279MOVXA,DPTRMOVB,AMOVR2,#00HMOVDPTR,#KEYDATA,键盘扫描子程序续,KEY1:

MOVA,#00HMOVCA,A+DPTRCJNEA,B,KEY2SJMPKEY3KEY2:

INCDPTRINCR2SJMPKEY1KEY3:

MOVA,R2SETBKey_inKEY4:

RETKEYDATA:

DB00H,08H,10H,18H,01H,09H,11H,19H;键值表DB02H,0AH,12H,1AH,03H,0BH,13H,1BH,T0中断服务子程序(驱动步进电机),Timer_0_INT:

PUSHPSW;PUSHACC;MOVPSW,#08H;MOVTH0,#0EEH;ORLTL0,#00HDJNZTimer,T_RETURNMOVA,M_state;CJNEA,#0FH,T_NEXTMOVA,M_Code;RLA;MOVM_Code,A;MOVP1,A;MOVTimer,#200;SJMPT_RETURN;,T0中断服务子程序(驱动步进电机)续,T_NEXT:

CJNEA,#0BH,T_RETURNMOVA,M_Code;RRA;MOVM_Code,A;MOVP1,A;MOVTimer,#200;T_RETURN:

POPACC;POPPSW;RETIEND,单片机控制直流电机系统,一、系统要求,1)显示要求:

系统初始化时,左边4个显示器显示4个0,左起第5个显示器关闭,左起第6、7个显示器显示8、0,最右边一个显示器显示C。

系统在测试时,左边4个数码管显示电机转速;左起第6、7个显示器显示D/A转换器的数字量;最右边的数码管显示电机的状态,当电机正转、反转和停止时,最右边的数码管显示分别F、B和C。

2)键盘要求:

键入F、B或C命令,分别使电机正转、反转和停止。

键入E命令,使D/A转换器的输入数字量加1。

键入A命令,使D/A转换器的输入数字量减1。

键入D命令,采用负反馈方式使电机以2000转/分的速度正转。

二、系统硬件电路方框图,三、系统硬件图D/A转换器及其放大电路,P0口,89C58,(键盘显示器电路),直流电机工作原理及其驱动电路,图中AOUT是来自运算放大器的模拟电压信号。

当AOUT0.7v,则晶体管T2导通、T1截止,使加入直流电机的电压VCTRL为正,电机正转。

当AOUT-0.7v,则晶体管T1导通、T2截止,使加入直流电机的电压VCTRL为负,电机反转。

电压VCTRL的绝对值越大,则电机转速越快。

电压VCTRL的绝对值越小,则电机转速越慢。

当电压VCTRL=0,则电机停止转动。

电机转速测试装置,电机转速测试电路,转速计算公式,Ttest是测试时间,单位是秒;N是测试时间内计入的脉冲信号数,以上公式的转速单位是转/分。

若Ttest=1秒;则转速n=5*N,转速单位是转/分。

四、系统软件框图(主程序框图),初始化程序框图,显示键盘扫描子程序框图,键命令处理子程序框图,T0中断服务子程序INT0中断服务子程序,五、系统源程序设计,M_stateDATA40H;电机工作状态变量DAC_0832DDATA41H;D/A转换器输入变量Timer_1sDATA42H;定时软件计数器变量CounterHDATA43H;电机转盘输出脉冲数变量高8位CounterLDATA44H;电机转盘输出脉冲数变量低8位DAC0832_addrEQU8000H;定义D/A转换器接口地址Key_inBIT00H;键盘状态变量,变量说明,主程序,ORG0000HAJMPMAINORG0003HLJMPINT_0ORG000BHLJMPTimer0_INTORG0030HMAIN:

LCALLInit_sp_bit_dataLCALLInit_8279_T0_INTLCALLInit_D_MLOOP:

LCALLDISPLCALLKey_scanJBCKey_in,Do_keyProSJMPLOOPDo_keyPro:

LCALLKey_processSJMPLOOP,初始化程序(堆栈、变量),Init_sp_bit_data:

MOVSP,#70HMOVPSW,#0CLRKey_in;MOVM_state,#0CH;电机初始状态是停止MOVDAC_0832D,#80H;D/A转换器输入变量初始值为80H,使输出的模拟量为0V。

MOVTimer_1s,#20;定时软件计数器变量初值为20,使测量时间为1秒MOVCounterH,#0;电机转盘生产脉冲计数器高8位清零MOVCounterL,#0;电机转盘生产脉冲计数器低8位清零RET,8279、T0、中断初始化,Init_8279_T0_INT:

C8279EQU0E001H;定义8279控制口地址D8279EQU0E000H;定义8279数据口地址MOVDPTR,#C8279;设置8279控制口指针MOVA,#0H;8X8左边输入显示,编码键盘扫描,双键封锁.MOVXDPTR,A;写8279方式字MOVA,#2AH;分频系数为10.MOVXDPTR,A;写分频系数MOVA,#0D0H;将显示RAM清0控制字.MOVXDPTR,A;清显示DISP1:

MOVXA,DPTR;读入FIFO状态字JBACC.7,DISP1;判断8279工作是否正常,8279、T0、中断初始化续,MOVTMOD,#01HMOVTH0,#4CH;设置定时器初值,使T0定时50ms。

MOVTL0,#00H;设置定时器初值,使T0定时50ms。

MOVIP,#01HCLRTR0;SETBEA;SETBIT0;CLRET0;CLREX0;RET;,显示缓冲器、电机初始化,Init_D_M:

MOVR0,#60H;60H67H为单片机显示RAMMOVR7,#04H;CLRA;ILOOP:

MOVR0,A;INCR0;DJNZR7,ILOOPMOVR0,#16H;INCR0;MOVR0,#08HINCR0;MOVR0,#00H;INCR0;MOVR0,#0CH;MOVDPTR,#DAC0832_addrMOVA,DAC_0832DMOVXDPTR,ARET,显示子程序,DISP:

;显示子程序,缓冲区为60H-67HMOVR0,#60H;设置指针,准备送入显示数据.MOVR6,#08HMOVA,#90H;写显示数据命令MOVDPTR,#C8279;MOVXDPTR,A;设置从左边开始写入数据DISP2:

MOVA,R0;从显示缓存器取数据.MOVDPTR,#TABMOVCA,A+DPTR;转换成显示码.MOVDPTR,#D8279;设置8279数据口指针.MOVXDPTR,A;将显示码送到8279显示RAM.INCR0;调整显示缓存器指针.DJNZR6,DISP2RET;共阴极显示码TAB:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;0,1,2,3,4,5,6,7DB7FH,6FH,77H,7CH,39H,5EH,79H,71H;8,9,A,B,C,D,E,FDB73H,3EH,40H,6EH,76H,38H,00H,80H;P(10),U(11),-(12),Y(13),H(14),L(15),关(16),.(17),键盘扫描子程序,Key_scan:

;键盘扫描子程序MOVDPTR,#C8279MOVXA,DPTRANLA,#07HCJNEA,#0H,GET1SJMPKEY4GET1:

MOVA,#40H;有键输入,则设置读FIFO/RAM数据命令.MOVXDPTR,A;发出读FIFO/RAM数据命令.MOVDPTR,#D8279MOVXA,DPTRMOVB,AMOVR2,#00HMOVDPTR,#KEYDATA,键盘扫描子程序续,KEY1:

MOVA,#00HMOVCA,A+DPTRCJNEA,B,KEY2SJMPKEY3KEY2:

INCDPTRINCR2SJMPKEY1KEY3:

MOVA,R2SETBKey_inKEY4:

RETKEYDATA:

DB00H,08H,10H,18H,01H,09H,11H,19H;键值表DB02H,0AH,12H,1AH,03H,0BH,13H,1BH,键输入处理子程序,Key_process:

CJNEA,#0FH,NEXT1MOVM_state,AMOVA,#0FFHMOVDAC_0832D,AMOVDPTR,#DAC0832_addrMOVXDPTR,A;SETBTR0;SETBET0;SETBEX0;MOV65H,#0FH;MOV66H,#0FH;MOV67H,#0FH;LJMPRETK,键输入处理子程序续,NEXT1:

CJNEA,#0BH,NEXT2MOVM_state,ACLRAMOVDAC_0832D,AMOVDPTR,#DAC0832_addrMOVXDPTR,A;SETBTR0;SETBET0;SETBEX0;MOV65H,#0;MOV66H,#0;MOV67H,#0BH;AJMPRETK,键输入处理子程序续,NEXT2:

CJNEA,#0CH,NEXT3;MOVM_state,AMOVA,#80HMOVDAC_0832D,AMOVDPTR,#DAC0832_addrMOVXDPTR,A;SETBTR0;SETBET0;SETBEX0;MOV65H,#8;MOV66H,#0;MOV67H,#0CH;SJMPRETKNEXT3:

CJNEA,#0EH,NEXT4MOVA,DAC_0832DCJNEA,#0FFH,Do_inc;如果原变量值小于FFH,则变量加1.SJMPRETK,键输入处理子程序续,Do_inc:

INCDAC_0832D;变量加1MOVA,DAC_0832D;变量值送ACCMOVDPTR,#DAC0832_addrMOVXDPTR,A;变量值送D/A转换器MOVB,AANLA,#0FHMOV66H,A;将变量值低4位送66H显示缓冲器MOVA,BANLA,#0F0H;SWAPAMOV65H,A;将变量值高4位送66H显示缓冲器SJMPRETK,键输入处理子程序续,NEXT4:

CJNEA,#0AH,NEXT5MOVA,DAC_0832DCJNEA,#00H,Do_dec如果原变量值小于FFH,则变量加1.SJMPRETKDo_dec:

DECDAC_0832D;变量减1MOVA,DAC_0832D;变量值送ACCMOVDPTR,#DAC0832_addrMOVXDPTR,A;变量值送D/A转换器MOVB,AANLA,#0FHMOV66H,A;将变量值低4位送66H显示缓冲器MOVA,BANLA,#0F0H;SWAPAMOV65H,A;将变量值高4位送66H显示缓冲器SJMPRETK,键输入处理子程序续,NEXT5:

CJNEA,#0DH,RETK;判断是否反馈控制MOVM_state,A;如果是反馈控制,则将电机工作状态变量值0DHMOV67H,A;电机工作状态变量值0DH送显示缓冲器MOVA,#0E0H;将E0H送ACCMOVDAC_0832D,A;将E0H送D/A转换器输入变量MOVDPTR,#DAC0832_addrMOVXDPTR,A;将E0H送D/A转换器,使产生接近2000转/分转速SETBTR0;SETBET0;SETBEX0;MOVB,AANLA,#0FHMOV66H,AMOVA,BANLA,#0F0H;SWAPAMOV65H,ARETK:

RET;,T0中断服务子程序,Timer0_INT:

PUSHACC;PUSHPSW;PUSHB;PUSHDPH;PUSHDPL;MOVPSW,#08H;改变寄存器工作区MOVTH0,#4CH;T0重新赋初值ORLTL0,#00H;T0重新赋初值DJNZTimer_1s,RETT;MOVTimer_1s,#20;定时软件计数器重新赋初值MOVR3,CounterH;将脉冲计数值高8位送R3MOVR2,CounterL;将脉冲计数值低8位送R3MOVCounterH,#0;将脉冲计数值高8清0MOVCounterL,#0;将脉冲计数值低8清0,转速计算程序段,;计数信号数乘5,完成转速的计算MOVA,R3;MOVR5,A;MOVA,R2;MOVR4,A;CLRC;MOVA,R2RLCA;MOVR2,AMOVA,R3RLCAMOVR3,AMOVA,R2;RLCAMOVR2,AMOVA,R3,RLCAMOVR3,AMOVA,R2ADDA,R4MOVR2,AMOVA,R3ADDCA,R5MOVR3,A,判断电机转速是否大于或小于2000转/分,;判断是否进行负反馈控制,是则输出调整量MOVA,M_state;CJNEA,#0DH,SKIPMOVA,#07H;07D0H=2000CLRCSUBBA,R3JCTO_BIGGERJNZTO_SMALLERMOVA,#0D0HSUBBA,R2JCTO_BIGGERJNZTO_SMALLERSJMPSKIP,输出反馈控制量,TO_BIGGER:

DECDAC_0832D;使D/A转换器输入变量减1SJMPOUTPUTTO_SMALLER:

INCDAC_0832D;使D/A转换器输入变量加1OUTPUT:

MOVA,DAC_0832D;D/A转换器输入变量送ACCMOVDPTR,#DAC0832_addrMOVXDPTR,A;D/A转换器输入变量送D/A转换器MOVB,AANLA,#0FHMOV66H,AMOVA,BANLA,#0F0H;SWAPAMOV65H,A,T0中断服务子程序续,SKIP:

LCALLCALCULATE;将16进制的转速值转换成BCD码,供显示RETT:

POPDPL;POPDPH;POPB;POPPSW;POPACC;RETI;,将电机转速值转换成BCD码,CALCULATE:

;将16进制的转速值转换成BCD码,供显示CLRA;MOVR4,AMOVR5,A;MOVR7,#16BLP0:

CLRC;MOVA,R2RLCAMOVR2,AMOVA,R3;RLCA;MOVR3,AMOVA,R4;ADDCA,R4;DAA;MOVR4,AMOVA,R5;ADDCA,R5;DAA;MOVR5,ADJNZR7,BLP0,将转速BCD码送显示缓冲器,;将转速的BCD码数据送入单片机显示RAMMOVA,R5;ANLA,#0F0H;SWAPA;MOV60H,AMOVA,R5ANLA,#0FH;MOV61H,AMOVA,R4;ANLA,#0F0H;SWAPA;MOV62H,AMOVA,R5ANLA,#0FH;MOV63H,ARET;,外部中断0服务子程序(转盘脉冲计数程序),INT_0:

;外部中断0中断服务子程序,对直流电机旋转发出的脉冲进行计数PUSHACC;PUSHPSWMOVA,CounterLADDA,#1MOVCounterL,AJNCRETINT_0INCCounterHRETINT_0:

POPPSWPOPACCRETIEND,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2