PWM电机速度控制使用Arduino。

PWM或脉冲宽度调制是一种非常常见的方法,用于控制电动机,光等跨电机的电源,在PWM方法中通过改变驱动信号的占空比来控制绕组的电力。更多的占空比在负载中提供更多功率,并且占占空比较少,电量较少。十六进制键盘用于控制速度。使用十六进制键盘,速度可以在七个步骤中变化。Arduino Uno是该电路中使用的OS Arduino开发板。beplay全方位手机移动娱乐使用Arduino的PWM电机速度控制的电路图如下图所示。

电路图。

利用arduino实现PWM电机转速控制

十六进制键盘的排脚R1和R2与arduino的数字脚6和7接口。C1、C2、C3和C4柱脚与arduino的数字脚10、11、12和13接口。用列扫描的方法来识别十六进制键盘上按下的键,并对其进行了详细的说明。接口十六进制键盘arduino。Arduino的数字销可以源于最多的电流4孔。因此,数字销3不能直接驱动电机。为了解决该问题,使用NPN晶体管(2n2222)根据数字引脚3处可用的PWM信号驱动电动机。100欧姆电阻器R1用于限制晶体管的基极电流。电动机作为收集器负载连接到晶体管。连接在电动机上的0.1UF电容器C1用于通过 - 通过电动机切换期间产生的电压尖峰和噪声。

Arduino板通过电路板上提供的外部电源插孔供电。Arduino Board也可以通过USB供电,但必须有一个用于电机供电的额外外部源。使用Arduino的PWM电机速度控制的完整程序如下。该计划的解释是在“关于程序”标题下给出的。

程序。

int pwm = 3;int r1=6; //输入PWM输出int r2 = 7;int c1 = 10;int c2 = 11;int c3 = 12;int c4 = 13;int colm1;int colm2;int colm3; int colm4; void setup() { pinMode(r1,OUTPUT); pinMode(r2,OUTPUT); pinMode(c1,INPUT); pinMode(c2,INPUT); pinMode(c3,INPUT); pinMode(c4,INPUT); pinMode(pwm,OUTPUT); digitalWrite(c1,HIGH); digitalWrite(c2,HIGH); digitalWrite(c3,HIGH); digitalWrite(c4,HIGH); digitalWrite(pwm,LOW); } void loop() { digitalWrite(r1,LOW); digitalWrite(r2,HIGH); colm1=digitalRead(c1); colm2=digitalRead(c2); colm3=digitalRead(c3); colm4=digitalRead(c4); if(colm1==LOW) //checks whether key "1" is pressed. { analogWrite(pwm,42); // writes "42" (duty cycle 16%). delay(200);} else { if(colm2==LOW) //checks whether key "2" is pressed. { analogWrite(pwm,84); // writes "84" (duty cycle 32%). delay(200);} else { if(colm3==LOW) //checks whether key "3" is pressed {analogWrite(pwm,126); // writes "126" (duty cycle 48%). delay(200);} else { if(colm4==LOW) // checks whether key"A" is pressed. {digitalWrite(pwm,LOW); // makes pin 3 LOW (duty cycle 0%).Motor OFF. delay(200);} }}} digitalWrite(r1,HIGH); digitalWrite(r2,LOW); colm1=digitalRead(c1); colm2=digitalRead(c2); colm3=digitalRead(c3); colm4=digitalRead(c4); if(colm1==LOW) // checks whether key "4" is pressed. {analogWrite(pwm,168); //writes "168" (duty cycle 64%). delay(200);} else { if(colm2==LOW) // checks whether key "5" is pressed. {analogWrite(pwm,202); // writes "202" (duty cycle 80%). delay(200);} else { if(colm3==LOW) // checks whether key "6" is pressed. {analogWrite(pwm,244); // writes "244" (duty cycle 96%). delay(200);} else { if(colm4==LOW) // checks whether key "B" is pressed. {digitalWrite(pwm,HIGH);//makes pin 3 HIGH (duty cycle 100%). FULL POWER delay(200); } }}}}

关于该计划。

通过使用ADMWWRITE()函数改变写入输出引脚3的值来改变PWM控制信号的占空比。可以写入的值的范围在于0和255.Anlogwrite()函数可以在Arduino Uno板中的引脚3,5,6,9,10和11上采用。在大多数Arduino板中,PWM信号的频率将在490Hz左右。PWM信号的占空比与使用模拟程序()函数写的值成比例。使用ADMWWRITE()函数的少数示例如下所示。

  • AnvalidWrite(PWM,255)将在由变量“PWM”表示的引脚处产生100%占空比(全功率)的PWM波。
  • analogWrite(pwm,128)将在引脚处产生50%占空比(一半功率)的pwm波,由变量“pwm”表示。
  • AnvalidWrite(PWM,0)将在由变量“PWM”表示的引脚处产生0%占空比(无功率)的PWM波。

在程序中,数字引脚3配置为PWM输出引脚。十六进制键盘上的键1到6用于增加功率的步骤“42”使用类推write()函数写入的值或16%的占空比。十六进制键盘上的键“A”用于关闭电机,并使用命令“digitalWrite(pwm,LOW);”完成。键“B”上的十六进制键盘用于将电机在最大速度,它是使用命令“digitalWrite(pwm,高);”。

笔记。

相反,电机也可以使用相同的电路来改变LED串的亮度。任何方式负载电流必须处于晶体管2n2222的安全限制,它是800mA。外部电源也必须足够强大以驱动LED串。电路图使用Arduino的LED PWM亮度控制如下图所示。

使用Arduino的LED亮度控制

作者

5注释

  1. De阿龙

    我是这个领域的新手....所以如果不了解arduino,我无法完全理解这个过程。

    所以请有人告诉我什么是Arduino?

  2. 格雷戈尔

    一个很好的说明如何使用PWM和键盘。
    用我的h桥L289N和我自制的键盘。
    学到了很多。
    来自丹麦的问候

  3. héctor.

    非常有趣的是Arduino的所有材料。从很长一段时间来看,我正在为Digitilizinng Super8薄膜进行撒上Arduino程序。
    谢谢你!

  4. 哩张

    用于教育目的的漂亮而简单的循环。为了进一步提高,应该考虑一些问题。1)对于任何有电感的负载,一个保护二极管将节省很多。2)考虑一个单独的数字和模拟地,大的地可能有帮助,但不是总是。

  5. 薛罗波

    电感负载->使用自由滚轮二极管。
    如果没有,您的晶体管不会有较长的寿命..
    此外,当直接在电机上使用ELCO时,我不确定电机线圈的逆极化是ELCO的好的。
    在VCC和GND之间的ELCO +自由二极管。

    问候

Ezoic报告这个广告