温度传感器控速Word文件下载.docx

上传人:b****3 文档编号:18403467 上传时间:2022-12-16 格式:DOCX 页数:11 大小:192.73KB
下载 相关 举报
温度传感器控速Word文件下载.docx_第1页
第1页 / 共11页
温度传感器控速Word文件下载.docx_第2页
第2页 / 共11页
温度传感器控速Word文件下载.docx_第3页
第3页 / 共11页
温度传感器控速Word文件下载.docx_第4页
第4页 / 共11页
温度传感器控速Word文件下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

温度传感器控速Word文件下载.docx

《温度传感器控速Word文件下载.docx》由会员分享,可在线阅读,更多相关《温度传感器控速Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。

温度传感器控速Word文件下载.docx

4.3液晶显示模块.................................................................8

4.4电机驱动模块.................................................................9

4.5稳压电源模块.................................................................10

五、中断函数以及主程序的主要部分....................................11

一:

概述

本设计基于51单片机控制系统。

系统由温度检测模块、液晶显示模块、电机驱动模块等组成。

温度传感器18b20从空气中感应并采集温度数据,传给控制系统进行处理,控制系统通过分析处理,根据温度的变化来改变产生的脉冲的占空比,从而实现对电机转速的控制。

电机驱动电路则和传统的H桥驱动有所不同,系统采用分离元器件(MOS管)构成电机驱动电路。

并且系统通过控制1602液晶显示屏对空气中的实时温度和电机驱动信号占空比进行显示。

二:

总体设计:

2.1系统组成

系统以stc89c51单片机为控制核心,外围连接液晶显示模块、温度检测模块、电机驱动模块、电源模块。

系统框图如下:

2.2软件设计

电机的转速受其所接受的脉冲信号的控制,占空比越大,转速也就越快.目前最常用的脉冲调制方法为PWM.PWM简称为脉宽调制,它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的方法.但PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有,要么完全没有.

图1为PWM降压斩波器的原理电路及输出电压波形。

在图1a中,假定晶体管V1先导通T1,秒(忽略V1的管压降,这期间电源电压Ud全部加到电枢上),然后关断T2秒(这期间电枢端电压为零)。

如此反复,则电枢端电压波形如图1b中所示。

电动机电枢端电压Ua为其平均值。

图1PWM降压斩波器原理电路及输出电压波形

a)原理图b)输出电压波形

(3)

式(3)中

(4)

为一个周期T中,晶体管V1导通时间的比率,称为负载率或占空比。

使用下面三种方法中的任何一种,都可以改变

的值,从而达到调压的目的:

(1)定宽调频法:

T1保持一定,使T2在0~∞范围内变化;

(2)调宽调频法:

T2保持一定,使T1在0~∞范围内变化

(3)定频调宽法:

T1+T2=T保持一定,使T,在0~T范围内变化。

考虑到频率变化电机的转速会产生影响,本系统采用定频调宽法,具体就是采用定时器方式获得PWM信号.

如下图,定时10us产生一次中断,每次中断根据当前的温度改变占空比.开始时初始化1602和18b20,显示当前温度以及预设的占空比,因为18b20在转换温度时不能中断,否则温度结果出现错误,所以在转换温度前应关闭EA,转换完毕后再开EA.然后把温度划分为几个区域,当温度落在一个区域时就对应一个占空比,这样在下一个中断时就能输出特定占空比的脉冲,实现PWM对直流电机的转速控制.

三:

软件流程图

四:

硬件电路设计:

4.1控制电路模块

系统是基于stc89c51单片机设计而成。

由于系统只对简单的温度传感器电路采集数据进行处理并且控制1602液晶屏的显示和产生电机的驱动信号,所以8位的51系列单片机能够满足系统的需求。

且51单片机应用广泛、价格低廉。

因此,我们选择stc89c51单片机作为系统的处理器。

控制电路还连接了一些必要的外围设备,如LED灯显示、程序下载电路等。

程序下载电路

4.2温度检测模块:

采用温度传感器DS18B20,DS18B20数字温度计提供9位(二进制)温度读数指示器件的温度信息经过单线接口送入DSl8B20或从DSl8B20送出因此从主机CPU到DSl8B20仅需一线(和地线)DSl8B20的电源可以由数据线本身提供而不需要外部电源.。

DSl8B20的测量范围从-55到+125增量值为0.1可在ls(典型值)内把温度变换成数字。

图表9DS18B20与单片机的接口示意图

