PWM电机速度控制使用Arduino。

PWM或脉冲宽度调制是一种非常常见的方法,用于控制电动机,光等跨电机的电源,在PWM方法中通过改变驱动信号的占空比来控制绕组的电力。更多的占空比在负载中提供更多功率,并且占占空比较少,电量较少。十六进制键盘用于控制速度。使用十六进制键盘,速度可以在七个步骤中变化。Arduino Uno是该电路中使用的OS Arduino开发板。使用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;//声明数字引脚3为PWM输出int r1=6;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”步增加功率,按使用analogWrite()函数写入的值计算,或按占空比计算16%。十六进制键盘上的“A”键用于开关电机OFF,它是通过命令“digitalWrite(pwm,LOW);”来完成的。十六进制键盘上的“B”键用于使电机处于最大速度,它是通过命令“digitalWrite(pwm,HIGH);”来完成的。

笔记。

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

使用Arduino的LED亮度控制

作者

5注释

  1. De阿龙

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

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

  2. 格雷戈尔

    很好地说明了如何使用PWM和键盘。
    用我的H-bridges L289N和我自制的键盘。
    学到了很多。
    来自丹麦的问候

  3. héctor.

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

  4. 哩张

    漂亮和简单的循环为教育目的。为了进一步提高,需要考虑到一些问题。1)对于任何有感应的负载,一个保护二极管将节省你很多。2)考虑分开的数字和模拟地,大的地面可能会有帮助,但并不总是这样。

  5. 薛罗波

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

    问候

Baidu