风扇是2016年买的康佳KF-40L02,额定功率60W。当时也就六十多元买的,中间还换过一次二手电机,没坚持一年在去年夏末的时候电机又废了。今年遂决定改直流电机,不想用店家现成的驱动板,还是想自己动手用单片机写程序驱动。改机在六月份就完成了,到现在才发帖,还是因为一个字“懒”~
直流电机型号:Nidec 48F704RD90
电机接线方式 需要注意的是这颗电机的调速方式是调整频率的范围(50~490Hz)来调速的,而有的电机是通过调节占空比来调速的。 电源:也是之前从坛友处购买备用的 “超小体积,大电流 19V,60W电源裸板”,配这个电机挺合适
电路图 & 电路板:
19V电压直接供电机电源正极,并通过电源芯片AX3120转成5V,以及5V 再通过AX1007转为3.3V供单片机。 原本以为通过MOS管控制电机的正极通断,可以控制电机的启动/停止,实际打板回来后验证发现不行,经过试验要控制PWM的通断才能实现电机的启动/停止,板子不想再改,就将PWM线引出来接到风扇的琴键开关上,1、2、3档并联起来,这样按任意一键风扇启动,按0键风扇停止。 程序: - #include "delay.h"
- #include "led.h"
- #include "pwm.h"
- #include "exti.h"
- #include "ec11.h"
- #include "key.h"
- #include "ST7565.h"
- #include "sys.h"
- extern u16 EC11_value;
- int main(void)
- {
- u8 t=0;
-
- delay_init(); //延时函数初始化
- F_CRL_Init();
- BL_CRL_Init();
- EXTIX_Init();
- TIM2_PWM_Init(179,1000); //分频。PWM频率=72000/(179+1)=400hz
- EXTI_KEY_Config();
- LCD_Init();
-
- while(1)
- {
- if(t%10==0) //每100ms读取一次
- {
- /* 显示档位 */
- if(EC11_value<10)
- {
- LCD_WriteChar_8x16(56,3,48); //显示档位十位数字
- LCD_WriteChar_8x16(64,3,EC11_value%10+48); //显示档位个位数字
- }
-
- else
- {
- LCD_WriteChar_8x16(56,3,EC11_value/10+48); //显示档位十位数字
- LCD_WriteChar_8x16(64,3,EC11_value%10+48); //显示档位个位数字
- }
-
- /* PWM 输出 */
- TIM2->ARR=720-(EC11_value-1)*20;
- TIM_SetCompare2(TIM2,360-(EC11_value-1)*10); //设置PWM 输出(TIM2_CH1)
- }
- delay_ms(10);
- t++;
- if(t==20) t=0;
- }
- }
复制代码
只是实现了最基本的功能: 调速:通过编码器更改PWM 的频率范围,调速放了30个档位,基本是无级调速 显示:一个LCD屏显示调速档位,LCD背光通过编码器的Key键控制开启或关闭 板子上有预留了DHT11 和 Flash 的位置,都懒得弄了
|