4.3液晶显示模块:

设计采用1602液晶显示屏。

1602能显示16字*2行,本设计中1602显示温度传感器检测的环境中的温度和系统将温度处理后为电机驱动提供的方波的占空比。

通过屏幕显示的占空比能够间接的感知电机的转速快慢。

图表12液晶显示器1602与单片机接口电路示意图

在上图中,PA4用来控制对1602进行数据输入或者指令输入,指令输入可以对1602内部的一些控制寄存器进行赋值,数据输入是把需要显示的数据传输至1602的存储器中。

PA5用来控制对数据、指令的写或读。

PA6作为使能端,当出现一个正脉冲时,1602将执行指令。

P20—P27则作为数据传输线,完成单片机与1602的数据交换。

15、16端口则是1602的背光电源正负端。

4.4电机驱动模块:

本设计采用的传统小型直流电机,当给一定的PWM信号时就可以驱动它转动。

驱动电路则采用由MOS管所组成的H桥来组成,由PWM信号来控制MOS管的开启与关闭,这样可以提供一定功率的脉冲信号。

当两路信号同时跳变时,会使两个MOS管都导通,所以需要在一边加上一个延时,这样可以减缓MOS管的发热情况。

通过实验我们明白了有两种方案能改变它的转速:

第一种是通过增加它的电压来改变降落在它上面的功率。

所加的电压值越高,会导致MOS管发热明显增强,因此我们只采用7v左右的直流电池供电,测试效果也不错。

另一种是通过软件调整PWM信号的占空比,这样也可以明显的加速电机的转速。

我们就是通过实时监测温度传感器的温度来给电机一个固定的占空比,从而控制电机的转速。

其具体电路图如下:

4.5电源模块:

为了保证整个控制系统和个模块能够正常的工作,在电源供电方面采用+5V的稳压电源为个模块电路供电。

三端稳压IC78系列组成的稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。

首先由变压器将220V交流电变为9V的交流电,通过整流和滤波后,输出电压稳定在9V左右,最后经过7805三端稳压器件稳压,使输出电压恒定在5V左右。

为了防止外围电路对电源的输出造成影响,所以在整流桥后连接一个大容量的电容,使电源更加稳定。

五:

中断函数以及主程序的主要部分

voidtime0()interrupt1

{

if(pwmh==0)

pwm=0;

elseif(pwmh==10)

pwm=1;

else

{

if(count++<

pwmh)

pwm=1;

else//(count++>

=pwmh)

pwm=0;

if(count==10)

count=0;

}

}

voidmain()

{

unsignedchari;

unsignedcharcodewel[]={"

dutyfactor:

0%"

};

unsignedcharcodewell[]={"

NowTemp:

"

unsignedcharcodedigit[10]={"

0123456789"

//定义字符数组显示数字

pwm=0;

init_1602();

write_com(0x80+0x00);

for(i=0;

i<

16;

i++)

write_data(wel[i]);

write_com(0x80+0x40);

10;

write_data(well[i]);

write_com(0x80+0x4c);

write_data('

.'

);

write_com(0x80+0x4e);

write_data(0xdf);

write_data(0x43);

TMOD=0X02;

TL0=255;

TH0=255;

count=0;

TR0=1;

ET0=1;

pwmh=2;

while

(1)

{

EA=0;

ReadyReadTemp();

//读温度准备

TL=ReadOneChar();

//先读的是温度值低位

TH=ReadOneChar();

//接着读的是温度值高位

EA=1;

TN=TH*16+TL/16;

//实际温度值=(TH*256+TL)/16,即:

TH*16+TL/16//这样得出的是温度的整数部分,小数部分被丢弃了

TD=(TL%16)*10/16;

//计算温度的小数部分,将余数乘以10再除以16取整,//这样得到的是温度小数部分的第一位数字(保留1位小数)

k=(TN%100)/10;

//取十位

l=TN%10;

//取个位

write_com(0x80+0x4a);

write_data(digit[k]);

write_data(digit[l]);

write_com(0x80+0x4d);

write_data(digit[TD]);

if(k*100+l*10+TD<

=300)

elseif(k*100+l*10+TD<

=305)

pwmh=3;

=310)

pwmh=4;

=315)

pwmh=5;

=320)

pwmh=6;

=325)

pwmh=7;

=330)

pwmh=8;

=335)

pwmh=9;

write_com(0x80+0x0d);

write_data(digit[pwmh]);

}

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1