单片机课程设计(温度控制直流电动机转速)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
温
度
控
制
电
机
转
速
学院:机电学院
班级:机电111
学号:201100384110
姓名:刘爱华
1 引言
直流电动机具有良好的起动、制动性能,宜于在大范围内平滑调速,在许多需要调速或快速正反向的电力拖动领域中得到了广泛的应用。从控制的角度来看,直流调速还是交流拖动系统的基础。早期直流电动机的控制均以模拟电路为基础,采用运算放大器、非线性集成电路以及少量的数字电路组成,控制系统的硬件部分非常复杂,功能单一,而且系统非常不灵活、调试困难,阻碍了直流电动机控制技术的发展和应用范围的推广。随着单片机技术的不断进步,使得许多控制功能及算法可以采用软件技术来完成,为直流电动机的控制提供了更大的灵活性,并使系统能达到更高的稳定性能。采用单片机构成控制系统,可以节约人力资源和降低系统成本,从而有效的提高工作效率。
2 设计任务与要求
2.1 设计任务
温度控制直流电动机转速 2.2 设计要求
(1)、使用A T89C51单片机为核心,使用4位集成式数码管显示当前温度,温度传感器使用DS18B20,使用L298驱动直流电动机。
(2)、用4位集成式数码管显示当前温度,当温度在C 0
45≥时,直流电动机在L298驱动下加速正转,温度在C 0
75≥全速正转;当温度C 0
10≤时,直流电动机加速反转,温度C 0
0≤时,直流电动机全速反转;温度C C 0
45~10之间时,直流电动机停止转动。
(3)、控制程序在Keil 软件中编写,编译,整个控制电路在Proteus 仿真软件中连接调示。
3 本课程设计的意义
直流电动机作为一种高效率速度控制电动机引人注目、但市场的知名度还小高。许多用户在设备用电动机的选择上经常出现不合理的现象。比如为了实现设备的功能、当变频器控制的异步电动机满足不了要求时就盲目的选用昂贵的伺服电动机、其中有些情况完全可以用价格较低的直流电动机来实现。
采用单片机构成控制系统,可以节约人力资源和降低系统成本,从而有效的提高工作效率,可以实现复杂的控制,控制灵活性和适应性好,无零点漂移,控制精密高,可提供人机界面,多机联网工作。
采用智能功率电路驱动比传统的分立功率器件组成的驱动体积小,功能强;减少了电路元器件数量,提高了系统的可靠性;控制电路哈尔功率电路集成在一起,使监控更容易实现;集成化使电路的连线减少,减少了布线电容和电感以及信号传输的延时,增加了系统抗干扰的能力;集成化使系统成本大大降低。
4 应用软件介绍
4.1 Proteus仿真软件
Proteus是一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机,元件库齐全,使用方便,是不可多得的专业的单片机软件仿真系统。
该软件的特点:
(1)全部满足我们提出的单片机软件仿真系统的标准,并在同类产品中具有明显的优势。
(2)具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS一232动态仿真、1 C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。③目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。④支持大量的存储器和外围芯片。总之该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大,可仿真51、AVR、PIC。
4.2 Keil软件
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。
Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。
5 keil软件编写
5.1 BS18B20温度采集
5.1.1温度采集初始化
void dsreset(void)
{
uint i;
DS=1;
i++;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
DS=1;
}
5.1.2写命令控制温度传感器
void tmpwritebyte(uchar dat) {
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //write 1
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0;
i=8;while(i>0)i--;//write 0 DS=1;
i++;i++;
}
}
}
5.1.3读数据赋值给dat
bit tmpreadbit(void)
{
uint i;
bit dat;
DS=1;
DS=0;i++;i++;
DS=1;i++;
dat=DS;
i=8;while(i>0)i--;
return (dat);
}
uchar tmpread(void)
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)