第一章 设计说明
课题简介
设计一个恒张力收盘控制系统,就是要控制卷取物体时保持物体相互拉长或者绷紧的力。张力应用于最广泛的造纸、纤维、塑料薄膜、电线、印刷品、磁带等轻工业中,带材或线材的收放卷张力对产品的质量起着至关重要的作用。在收卷和放卷的过程中,为保证生产的质量及效率,保持恒定的张力是很重要的。本系统采用人及交互式的控制方法,由使用者输入设定张力值,通过磁粉制动器、传感器、转换芯片与单片机组成一个闭环系统,使张力恒定在设定值,达到恒张力控制的效果。 设计目的
通过本次课题设计,应用《单片机原理及应用》等所学相关知识及查阅资料,完成恒张力收盘控制系统的设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能力的目的。通过本次设计的训练,可以使我在基本思路和基本方法上对基于MCS-51单片机的嵌入式系统设计有一个比较感性的认识,并具备一定程度的设计能力。 设计任务
在本次课程设计中,主要完成如下方面的设计任务: 1、设计单片机系统原理图(A0,PROTEL/CAD或手画); 2、编写系统程序(主程序+子程序); 3、写设计说明书;(设计说明,程序流程图,程序); 4、答辩(十九周周四下午两点);
设计方法
由按键驱动单片机中断,进入按键及显示程序,通过使用者输入数据并通知在LED上显示,输入数据储存在相关区域内备之后使用,返回到主程序后单片机接受由力传感器产生的经AD转换芯片转换后的数字力信号,通过与之前设定值的比较计算,得出控制信号,经DA转换芯片变为模拟电压信号输入磁粉制动器控制端。若没有键盘中断,则如此往复运行信号检测、运算、输出程序达到动态平衡。
力传感器 AD转换芯片 单 键盘 片机 DA转换磁粉制动器 芯片 六位数码管显示 第二章 硬件设计及芯片介绍
硬件系统是指构成微机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。单片机实质上是一个硬件的芯片,在实际应用中,通常很难直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机应用系统。本设计选用以ATS51单片机为主控单元。
单片机的选择
ATS51是美国ATMEL公司声场的低功耗,高新能CM058位单片机,片内含4k bytes的可系统编程Flash只读程序存储器,器件采用ATMEL公司的高密度,非易失性存储技术生产,兼容标准8051指令系统及引脚。它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中,ATMEL公司的功能强大,价位低ATS51单片机可以提供欧许多高性价比的应用场合,可灵活应用于各种控制领域。图3所示为采用双列直插式封装的ATS51芯片管脚图。
18X2U?3119EA/VPX1P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7RDWRPSENALE/PTXDRXD393837363534333221222324252627281716293011109RESET1213141512345678INT0INT1T0T1P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7ATS51图3
A/D转换芯片的选择
ADC0809是美国生产的CN10S工艺的8通道,八位逐次逼近式的A/D转换器,分辨率为8位,满足系统要求。 管脚功能说明如下:
IN0~IN7: 8路模拟信号入口 D0~D7: 八位转换后的数据输出口 START: A/D转换启动信号 ALE: 地址锁存信号 EOC: 转换结束信号 OE: 输出运行控制端 CLK: 时钟信号
VREF+: A/D转换器的正参数电压 VREF-: A/D转换器的负参数电压 VCC: 电源
ADDA、ADDB、ADDC: 模拟信号接通的多路开关选择码
D/A转换芯片的选择
DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。所以这个芯片的应用很广泛,关于DAC0832应用的一些重要资料见下图:
DI0~DI7:数据输入线,TLL电平。
ILE:数据锁存允许控制信号输入线,高电平有效。 CS:片选信号输入线,低电平有效。 WR1:为输入寄存器的写选通信号。
XFER:数据传送控制信号输入线,低电平有效。 WR2:为DAC寄存器写选通输入线。
Iout1:电流输出线。当输入全为1时Iout1最大。 Iout2: 电流输出线。其值与Iout1之和为一常数。 Rfb:反馈信号输入线,芯片内部有反馈电阻. Vcc:电源输入线 (+5v~+15v) Vref:基准电压输入线 (-10v~+10v)
AGND:模拟地,摸拟信号和基准电源的参考地.
DGND:数字地,两种地线在基准电源处共地比较好.
DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转 换成电压。
外部储存器的选择
选用28A外部存储器,采用E2PROOM的突出优点是能够在线擦出,还有掉电不丢失等优点。
锁存器
74LS1是高速硅门 CMOS 器件,与低功耗肖特基型 TTL (LSTTL) 器件的引脚兼容。74HC1、74HCT1 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。数据通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。 时钟 (CP) 每次由低变高时,数据右移一位,输入到 Q0, Q0 是两个数据输入端(DSA和 DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。
主复位 (MR) 输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。
第三章 程序框图
主程序流程图 外部中断键盘LED程序
开始 初始化 调用AD转换子程序 调用数据处理子程序 调用DA转换子程序 开始 初始化 设置为读键盘功能 读取输入值 切换到显示功能 显示输入值 回到主程序
开始 是否转换完 是 否 读取数据 处理数据 将数据存放在指定区域中备用 回到主程序
AD转化流程图
开始 处理键盘输入数据 将键盘输入值减去AD转化值 正 是正是负? 负 输出值加上差 输出值减去差 回到主程序 数据处理流程图
第四章 程序
ORG 0000H LJMP MAIN ORG 0013H LJMP INT1 ORG 0003H
LJMP INT0
MAIN:主程序开始
MOV IE,#85H;打开中断总开关和两个外部中断 MOV IP,#01H;设中断0为高优先级,1为低优先级 LCALL ADCHANGE;调用AD转换子程序 LCALL DATATREAT;调用数据处理子程序 LCALL DACHANGE;调用DA转换子程序 CPL P1.5 SIMP MAIN INT0:外中断0
SETB PCON.1 RETI
************************************************************
ADCHANGE: SETB DACS CLK EQU P1.1 DATA EQU Q1.2 ADCS EQU Q1.3
ORG 0100H
ADMAIN:ADLOOP1:CJNE P1.1,#1H,ADLOOP1;查看是否转换完,若没有,则等待 MOV SP,#60H
MOV A,#0FFH CLR CLK CLR ADCS SETB P1.4 SETB P1.5 SETB DATA1 MOV R5,#8
ADCONVTER:PUSH ACC CLR ACC
CLR ADCS ADLOOP:MOV C,DATA;读取前8位数据到A中 RLC A SETB CLK NOP
CLR CLK
DJNZ R5,ADLOOP
;读后两位存放在B中
MOV C,DATA MOV B.1,C SETB CLK NOP
CLR CLK MOV C,DATA MOV B.0,C SETB CLK NOP CLR CLK ;数据处理 RL A RL A
MOV C,ACC.1 MOV B.3,C MOV C,B.1 MOV ACC.1,C MOV C,ACC.0 MOV B.2,C MOV C,B.0 MOV ACC.0,C ;把低八位数据放到2FH单元 MOV 2FH,A
;把高八位数据放到2EH单元 MOV A,B RR A RR A
ANL A,#03H MOV 2EH,A POP PSW POP ACC
RET
****************************************************** INT1:PUCH ACC PUSH PSW CLR EA PUSH PSW PUSH ACC
SETB EA
MOV DPTR,#7FFFH;置8279命令/状态口地址 MOV A,#0D1H ;置清显示命令 MOVX @DPTR,A ;送清显示命令 WEIT:MOVX A,@DPTR ;读状态
JB ACC.7,WEIT ;等待清显示RAM结束
MOV A,#34H ;置分频系数,晶振频率12MHZ MOVX @DPTR,A ;送分频系数 MOV A,#40H ;置键盘/显示命令 MOVX @DPTR,A ;
MOV IE,#84H ;允许8279中断
键盘中断子程序如下: KEY:PUSH PSW PUSH DPL PUSH DPH PUSH ACC
PUSH B SETB PSW.3
MOV DPTR,#7FFFH ;置状态口地址 MOVX A,@DPTR ;读FIFO状态
ANL A,#0FH ; JZ PKYR ;
MOV A,#40H ;置读FIFO命令 MOVX @DPTR,A ;
MOV DPTR,#7FFEH ;置数据口地址 MOVX A,@DPTR ;读数据 MOV R3,#6
MOV R0,#30H
LJMP KEY1 ;转键值处理程序 PKYR:POP B POP ACC POP DPH POP DPL POP PSW
LCALL DIS
KEY1:CJNE A,#0C0H,KEY2 MOV @R0,#1 INC R0 DJNZ R3,KEY1 SJMP PKYR
KEY2:CJNE A,#0C8H,KEY3 MOV @R0,#2 INC R0 DJNZ R3,KEY1 SJMP PKYR
KEY3:CJNE A,#0D0H,KEY4 MOV @R0,#3 INC R0
DJNZ R3,KEY1 SJMP PKYR
KEY4:CJNE A,#0D8H,KEY5 MOV @R0,#4 INC R0 DJNZ R3,KEY1 SJMP PKYR
KEY5:CJNE A,#0C1H,KEY6 MOV @R0,#5 INC R0 DJNZ R3,KEY1 SJMP PKYR
KEY6:CJNE A,#0C9H,KEY7 MOV @R0,#6 INC R0
DJNZ R3,KEY1 SJMP PKYR
KEY7:CJNE A,#0D1H,KEY8 MOV @R0,#7 INC R0 DJNZ R3,KEY1 SJMP PKYR
KEY8:CJNE A,#0D9H,KEY9 MOV @R0,#8 INC R0 DJNZ R3,KEY1 SJMP PKYR
KEY9:CJNE A,#0C0H,KEY0 MOV @R0,#9 INC R0 DJNZ R3,KEY1 SJMP PKYR KEY0:MOV @R0,#0 INC R0 DJNZ R3,KEY1 SJMP PKYR 显示子程序如下:
DIS:MOV DPTR,#7FFFH ;置8279命令/状态口地址 MOV R0,#30H ;字段码首地址 MOV R7,#06H ;8位显示
MOV A,#90H ;置显示命令字 MOVX @DPTR,A ;
MOV DPTR,#7FFEH ;置数据口地址 LP:MOV A,@R0 ;取显示数据
ADD A,#0BH ;加偏移量
MOVC A,@+PC ;查表,取得数据的段码 MOVX @DPTR,A ;送段码显示 INC R0 ;调整数据指针 DJNZ R7,LP CLR EA
POP ACC
POP PSW ;出栈 SETB EA
RETI
SEG:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;用共阴极LED **************************************************************** DATATREAT: PUSH ACC PUSH PSW MOV R3,#4 MOV R4,#2 MOV A,31H RL A RL A RL A
RL A
MOV 31H,A DATALOOP1:MOV A,31H RLC A
MOV A,30H RLC A
DJNZ R3,DATALOOP1;将键盘输入数据放入30H中 MOV B,#4H MOV A,2EH DIV AB
ANL A,#03H MOV 2EH,A MOV 2FH DIV AB
ANL A,#0FDH MOV 2FH,A
DATALOOP2:MOV A,2EH RRC A MOV 2EH,A MOV A,2FH
RRC A
MOV 2FH,A
DJNZ R4,LOOP2;将AD装换输入的十位数转换为八位并且存放到2FH单
元中
CLR C MOV R5,C MOV A,30H
SUBB A,2FH;将键盘输入值减去AD输入值 MUL AB CJNE R5,#0,JIAN ADDC A,@R1 MOV @R1,A SJMP DATALOOP3 JIAN:XCH A,@R1 SUBB A,@R1 MOV @R1,A DATALOOP3:POP PSW POP ACC RET
********************************************* 设转换之前把高8位放在R1中,把低4位放在R0的高四位中,其中底2位填充位为任意位,需要在运行此程序前处理好数据
DACHANGE: SETB ADCS
P1.4 EQU DACS P1.1 EQU CLK P1.2 EQU DIN CLR CLK
CLR DACS;此芯片必须在SCLK为低的情况下把片选拉低 SETB P1.3 SETB P1.5 MOV R3,#8 MOV A,R1
ADLOOP1:RLC A MOV DIN,C SETB CLK NOP
CLR CLK
DJNZ R3,ADLOOP1 MOV R3,#4 MOV A,R0 ADLOOP2:RLC A MOV DIN,C SETB CLK NOP
CLR CLK
DJNZ R3,ADLOOP2
RET