教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 法律文档 >

基于单片机的温度控制直流电动机转速系统设计 - 图文(8)

来源:网络收集 时间:2025-09-22
导读: 基于单片机的温度控制直流电动机转速系统设计 温度范 T≥45℃ T≤10℃ 10℃<T<45℃ 正转 反转 停止 全速 ≥75 加速 45≤T加速 0<T≤全速 T≤0 返回 图22温度控制电机转速 4.2各模块程序说明 4.2.1温度采集模块 (

基于单片机的温度控制直流电动机转速系统设计

温度范 T≥45℃ T≤10℃ 10℃<T<45℃ 正转 反转 停止 全速 ≥75 加速 45≤T加速 0<T≤全速 T≤0 返回

图22温度控制电机转速

4.2各模块程序说明

4.2.1温度采集模块

(1) DS18B20初始化程序 uchar Init_DS18B20() { uchar

DQ=1;Delay(8);DQ = 0;Delay(90);

DQ=1;Delay(8);status = DQ;Delay(100);DQ=1; return status; //初始化成功返回0

第XXXVI页 共51页

!!!学院毕业设计

}

(2)温度字符

uchar code_temperature_char[8]

={0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00,0x00,};

(3)温度小数位对照表

uchar code df_Table[] ={0,1,1,2,2,3,3,4,4,5,6,6,7,8,8,9,9 }; uchar CurrenT = 0; //当前读取的温度整数部分 char Signed_Temp = 0; //有符号温度值 uchar Temp_Value[] = {0x00,0x00}; //从DS18B20读取温度值 uchar Back_Temp_Value[] = {0xFF,0xFF}; //温度数据备份 uchar Display Digit = {0,0,0,0}; //待显示的各温度数位 bit DS18B20_IS_OK = 1; //传感器正常标志 unit tCount = 0;

4.2.2电动机转速及转向控制模块

T0定时器控制电动机正/反转,并输出PWM信号控制转速 Void T0_INT() interrup 1 {

TH0 = -50000/256; TL0 = -50000%6;

Read_Temperature(); //读取温度 if ( !DS18B20_IS_OK )return; //读错时退出 //读取正常且温度发生变化则刷新显示 if (Temp_Value[0] != Back_Value[0] || Temp_Value[1] != Back_Value[1] ) {

Back_Temp_Value[0] =Temp_Value[0]; Back_Temp_Value[1] =Temp_Value[1]; Disply_Temperature();

第XXXVII页 51页

基于单片机的温度控制直流电动机转速系统设计

}

//≥75℃或<=0℃时,电动机全速转动,占空比为100%. if (Signed_Temp≥ 75 ) Signed_Temp = 75; if (Signed_Temp≤ 0 ) Signed_Temp = 0; //≥45℃时加速正转,75℃时全速运行 if ( Signed_Temp ≥ 45) {

MA = 1; MB = 0; //正转

if (Signed_Temp == 45) //PWM输出(占空比:0%) {

PWM1 = 0; DelayXus(30); return; } else

if (Signed_Temp == 75) //PWM输出(占空比:100%) {

PWM = 1; DelayXus(30); return; }

PWM1 = 1; //PWM输出(占空比:0%~100%) DelayXus(Signed_Temp - 45); PWM1 = 0;

DelayXus(75 - Signed_Temp ); } else

//≤10℃时加速反转,0℃时全速运行 if ( Signed_Temp≤ 10 ) {

MA = 0; MB = 1; //反转

if (Signed_Temp == 10) //PWM输出(占空比:0%) {

PWM1 = 0; DlayXus(10); return;

第XXXVIII页 共51页

!!!学院毕业设计

} else

if (Signed_Temp == 0 ) //PWM输出(占空比:100%) {

PWM = 1; DelayXus(10); return; }

PWM = 1; //PWM输出(占空比:0%~100%) DelayXus(10 - Signed_Temp); PWM = 0;

DelayXus(Signed_Temp); }

//否则由惯性运动过渡到停止 else {

MA = 0; MB = 0; } }

4.2.3温度显示模块 在LCD上显示当前温度 void Display_Temperature() {

uchar i;

uchar t=150;//延时值 uchar ng = 0;//负数标识

//如果为负数则取反加1,并设置负数标识 if((Temp_Value[1] & 0xF8) ==0xF8) {

Temp_Value[1] = ~Temp_Value[1];

第XXXIX页 51页

基于单片机的温度控制直流电动机转速系统设计

Temp_Value[0] = ~Temp_Value[0] + 1; if(Temp_Value[0] ==0x00) Temp_Value[1]++; ng= 1; }

//查表得到温度小数部分

Display_Digit[0] = df_Table[ Temp_Value[0] & 0x0F ]; //获取温度整数部分(无符号)

Current = ((Temp_Value[0]) & 0xF0)>>4) | ((Temp_Value[1] & 0x07)<<4); //获取有符号温度值(忽略小数位)

Signed_Temp = !ng ? CurrenT : - CurrenT; //将整数部分分解为三位待显示数字 Display_Digit[3] = CurrenT / 100; Display_Digit[2] = CurrenT % 100 / 10; Display_Digit[1] = CurrenT % 10; //刷新LCD显示缓冲

Current_Temp_Display_Buffer[11] = Display_Digit[0] + '0'; Current_Temp_Display_Buffer[10] = '.';

Current_Temp_Display_Buffer[ 9] = Display_Digit[1] + '0'; Current_Temp_Display_Buffer[ 8] = Display_Digit[2] + '0'; Current_Temp_Display_Buffer[ 7] = Display_Digit[3] + '0'; //高位为0时不显示

if (Diplay_Digit[3] == 0) Current_Temp_Display_Buffer[7] = ' '; //高位为0且次高位为0时,次高位不显示

if (Display_Digit[2] == 0 && Display_Digit[3] == 0) //负数符号显示在恰当位置 if (ng) {

if (Current_Temp_Display_Buffer[8] == ' ') Current_Temp_Display_Buffer[8] == '-'; else

第XL页 共51页

…… 此处隐藏:960字,全部文档内容请下载后查看。喜欢就下载吧 ……
基于单片机的温度控制直流电动机转速系统设计 - 图文(8).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/434473.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)