找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8881|回复: 7
收起左侧

求大神指教一下!通过单片机和温度传感器控制温度从而控制一个小风扇转速的快慢

[复制链接]
ID:107357 发表于 2016-3-4 22:05 | 显示全部楼层 |阅读模式
我想做一个小设计。通过单片机和温度传感器控制温度从而控制一个小风扇转速的快慢。本人挺喜欢这些小东西的,可惜电子的专业课学的不是很好,不知道有那个大神可以教一下我该怎么做的。例如电路该怎么设计比较简单,单片机芯片用那个型号的好。
回复

使用道具 举报

ID:96682 发表于 2016-3-5 10:05 | 显示全部楼层
找找看坛里有没有单片机温控风扇之类的帖子,555的温控风扇电路还算简单,只是不属于单片机类芯片。
回复

使用道具 举报

ID:74145 发表于 2016-3-5 10:07 | 显示全部楼层
可以这样设计  就是温度值读出来多少 然后通过单片机的PWM模块
回复

使用道具 举报

ID:107357 发表于 2016-3-5 15:55 | 显示全部楼层
我主要是想设计一个程序,当温度达到一个值就可以通过单片机来控制电流的输出从而控制风扇转速的快慢。
回复

使用道具 举报

ID:107357 发表于 2016-3-5 15:59 | 显示全部楼层
wc86110 发表于 2016-3-5 10:05
找找看坛里有没有单片机温控风扇之类的帖子,555的温控风扇电路还算简单,只是不属于单片机类芯片。

真找到这样的帖子,谢谢了
回复

使用道具 举报

ID:96682 发表于 2016-3-5 16:22 | 显示全部楼层
用电流控制风扇转速就要用到数/模转换,用PWM的话电路更简单些。
回复

使用道具 举报

ID:108097 发表于 2016-3-9 21:02 | 显示全部楼层
  采用直流电机,  用霍尔元件  ,由单片机一输入口,计数输入转数。 单片机采用 STC 15W4K32S4

  以下是 控制电机电压 PWM 程序详解

  
汇编示例代码1
假如要生成一个重复的PWM波形,波形如下:
PWM波形发生器的时钟频率为系统时钟/4,波形由通道4输出,周期为20个PWM时钟,占空比为1/3,由4个PWM时钟的相位延迟(波形如下图所示)

汇编代码可以如下设计:2500 ---- 4000  转
;; +-------------------------+
;; | Global Configuration  
;; +-------------------------+
;; 全局配置  
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;  Set EAXSFR to enable xSFR writing against XRAM writing
;  设置端口配置寄存器 P_SW2
;  EAXSFR: 扩展xSFR访问控制使能  EAXSFR为1
端口配置寄存器P_SW2
地址:BAH        初始值:0000,0000B
B7
B6
B5
B4
B3
B2
B1
B0
EAXSFR
0
0
0
-
S4_S
S3_S
S2_S


EAXSFR:扩展SFR访问控制使能
:MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM)
:MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR)
注意:若要访问PWM在扩展RAM区的特殊功能寄存器,必须先将EAXSFR位置为1
BIT6,BIT5,BIT4为内部测试使用,用户必须填0
mov     A, P_SW2
orl     A, #10000000B
mov     P_SW2, A  
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&


;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;  Set channel-4 output register start at LOW
;  设置 PWM配置寄存器 PWMCFG
;  通道 4 初始化为低电平
PWM配置寄存器PWMCFG
地址:F1H        初始值:0000,0000B
B7
B6
B5
B4
B3
B2
B1
B0
-
CBTADC
C7INI
C6INI
C5INI
C4INI
C3INI
C2INI


CBTADC:PWM计数器归零时(CBIF==1时)触发ADC转换
:PWM计数器归零时不触发ADC转换
:PWM计数器归零时自动触发ADC转换。(注:前提条件是PWM和ADC必须被使能,即ENPWM==1,且ADCON==1)
CnINI:设置PWM输出端口的初始电平
:PWM输出端口的初始电平为低电平
:PWM输出端口的初始电平为高电平
mov     A, PWMCFG
anl     A, #11111011B           ; channel-4 start at LOW
mov     PWMCFG, A        

