找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 15375|回复: 17
收起左侧

单片机智能风扇调速系统设计资料 很详细 有实物

  [复制链接]
ID:188333 发表于 2017-5-16 21:42 | 显示全部楼层 |阅读模式
智能风扇调速系统
智能风扇调速系统.jpg
总体设计框图
系统电路设计总体设计方框图所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,用2位LED数码管以串口传送数据实现温度显示。
1_1.002.jpg
总体设计方框图
主控制器            
单片机AT89S52具有低电压供电和体积小等特点,四个端就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
状态显示
显示风扇调速系统处于的工作状态,状态有三种分别是 低速状态、中速状态和高速状态,此系统以发光二极管指示作演示。
LED显示
本系统共使用的三个共阳极七段数码管分别显示,当前的温度和设定定时的倒计时时间。温度以标准摄氏度为单位。时间以分钟为单位。数码管采用单片机P0口并行数据输出,P2口数据扫描控制显示,三极管8550做数码管的驱动。
键盘控制
有一组键盘控制倒计时温度的设定加与减。另一组控制系统处于的三种状态,分别对应的是低速状态、中速状态和高速状态,此系统以发光二极管指示作演示。还有一个开关按键是控制系统是处于自动状态和手动状态的开关。
温度传感器
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下:
●独特的单线接口仅需要一个端口引脚进行通信;
●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
●无须外部器件;
●可通过数据线供电,电压范围为3.0~5.5V;
●零待机功耗;
●温度以9或12位数字;
●用户可定义报警设置;
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;
系统复位
系统单片机采用的是上电复位,当复位键按下时,系统会变为,开始的初始状态。
时钟振荡
    系统单片机使用的是外部时钟振荡,振荡频率为标准的11.0592MHZ。
ALIM1061.JPG ALIM1062.JPG ALIM1063.JPG ALIM1064.JPG ALIM1065.JPG 调整大小 800600.jpg 调整大小 znfsts-d.jpg 0.png 0.png

主要参数
序号
参数
数值
备注

1
电源电压
220V
交流

2
工作电压
4V~6V
直流

3
功率
<8W


4
设定值
0~9分钟


5
低速
30度~32度


6
中速
32度~34度


7
高速
34度以上


8
误差范围
精度误差小于0.5℃


主要元器件
序号
名称
作用
个数

1
AT89S52单片机
运算处理
1

2
DS1802传感器
温度测量
1

3
数码管LG5011BSR
温度显示
4

4
蜂鸣器
温度报警
1

5
变压器
变压
1

6
整流桥
交流变直流
1

7
三端稳压器7805
稳定电压值
1

8
AT24C02
掉电存储器



元件清单
元件名称
单位(只)
型号
参数
备注
温度传感器
1
DS18B20
-55~100度 5V

单片机
1
AT89S52


变压器
1
220V变9V
9V/8W

整流桥
1

1安

C1,C2
2
30P


C3,C6
2
22UF/25V


C4
1
220UF/25V


C5
1
2.2UF/25


R1~R6
7
100欧姆
1/8W

R7~R9
3
510欧姆
1/8W

R10
1
10K
1/8W

R11~R15
5
4.7K
1/8W

R16~R21
6
510欧姆
1/8W

D1
1
发光二极管
发红
电源指示
D2~D6
5
发光二极管
发红
按下指示
D7
1
发光二极管
白发白
低速指示
D8
1
发光二极管
白发蓝
中速指示
D9
1
发光二极管
白发红
高速指示
稳压管
1
LM7805


Y1
1
晶震
11.0592HZ

S1~S6
6
按键


S1-1
1
开关


Q1~Q3
4
8550
NPN

U10~U12
3
LG5011BSR
7段数码管

电路板
2块



电源线
1条

































风扇调速系统使用说明书
  • 接通交流220伏电源,电源指示灯亮。
  • 按下启动电源开关,系统开始运行。
  • 当手动/自动按键弹起时,为手动状态,温度显示为当前温度,时间显示为零,加,减键不起作用。
  • 分别按下,低速至高速按键,相应的指示灯亮。
  • 当手动/自动按键按下时,为自动状态,温度显示为当前温度,时间显示为零,加,减键起作用。每次加1或减1 。系统处于倒计时状态。
  • 分别按下,低速至高速按键,相应的指示灯亮。
  • 当系统处于自动状态时,如果温度大于30度,低速灯自动点亮。如果温度大于32度,中速灯自动点亮。如果温度大于34度,高速灯自动点亮。

