arduino电子制作吧 关注:28贴子:57
  • 6回复贴,共1

制作小风扇 可以调节速度的风扇 arduino PWM电位器调速

只看楼主收藏回复

脉冲宽度调制是一种模拟控制方脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。
PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振波开关技术将会成为PWM控制技术发展的主要方向之一。式,其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。

下面是我们这个测试用到的东西,
ARDUINO UNO 开发板 1个
103 10K电位器模块 方便接线安装 可配合其他模块调光调速 1个
MOS 场效应管模块3V 5V 9V低控制高电压12V 24V 36V 电子开关模块 1个
直流电机 1个
小风扇叶 1个
杜邦线 几根
实验实现的功能,通过电位器调节直流电机转速。 2种不同电压隔离控制。
源程序 复制粘贴到 ARDUINO IDE就可以直接编译 下载了。
#define PWMD 10
void setup()
{
pinMode(PWMD,OUTPUT);
}
void loop()
{
int val = analogRead(0);
val = map(val, 0, 1023, 0, 255);
analogWrite(10, val);
}

下面是准备进行接线。


介绍下介绍,PWM 输出口10 接 场效应管模块的IN+ IN-接GND
电位器接 在A0 口,转动电位器电位器通过分压输出不同的电压值给 开发板ADC检测。
电机接在场效应输出口 绿色端子上,另外一个绿色端子接的是电机部分的供电 10V。 下图蓝色圈就是单独的供电
绿色的供电是5V输出由充电宝输出的,给开发板供电,电机供电控制实际是完全隔离的。两边电源互不干扰。

场效应管模块 上有光耦隔离,实现电源隔离,电机控制不干扰开发板。

上图上电测试调速:

GIF 动态图片尺寸 3.8M 比较大,网速慢的请耐心等候。


1楼2017-04-03 17:10回复
    那个板子在某宝上买的吗


    来自Android客户端2楼2017-04-14 17:58
    回复
      2026-01-21 23:18:17
      广告
      不感兴趣
      开通SVIP免广告
      可以,不过好像没写完吧


      IP属地:江苏来自Android客户端3楼2017-10-31 11:35
      回复
        请问一下,这个场效应 的信号是什么形式的?


        IP属地:浙江4楼2018-08-04 15:08
        回复
          #include <IRremote.h>
          #include <IRremoteInt.h>
          #define RECV_PIN 5 //定义红外接收器引脚
          IRrecv irrecv(RECV_PIN);
          decode_results results;
          int k;
          #define first 12495 //12495
          #define second 6375 //6375
          #define third 31365 //31365
          void setup() {
          // put your setup code here, to run once:
          Serial.begin(9600);
          pinMode(3,OUTPUT);
          pinMode(4,OUTPUT);
          digitalWrite(3,LOW);
          digitalWrite(4,LOW);
          irrecv.enableIRIn();
          }
          void loop() {
          // put your main code here, to run repeatedly:
          if (irrecv.decode(&results)) {
          k = results.value;
          irrecv.resume();
          if(k==first){
          analogWrite(3, 130); //一档风
          Serial.println("1");
          }
          else if(k==second){
          analogWrite(3, 180); //二档
          Serial.println("2");
          }
          else if(k==third){ //三档
          analogWrite(3, 255);
          Serial.println("3");
          }
          }
          }
          想知道为什么这个风扇只转255?是代码问题还是其它什么原因?


          来自Android客户端5楼2019-11-17 22:22
          收起回复
            代码其实可以改简单一点。
            void setup() {
            }
            void loop() {
            int val = analogRead(A0);
            val = map(val,0,1000,0,255);
            analogWrite(10,val);
            }


            IP属地:云南6楼2020-03-04 19:31
            回复