;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;  Set a clock of the waveform generator consists of 4 Fosc
;  设置 时钟选择寄存器 PWMCKS
;  选择4分频系统时钟

PWM时钟选择寄存器PWMCKS
地址:FFF2H(XSFR)        初始值:xxx0,0000B
B7
B6
B5
B4
B3
B2
B1
B0
-
-
-
SELT2
PS[3:0]


SELT2:PWM时钟源选择
:PWM时钟源为系统时钟经分频器分频之后的时钟
:PWM时钟源为定时器2的溢出脉冲
PS[3:0]:系统时钟预分频参数。当SELT2==0时,PWM时钟为系统时钟/( PS[3:0]+1)
mov     DPTR, #PWMCKS           ; FFF2H
mov     A, #00000011B
movx    @DPTR, A   
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

;  Set period as 20
;  {PWMCH,PWMCL} <= 19
;  设置 PWM 计数器 PWMCH=00H
;                  PWMCL=13H  
PWM计数器的高字节PWMCH(高7位)
地址:FFF0H(XSFR)        初始值:x000,0000B
B7
B6
B5
B4
B3
B2
B1
B0
-
PWMCH[14:8]


PWM计数器的低字节PWMCL(低8位)
地址:FFF1H(XSFR)        初始值:0000,0000B
B7
B6
B5
B4
B3
B2
B1
B0
PWMCL[7:0]


PWM计数器位一个15位的寄存器,可设定1~32767之间的任意值作为PWM的周期。PWM波形发生器内部的计数器从0开始计数,每个PWM时钟周期递增1,当内部计数器的计数值达到[PWMCH,PWMCL]所设定的PWM周期时,PWM波形发生器内部的计数器将会从0重新开始开始计数,硬件会自动将PWM归零中断中断标志位CBIF置1,若ECBI==1,程序将跳转到相应中断入口执行中断服务程序。
mov     DPTR, #PWMCH            ; FFF0H
mov     A, #00H                 ; PWMCH should be changed first
movx    @DPTR, A
mov     DPTR, #PWMCL            ; FFF1H
mov     A, #13H                 ; Write PWMCL simultaneous update PWMCH
movx    @DPTR, A
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&   ;; +-------------------------+
;; | Channel-4 Configuration  |
;; +-------------------------+
;;  通道配置

; Set toggle point 1 of Channel-4 as 3
; 设定 PWM4 一次翻转计数器为3  (1 --- 32767)
; pwm2 ---  pwm7
PWM4的第一次翻转计数器的高字节PWM4T1H
地址:FF20H(XSFR)        初始值:x000,0000B
B7
B6
B5
B4
B3
B2
B1
B0
-
PWM4T1H[14:8]


PWM4的第一次翻转计数器的低字节PWM4T1L
地址:FF21H(XSFR)        初始值:0000,0000B
B7
B6
B5
B4
B3
B2
B1
B0
PWM4T1L[7:0]


mov     DPTR, #PWM4T1H          ; FF20H
mov     A, #00H
movx    @DPTR, A
;
mov     DPTR, #PWM4T1L          ; FF21H
mov     A, #03H
movx    @DPTR, A            

; Set toggle point 2 of Channel-4 as 16
; 设定 PWM4 二次翻转计数器为16 (1 --- 32767)
PWM4的第二次翻转计时器的高字节PWM4T2H
地址:FF22H(XSFR)        初始值:x000,0000B
B7
B6
B5
B4
B3
B2
B1
B0
-
PWM4T2H[14:8]


PWM4的第二次翻转计时器的低字节PWM4T2L
地址:FF23H(XSFR)        初始值:0000,0000B
B7
B6
B5
B4
B3
B2
B1
B0
PWM4T2L[7:0]


PWM波形发生器设计了两个用于控制PWM波形翻转的15位计数器,可设定1~32767之间的任意值。PWM波形发生器内部的计数器的计数值与T1/T2所设定的值相匹配时,PWM的输出波形将发生翻转。
T1== PWM4T1H PWM4T1L  T2 = PWM4T2H PWM4T2L
mov     DPTR, #PWM4T2H          ; FF22H
mov     A, #00H
movx    @DPTR, A        
mov     DPTR, #PWM4T2L          ; FF23H
mov     A, #10H
movx    @DPTR, A                  

