打印

急求 高手解答, PWM 控制風扇速度

[复制链接]
楼主: meetof4
手机看帖
扫描二维码
随时随地手机跟帖
41
如果还不行,建议你改用NMOS场效应管,场效应管是用电压来驱动,对端口电流没有要求,三极管和ULN都是电流驱动型的,用起来麻烦

使用特权

评论回复
42
meetof4|  楼主 | 2012-12-23 01:02 | 只看该作者
本帖最后由 meetof4 于 2012-12-23 01:42 编辑
fp123123 发表于 2012-12-23 00:54
或者把PWM=1,改为PWM=0,LED负极接P1.2,正极接一个50欧电阻再接5V,好象51只能吸电流,这样驱动才行。确 ...

对对对, 看来是pin位问题我用其他pin 可以
现在试回上面的code

LED点亮了 , 按钮后没有影响led的光量我转下pin位试下,好像刚刚将相关的pin都用到坏了

最后看来是真的不能控制led的光量

使用特权

评论回复
43
meetof4|  楼主 | 2012-12-23 01:13 | 只看该作者
本帖最后由 meetof4 于 2012-12-23 11:28 编辑

NMOS场效应管 都买那只?

FAN的GROUND是否要接MCU的GROUND 两个GND要接在一起??


#include <reg52.h>

sbit PWM = P2^3;
sbit PWM2 = P2^4;

void main()
{
  PWM = 0;
  PWM2 = 1;
  for(;;){}
}

刚刚用了这个试了,
将2^3 和2^4 分别都试过接在PWM风扇,但都不能停止风扇的转动
是否表示我的PWM风扇坏了还是接驳方法有问题?



使用特权

评论回复
44
fp123123| | 2012-12-23 11:39 | 只看该作者
本帖最后由 fp123123 于 2012-12-23 11:42 编辑

FAN的GROUND是否要接MCU的GROUND 两个GND要接在一起??
使用4线PWM风扇时,要把GND接在一起,使用ULN2803控制普通风扇时,风扇的GND要接在ULN2803的输出脚,不能接MCU的GND

将2^3 和2^4 分别都试过接在PWM风扇,但都不能停止风扇的转动
你的代码没有发送PWM波,还没有控制能力

LED点亮了
LED能点亮了吗?LED的正极接在PIN上还是接在GND?如果接在PIN上,那么这个PIN应该可以驱动ULN2803了,只要用2线风扇,接风扇的红黑2条线就可以了,用更多线风扇也可以,只用红黑2条线

使用特权

评论回复
45
meetof4|  楼主 | 2012-12-23 11:50 | 只看该作者
fp123123 发表于 2012-12-23 11:39
FAN的GROUND是否要接MCU的GROUND 两个GND要接在一起??
使用4线PWM风扇时,要把GND接在一起,使用ULN2803控 ...

LED是在单片机的,所以我都不太清楚,正极接在PIN上还是接在GND

但这个CODE 未能控制led的光量,原因在哪里? 是否要用风扇才能试到

使用特权

评论回复
46
fp123123| | 2012-12-23 12:46 | 只看该作者
运行下面2个程序,看哪一个可以在按键后把灯灭掉,就知道LED的接法,根据接线修改PIN位

程序1:LED正极接PIN

#include <reg52.h>

void main()
{
  // LED亮
  P2 = 0xFF;

  // 等待按键
  for(;;)
  {
    if( (P2 & 0x02)==0x02 ) break;
  }

  // LED灭
  P2 = 0;

  for(;;){}
}

程序2:LED负极接PIN

#include <reg52.h>

void delay_us(unsigned int x)
{
  unsigned int i=0;
  for(i=0;i<x;i++)
  {;}
}

void main()
{
  // 等待按键
  for(;;)
  {
                // LED亮
                P2 = 0;
                delay_us(100);

    // 检测按键
    P2 = 0xFF;
    if( (P2 & 0x02)==0x02 ) break;
  }

  // LED灭
  P2 = 0xFF;

  for(;;){}
}

使用特权

评论回复
47
meetof4|  楼主 | 2012-12-23 13:56 | 只看该作者
fp123123 发表于 2012-12-23 12:46
运行下面2个程序,看哪一个可以在按键后把灯灭掉,就知道LED的接法,根据接线修改PIN位

程序1:LED正极接P ...

不好意思,我出去买零件,晚上才回来,那时才回报结果,谢谢

使用特权

评论回复
48
meetof4|  楼主 | 2012-12-23 20:46 | 只看该作者
本帖最后由 meetof4 于 2012-12-23 21:11 编辑
fp123123 发表于 2012-12-23 12:46
运行下面2个程序,看哪一个可以在按键后把灯灭掉,就知道LED的接法,根据接线修改PIN位

