找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8745|回复: 9
收起左侧

DIY风扇调速器 STM32F030单片机程序+PCB原理图文件

  [复制链接]
ID:163153 发表于 2019-12-17 20:42 | 显示全部楼层 |阅读模式
最近DIY了一个风扇调速器给功放机箱散热用,支持接入4个风扇,功能较简单,目前有两种工作模式。
自动控制模式:当温度高于30度,风扇开始旋转,而且随着温度升高,转速越来越快。
手动控制模式:通过EC11机械编码器去调节PWM占空比,最大99%

制作出来的实物图如下:
untitled.99.jpg


IMG_20191204_202902.jpg


IMG_20191204_203248.jpg


IMG_20191210_135031.jpg


IMG_20191204_203148.jpg

Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
51hei.png 51hei.png
51hei.png

STM32单片机源程序如下:
  1. #include "stm32f0xx.h"
  2. #include "time.h"
  3. #include "led.h"
  4. #include "TM1640.h"
  5. #include "ds18b20.h"
  6. #include "delay.h"
  7. #include "encoder.h"

  8. __IO uint16_t temp1;
  9. __IO uint16_t temp2;

  10. int ten,one,zero;
  11. float temp;
  12. u16 i,pwm;
  13. u8 a=0,b=0,mode;

  14. void manual_mode();
  15. void auto_mode();
  16. int main(void)
  17. {
  18. TIM_Config();
  19. TIM_PWM_Config();
  20. TIM3_Config();     //定时器3初始化
  21. delay_init();     //延时函数初始化
  22. led_init();                 //LED初始化
  23. TM1640_Init();   //TM1640初始化
  24. ENCODER_Init(); //旋转编码器初始化


  25.         while(1)
  26.         {
  27.                 auto_mode();
  28.         }
  29. }

  30. void auto_mode()
  31. {
  32. mode=1;
  33. TM1640_display(0,20);        //清屏
  34. TM1640_display(1,20);
  35. TM1640_display(2,20);
  36. TM1640_display(3,20);
  37.         while(1)
  38.         {
  39.                
  40.                 temp=TemperatuerResult();
  41.                 zero=(int)(temp*10)%10;
  42.                 ten=(int)temp/10;
  43.                 one=(int)temp%10;
  44.                 b=ENCODER_READ();        //读出旋转编码器值        
  45.                 if(b==3)manual_mode();  //切换为手动模式
  46.                 if(temp2>300 && temp2<500)
  47.                 {                        
  48.                         TM1640_display(0,23);        
  49.                         TM1640_display(1,24);
  50.                         TM1640_display(2,25);
  51.                         TM1640_display(3,26);
  52.                         
  53.                 }
  54.                 if(temp2>600)
  55.                 {
  56.                         temp2=0;
  57.                         TM1640_display(0,ten);        
  58.                         TM1640_display(1,one+10);
  59.                         TM1640_display(2,zero);
  60.                         TM1640_display(3,21);
  61.                 }
  62.                 switch(ten)
  63.                 {
  64.                         case 0:
  65.                         TIM_SetCompare2(TIM2, 0);   //占空比设置        
  66.                         break;
  67.                         
  68.                         case 1:
  69.                         TIM_SetCompare2(TIM2, 0);   //占空比设置        
  70.                         break;
  71.                         
  72.                         case 2:
  73.                         TIM_SetCompare2(TIM2, 0);   //占空比设置        
  74.                         break;
  75.                         
  76.                         case 3:
  77.                         TIM_SetCompare2(TIM2, 480*30);   //占空比设置        
  78.                         break;
  79.                         
  80.                         case 4:
  81.                         TIM_SetCompare2(TIM2, 480*40);   //占空比设置        
  82.                         break;
  83.                         
  84.                         case 5:
  85.                         TIM_SetCompare2(TIM2, 480*60);   //占空比设置        
  86.                         break;
  87.                         
  88.                         case 6:
  89.                         TIM_SetCompare2(TIM2, 480*80);   //占空比设置        
  90.                         break;
  91.                         
  92.                         case 7:
  93.                         TIM_SetCompare2(TIM2, 480*100);   //占空比设置        
  94.                         break;
  95.                         
  96.                         default:
  97.                         TIM_SetCompare2(TIM2, 480*100);   //占空比设置        
  98.                         break;
  99.                 }               
  100.                
  101.         }
  102. }

  103. void manual_mode()
  104. {
  105. mode=2;
  106. TM1640_display(0,27);        //清屏
  107. TM1640_display(1,27);
  108. TM1640_display(2,27);
  109. TM1640_display(3,27);
  110. TIM_SetCompare2(TIM2, 0);   //占空比设置
  111.         while (1)
  112.         {

  113.                 b=ENCODER_READ();        //读出旋转编码器值        
  114.                 if(b==1){a++;if(a>100)a=0;} //分析按键值,并加减计数器值。
  115.                 if(b==2){if(a==0)a=101;a--;}
  116.                 if(b==3)auto_mode();  //切换为自动模式
  117.                 if(b!=0)     //如果有旋转器的操作
  118.                         {
  119.                         if(a/100==0)
  120.                         TM1640_display(0,20);
  121.                         else
  122.                         TM1640_display(0,a/100);
  123.                         TM1640_display(1,a%100/10); //显示数值
  124.                         TM1640_display(2,a%10);
  125.                         TM1640_display(3,22);
  126.                         TIM_SetCompare2(TIM2, a*480);   //占空比设置
  127.                         }
  128.         }
  129. }
复制代码

所有资料51hei提供下载:
调试器2程序.7z (147.49 KB, 下载次数: 214)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:679233 发表于 2020-1-1 22:52 | 显示全部楼层
一直想找这种资料
回复

使用道具 举报

ID:163153 发表于 2020-3-5 22:11 | 显示全部楼层
ER2019 发表于 2020-1-1 22:52
一直想找这种资料

感谢支持。。
回复

使用道具 举报

ID:688693 发表于 2020-3-7 18:11 | 显示全部楼层
很全,谢谢楼主啦
回复

使用道具 举报

ID:239822 发表于 2020-10-31 21:16 | 显示全部楼层
太坑了,就不能两个文件放一起吗,要扣两次分,参考作用也不大
回复

使用道具 举报

ID:97678 发表于 2020-11-1 12:15 | 显示全部楼层
有没有 STC 单片机的程序?
想找一个STC 的程序!!!!!!!!!
回复

使用道具 举报

ID:370590 发表于 2020-11-2 12:55 | 显示全部楼层
这个不错,也学习一下。
回复

使用道具 举报

ID:724172 发表于 2020-11-4 16:29 | 显示全部楼层
太感谢了,终于找到这东西了
回复

使用道具 举报

ID:194844 发表于 2020-11-19 02:55 | 显示全部楼层
很全,谢谢楼主啦
回复

使用道具 举报

ID:337808 发表于 2021-4-9 17:58 | 显示全部楼层
PWM调压调速
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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