Altium Designer画的原理图如下:(51hei附件中可下载工程文件)
1_1.003.jpg


风扇调速最终程序
  1. #include
  2. code unsigned char seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,
  3. 0x82,0xf8,0x80,0x90,0x40}; //显示段码

  4. sbit TMDAT =P3^1; //DS18B20 的数据输入/输出脚DQ,根据情况设定

  5. sbit P2_7=P2^7;
  6. sbit P2_6=P2^6;
  7. sbit P2_5=P2^5;

  8. sbit jia=P2^4;
  9. sbit jian=P2^3;
  10. sbit di=P2^2;
  11. sbit zh=P2^1;
  12. sbit ga=P2^0;

  13. unsigned int z=0;
  14. sbit q=P1^7;
  15.             
  16. unsigned int sdata;//测量到的温度的整数部分
  17. //unsigned char xiaoshu1;//小数第一位
  18. //unsigned char xiaoshu2;//小数第二位
  19. //unsigned char xiaoshu;//两位小数

  20. bit fg=1; //温度正负标志

  21. //////////*显示延时程序*///////////////

  22. void Delay(unsigned int tc)
  23. {while( tc != 0 )
  24. {unsigned int i;
  25. for(i=0; i<80; i++);
  26. tc--;}
  27. }

  28. ////////////延时部分///////////////

  29. void yanshi (unsigned int count)
  30. {
  31. unsigned char i;
  32. while(count--)
  33. {for(i=0;i<115;i++);}
  34. }


  35. /////////////发送复位///////////////

  36. void fashong (void)
  37. {
  38. unsigned char i;
  39. TMDAT = 0; for(i=0;i<103;i++);
  40. TMDAT = 1; for(i=0;i<4;i++);
  41. }


  42. bit tmrbit (void) //读一位//
  43. {                     
  44. unsigned int i;
  45. bit dat;
  46. TMDAT = 0;
  47. i++;
  48. TMDAT = 1;
  49. i++; i++; //微量延时 //
  50. dat = TMDAT;
  51. for(i=0;i<8;i++);
  52. return (dat);
  53. }

  54. unsigned char tmrbyte (void) //读一个字节
  55. {
  56. unsigned char i,j,dat;
  57. dat = 0;
  58. for (i=1;i<=8;i++)
  59. { j = tmrbit(); dat = (j << 7) | (dat >> 1); }
  60. return (dat);
  61. }

  62. void tmwbyte (unsigned char dat) //写一个字节
  63. {
  64. unsigned char j,i;
  65. bit testb;
  66. for (j=1;j<=8;j++)
  67. { testb = dat & 0x01;
  68. dat = dat >> 1;
  69. if (testb)
  70. { TMDAT = 0; //写0
  71. i++; i++;
  72. TMDAT = 1;
  73. for(i=0;i<8;i++); }
  74. else
  75. { TMDAT = 0; //写0
  76. for(i=0;i<8;i++);
  77. TMDAT = 1;
  78. i++; i++;}
  79. }
  80. }

  81. void tmstart (void) //发送ds1820 开始转换
  82. {
  83. fashong(); //复位
  84. yanshi(1); //延时
  85. tmwbyte(0xcc); //跳过序列号命令
  86. tmwbyte(0x44); //发转换命令 44H,
  87. }                  
  88. void tmrtemp (void) //读取温度
  89. {
  90. unsigned char a,b;
  91. fashong (); //复位
  92. yanshi (1); //延时
  93. tmwbyte (0xcc); //跳过序列号命令
  94. tmwbyte (0xbe); //发送读取命令
  95. a = tmrbyte (); //读取低位温度
  96. b = tmrbyte (); //读取高位温度
  97. if(b>0x7f) //最高位为1 时温度是负
  98. {a=~a; b=~b+1; //补码转换,取反加一
  99. fg=0; //读取温度为负时fg=0
  100. }
  101. sdata = a/16+b*16; //整数部分
  102. //xiaoshu1 = (a&0x0f)*10/16; //小数第一位
  103. //xiaoshu2 = (a&0x0f)*100/16%10;//小数
  104. //xiaoshu=xiaoshu1*10+xiaoshu2; //小数
  105. }
  106. void DS18B20PRO(void)
  107. {
  108. tmstart();
  109. //yanshi(5); //如果是不断地读取的话可以不延
  110. tmrtemp(); //读取温度,执行完毕温度将存于
  111. }
  112. void Led()
  113. {
  114. if(fg==1) //温度为正时显示的数据
  115. {
  116. P2_7=0;
  117. P0=seg7code[sdata/10]; //输出十位
  118. Delay(8); P2=P2|0xf0;

  119. P2_6=0;
  120. P0=seg7code[sdata%10]|0x80; //输出个位
  121. Delay(8); P2=P2|0xf0;

  122. P2_5=0;
  123. P0=seg7code[z%10]|0x80; //输出延时位            
  124. Delay(4); P2=P2|0xf0;

  125. if(sdata>30)
  126. {P1=0xfe;}
  127. if(sdata>32)
  128. {P1=0xfd;}
  129. if(sdata>34)
  130. {P1=0xfb;}

  131. }
  132. }

  133. void buzidong()
  134. {

  135. void DS18B20PRO();
  136. void Led();

  137. DS18B20PRO();
  138. Led();
  139. if(di==0)
  140. {Delay(200);P1=0xfe;}
  141. if(zh==0)
  142. {Delay(200);P1=0xfd;}
  143. if(ga==0)
  144. {Delay(200);P1=0xfb;}

  145. }
  146. void zidong()
  147. {
  148. while(z--)
  149. {
  150. void DS18B20PRO();
  151. void Led();

  152. unsigned char i,k;
  153. //for(y=30;y>0;y--)
  154. for(i=12;i>0;i--)
  155. //for(j=80;j>0;j--)
  156. for(k=248;k>0;k--)
  157. {
  158. if(jia==0)
  159. {Delay(200);z++;}
  160. if(jian==0)
  161. {Delay(200);z--;}

  162. DS18B20PRO();
  163. Led();
  164. if(di==0)
  165. {Delay(200);P1=0xfe;}
  166. if(zh==0)
  167. {Delay(200);P1=0xfd;}
  168. if(ga==0)
  169. {Delay(200);P1=0xfb;}

  170. /*
  171. if((di==0)||(sdata>30))
  172. {Delay(200);P1=0xfe;}
  173. ……………………

  174. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png

全部资料下载地址:
智能风扇调速系统资料.zip (12.31 MB, 下载次数: 353)

评分

参与人数 3黑币 +135 收起 理由
51899A + 30 很给力!
Slan + 5 赞一个!
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:200820 发表于 2017-5-17 09:40 | 显示全部楼层
很实用
回复

使用道具 举报

ID:102702 发表于 2017-5-17 11:10 | 显示全部楼层
非常实用,不用继电器的吗?
回复

使用道具 举报

ID:89286 发表于 2017-5-28 08:38 | 显示全部楼层
thanks for sharing
回复

使用道具 举报

ID:166760 发表于 2017-6-1 16:04 | 显示全部楼层

这个程序不行的
回复

使用道具 举报

ID:241586 发表于 2018-2-19 23:34 | 显示全部楼层
好资料感谢
回复

使用道具 举报

ID:285285 发表于 2018-2-24 21:20 | 显示全部楼层
好,谢谢楼主的分享
回复

使用道具 举报

ID:241772 发表于 2018-2-25 10:34 来自手机 | 显示全部楼层
好,谢谢楼主的分享
回复

使用道具 举报

ID:331575 发表于 2018-5-16 20:05 | 显示全部楼层
好帖  值得一试
回复

使用道具 举报

ID:347274 发表于 2018-6-29 19:52 | 显示全部楼层
要是有大神能根据经这个 制作有封装的pcb板就好了
回复

使用道具 举报

ID:310814 发表于 2018-6-30 07:31 | 显示全部楼层
赞一个,,有背部的照片吗
回复

使用道具 举报

ID:98880 发表于 2018-6-30 11:59 | 显示全部楼层
不错不错。
回复

使用道具 举报

ID:215044 发表于 2018-7-4 10:53 | 显示全部楼层
很厉害的楼主
回复

使用道具 举报

ID:344633 发表于 2018-7-4 21:14 | 显示全部楼层
好赞                     
回复

使用道具 举报

ID:388329 发表于 2018-9-5 11:28 | 显示全部楼层
好,很不错的
回复

使用道具 举报

ID:819815 发表于 2020-9-18 09:08 | 显示全部楼层
这个有风扇吗,风扇接哪
回复

使用道具 举报

ID:724172 发表于 2020-9-23 16:56 | 显示全部楼层
太好了,这么详细的资料
回复

使用道具 举报

ID:1031667 发表于 2022-6-6 00:00 | 显示全部楼层
第二层板子是?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表