程序1:LED正极接P ...

出现了 理解之外的情况!

程序1:LED正极接PIN

#include <reg52.h>

void main()
{
  // LED亮
  P2 = 0xFF;

  // 等待按键
  for(;;)
  {
    if( (P2 & 0x02)==0x02 ) break;
  }

  // LED灭
  P2 = 0;

  for(;;){}
}

LED 一开始发亮, 但按P2^1 后, LED没有变化

程序2:LED负极接PIN

#include <reg52.h>

void delay_us(unsigned int x)
{
  unsigned int i=0;
  for(i=0;i<x;i++)
  {;}
}

void main()
{
  // 等待按键
  for(;;)
  {
                // LED亮
                P2 = 0;
                delay_us(100);

    // 检测按键
    P2 = 0xFF;
    if( (P2 & 0x02)==0x02 ) break;
  }

  // LED灭
  P2 = 0xFF;

  for(;;){}
}


LED 一开始闪了一闪就没有发亮, 按P2^1 后, LED没有变化



#include <reg52.h>


void main()
{
  // LED亮
  P2 = 0xFF;


  // 等待按?
  for(;;)
  {
    if( (P2 & 0x02)==0 ) break;  <---乱改成这个了
  }


  // LED?
  P2 = 0;


  for(;;){}
}

竟然成了一开始无LED亮,按P1^2后,LED就亮了, 但没法做到亮--->灭

使用特权

评论回复
49
meetof4|  楼主 | 2012-12-23 23:00 | 只看该作者


刚刚跟了这个测试了
都是未能驱动

用了这个code
#include <reg52.h>

sbit PWM = P2^3;

void main()
{
  PWM = 0; //PWM = 1 <---- 0 和 1都试过

}

直接比电 in pin , 风扇会动

使用特权

评论回复
50
明月小厨| | 2012-12-24 00:37 | 只看该作者
2803的输入电压用5V时,2803工作起来比较辛苦,不能处于深度饱和状态,导致输出的能量不够;可以试一下助力风扇一下,强制转起来,看看能不能启动;

使用特权

评论回复
51
meetof4|  楼主 | 2012-12-24 00:45 | 只看该作者
真的非常我担心被当掉

所以现在希望先完成用pwm 风扇控制速度,有些成果比老师看



12V PWM fan



火牛比12V电



单片机
IC: 12C5A60S2

我试过了在帖中的全部程序, 没有一个能控制pwm 风扇

使用特权

评论回复
52
默雨听风| | 2012-12-24 08:31 | 只看该作者
你不要出PWM,看看能不能让风扇转,觉得应该是ULN那个芯片的用法不对,我曾经用三极管驱动风扇都可以转的,另外风扇的正负极接对了么?

使用特权

评论回复
53
zhangliming420| | 2012-12-24 10:39 | 只看该作者


使用特权

评论回复
54
hong7817| | 2012-12-24 13:38 | 只看该作者
建议不要把网页搞得太花,看起费力,我就不看了

使用特权

评论回复
55
meetof4|  楼主 | 2012-12-24 14:19 | 只看该作者
本帖最后由 meetof4 于 2012-12-24 14:47 编辑





test 中 , 但 fail

使用特权

评论回复
56
meetof4|  楼主 | 2012-12-24 22:18 | 只看该作者
感謝大家
用PWM风扇 完成了
現在專心想想DC风扇的驅動

使用特权

评论回复
57
fp123123| | 2012-12-24 22:25 | 只看该作者
看了你的LED测试结果,你的LED是负极接MCU的PIN脚,P2 = 0时会亮,硬件是正常工作的,PIN脚如果没有外部元件,不能输出5V信号。MCU要驱动ULN2803,必须给一个5V信号,电路按下面修改一下,加一个1K至10K的上拉电阻,然后把主程序改成,风扇应该全速运转

void main()
{
  for(;;) P2 = 0xFF;

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
meetof4 + 2 完成了 多谢
58
谈的元| | 2012-12-24 22:27 | 只看该作者
看了一下,注意if中与判断先分别括号

使用特权

评论回复
59
meetof4|  楼主 | 2012-12-24 23:07 | 只看该作者
本帖最后由 meetof4 于 2012-12-24 23:09 编辑
fp123123 发表于 2012-12-24 22:25
看了你的LED测试结果,你的LED是负极接MCU的PIN脚,P2 = 0时会亮,硬件是正常工作的,PIN脚如果没有外部元 ...

感谢大家 DC都成功了
你的方法是正确的

使用特权

评论回复
60
zxcddn| | 2012-12-25 09:22 | 只看该作者
路过,帮顶

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则