; Set Channel-4 output pin as default, and disable interrupting
;  设定 PWM4的控制寄存器 PWM4CR
PWM4的控制寄存器PWM4CR
地址:FF24H(XSFR)        初始值:xxxx,0000B
B7
B6
B5
B4
B3
B2
B1
B0
-
-
-
-
PWM4_PS
EPWM4I
EC4T2SI
EC4T1SI


PWM4_PS:PWM4输出管脚选择位
:PWM4的输出管脚为PWM4:P2.2
:PWM4的输出管脚为PWM4_2:P4.4
EPWM4I:PWM4中断使能控制位
:关闭PWM4中断
:使能PWM4中断,当C4IF被硬件置1时,程序将跳转到相应中断入口执行中断服务程序。
EC4T2SI:PWM4的T2匹配发生波形翻转时的中断控制位
:关闭T2翻转时中断
:使能T2翻转时中断,当PWM波形发生器内部计数值与T2计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C4IF置1,此时若EPWM4I==1,则程序将跳转到相应中断入口执行中断服务程序。
EC4T1SI:PWM4的T1匹配发生波形翻转时的中断控制位
:关闭T1翻转时中断
:使能T1翻转时中断,当PWM波形发生器内部计数值与T1计数器所设定的值相匹配时,PWM的波形发生翻转,同时硬件将C4IF置1,此时若EPWM4I==1,则程序将跳转到相应中断入口执行中断服务程序。
mov     DPTR, #PWM4CR           ; FF24H
mov     A, #00H
movx    @DPTR, A      

;  Clear EAXSFR to disable xSFR, return movx-DPTR to normal XRAM access
; 设置端口配置寄存器 P_SW2
;  EAXSFR: 扩展xSFR访问控制OFF  EAXSFR为0
mov     A, P_SW2
anl     A, #01111111B
mov     P_SW2, A

;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;; +-------------------------+
;; | Operate PWM output      |
;; +-------------------------+        
; Enable counter counting, and enable Channel-4 output
; 使能 PWM4
PWM控制寄存器PWMCR
地址:F5H        初始值:0000,0000B
B7
B6
B5
B4
B3
B2
B1
B0
ENPWM
ECBI
ENC7O
ENC6O
ENC5O
ENC4O
ENC3O
ENC2O


ENPWM:使能增强型PWM波形发生器
:关闭PWM波形发生器
:使能PWM波形发生器,PWM计数器开始计数
ECBI:PWM计数器归零中断使能位
:关闭PWM计数器归零中断(CBIF依然会被硬件置位)
:使能PWM计数器归零中断
ENCnO:PWM输出使能位
:相应PWM通道的端口为GPIO
mov     A, PWMCR
orl     A, #10000100B
mov     PWMCR, A
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&  


;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&  
; 定时器 1 16位自动重载
TIMER1INIT:                        ;125毫秒@5.5296MHz
anl  auxr,#0bfh ; 定时器时钟 1 12T
anl  tmod,#00fh
mov  tl1, #000h
mov  th1, #01fh
clr  tf1
setb tr1
ret
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&         

;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&  
; 定时器 2 16位自动重载
TIMER1INIT:                        ;125毫秒@5.5296MHz
anl  auxr,#0bfh ; 定时器时钟2 12T
anl  tmod,#00fh
mov  tl2, #000h
mov  th2, #01fh
clr  tf2
setb tr2
ret
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&  

转速    2500  3000  3400  3700 4000  转     提转  200     
油量    420   310   260   220  190   毫秒  
PT1000  <195  <195  <195  <195 <195  度  


启动    风机  1700  开始点火  2分钟  PT000 增量30度  熄火   可重复3次
关机    PT1000 下降到 35度  关风机


开机故障检测  实验读取数据
  
回复

使用道具 举报

ID:107357 发表于 2016-3-15 21:02 | 显示全部楼层
LYNE 发表于 2016-3-9 21:02
采用直流电机,  用霍尔元件  ,由单片机一输入口,计数输入转数。 单片机采用 STC 15W4K32S4

  以下 ...

谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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