P3.4/TOpa.srri
P3.GW
P3.7.'RD
3Q
3£
1
37曲
35
32
21
—
23
即
26
sa
27
2S
10
11~\2
is
1T
1
15
"Ta
17
AT89C51(如图2)是一种带4K字节FLASH存储器(FPERO—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C51提供以下标准功能:
4k字节Flash闪速存储器,128字节内部RAM32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C5何降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU
的工作,但允许RAM定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
其优点是支持较为丰富而且简
图2AT89C51单的指令集,
编程器通用且兼容性好,具有单片机的典型代表性。
因此,该系列单片机在自动控制中应用最为广泛。
3.2电机与驱动模块的工作原理与接口
3.2.1H桥驱动电路原理
在实际的直流电机驱动电路应用中,可以使用H桥(图3)来驱动直流电机,也可以使用相应的驱动芯片来驱动直流电机。
本次实训中我们采用H桥电路来驱动直流电机。
H桥采用4个功率MOSFE管两两组成一个桥壁,每个三极管旁边有一个续流二极管,当对角线上两个三极管打开时,电机朝一个方向运转;另一条对角线上的三极管打开时,电机反转。
功率MOSFE管可以将微弱的信号放大成幅值较大的电信号,是单片机系统中最常用的功率驱动器件。
图3H桥驱动电路截图
3.2.2PWM脉冲控制信号产生原理及控制
脉冲宽度调制(pwm是一种对模拟信号电平进行数字编码的方法。
脉冲宽度调制是一种模拟控制方脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
在PWME动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。
通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。
占空比在一段连续工作时间内脉冲占用的时间与总时间的比值。
例如:
脉冲宽度1[1s,信号周期4卩s的
脉冲序列占空比为0.25。
采用定频调宽法,用单片机TOT1定时计数器,T0不变,改变T1计数时间来改变脉冲宽度,从而控制电机的加速与减速(如图4所示)
程序更位皓启斗j
「】宀止
ClASSiLJ.^O
TPl'ftfi屮蜥时"挣止CLK牺出瘦为L
TW新
屮tfiiirro初姑化井恭蛭运存
T1迳和「菇开JH
£UC辑出变為0
Tl'PEfi中斷旳"序止CLK输卅痩为1
中斷时TO啊晞化井
门定时禺肝启口-K辎岀喪为O
PWM脉宽调节示意图
3.3硬件系统设计.
图5硬件流程设
图6电路截图
4功能方案及软件设计
4.1功能设计
通电开机后,CPU得电,根据软件定义引脚功能,定时器工作方式等。
并进入键盘扫描子程序。
当检测到键盘动作时,经过延时子程序去抖,确定按键按下后,申请中断。
单片机读取键值,并根据软件调节PWM波形,向外输出,控制电机的加速、减速、反转。
4.2软件设计
流程图如下:
>~>4~
图7程序流程框图
具体程序代码如下:
#inelude
#include
sbitK1=P1A4;//
sbitK2=P1A5;//
sbitK3=P1A6;
sbitCLK=P0A0;
sbitZF=P0A1;
unsignedcharPWMH=0x00;unsignedcharPWML=0x0f;
voidtimer0()interrupt1using0
{
TR1=0;
TH0=0x00;
TL0=0x00;
TH1=PWMH;
TL1=PWML;
TR1=1;
CLK=0;//
}
voidtimer1()interrupt3using0
{
TR1=0;
CLK=1;//
}
voiddelay(unsignedcharm)
{
unsignedchari;
while(m--)
{
for(i=0;i<5;i++);
}
}
voidmain()
{
CLK=0;
加速键
减速键
//正反控制键
//PWM输出控制信号
//正反控制信号
//定时器0中断服务程序
启动输出
//定时器1中断服务程序
结束输出
//MS延时
TMOD=0x11;
TH0=0x00;
TL0=0x00;
TH1=PWMH;
TL1=PWML;
//65.535ms
延时常数
EA=1;
//CPU
允许中断
ET0=1;
//
允许定时器T0中断
ET1=1;
//
允许定时器T1中断
TR0=1;
while
(1)
{if(K3==0)
{ZF=0;}else{ZF=1;}
if(K1==0)
//
定时器T0计数
{delay
(1);
PWML++;if(PWML==0x00){PWMH++;}if(PWMH==0xFF){PWMH=0xFE;}
}
if(K2==0)
{delay
(1);
PWML--;
if(PWML==0x00){PWMH--;}if(PWMH==0x00){PWMH=0x01;}
}
}
}
5功能调试与总结
5.1功能调试
5.1.1开发软件介绍
程序开发软件:
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
本次设计使用的版本是KeiluVision4。
硬件仿真软件:
Proteus软件是一种低投资的电子设计自动化软件,多达30多个元
件库。
Proteus软件提供多种现实存在的虚拟仪器仪表。
此外,Proteus还提供图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来。
这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗,尽可能减少仪器对测量结果的影响,Proteus软件提供丰富的测试信号用于电路的测试。
Proteus在编译方面支持Keil编译器。
当电路设计完成之后,为了减少在电路板上调试时的难度,保证电路设计的正确性,将Keilc51编译生成的*.HEX文件载入Proteus软件,实现电路
图8初始状态
图9加减速正转状态
5.1.3问题分析与解决
1)一开始对单片机控制直流电机的工作原理完全没有头绪,PWMH桥根本看不懂
是什么东西,然后不断的XX查资料,看别人的毕业论文、XX百科等等才初步知道关于这个题目的大体原理和思路是什么,但也仅仅是皮毛;
2)在画图的时候不够仔细,绘制H桥电路的时候在细节方面出现了错误,导致电机任性地不转,仔细检查后改正了图中错误,电机转起来的时候很开心;
3)编写程序的时候本来是想自己试试能不能独立完成,还是知识欠缺的太多,流程图画完之后不知道该怎么编,还是借鉴了别人的程序才完成了编写。
别人的程序开始也不太看的明白,每天都会花时间看,到现在也不能保证每一个地方都能讲清楚,还是需要不断地研究和努力。
5.2主要工作与总结
2实训任务及要求
1实训目的
错误!
未定义书签。
错误!
未定义书签。