发 帖  
原厂入驻New

[经验] Arduino使用PWM来实现电机调速

2019-12-25 18:37:59  935 Arduino 电机控制 PWM
分享
4
硬件设备
<span]
L298N电机驱动板
直流减速电机
导线若干
硬件原理
<span]Arduino的DigitalPin 3、5、6、9和11可以输出pwm脉宽调制。使用函数analogWrite来输出设定值。analogWrite需要一个0~255的参数,其中0为关闭,255为全功率。
光电码盘测速就三个引脚,Vcc(5V), Gnd, Out(clk)。将Out连接到Arduino的Pin2。随着码盘转动,Out输出方波,频率与速度成正比。
程序清单
  1. #include <Mstimer2.h>
  2. int pinI1=8;//定义I1接口
  3. int pinI2=9;//定义I2接口
  4. int pwmPin=10;//定义EA(PWM调速)接口
  5. int speed=200;

  6. int vTest=2;//定义中断测速接口
  7. int nWheel = 0;  //记录测速模块的次数
  8. float omega = 0;  //角速度

  9. float velocity(int n)
  10. {
  11.     //角速度的计算公式为(n/20)*(2pi),即n*0.31415
  12.     float vel = n*0.31415;
  13.     return vel;
  14. }

  15. void flash()
  16. {
  17.     int nr;
  18.     nr = nWheel;
  19.     omega = velocity(nr);
  20.     nWheel = 0;
  21.     Serial.print(omega);
  22.     Serial.println("rad/s");

  23. }

  24. void setup()
  25. {
  26.   Serial.begin(9600);  //串口波特率为9600

  27.   attachInterrupt(0,count, FALLING);

  28.   pinMode(pinI1,OUTPUT);//定义该接口为输出接口
  29.   pinMode(pinI2,OUTPUT);
  30.   pinMode(pwmPin,OUTPUT);
  31.   pinMode(vTest,INPUT);
  32.   pinMode(13, OUTPUT);

  33.   digitalWrite(pinI1,LOW);//使直流电机顺时针转
  34.   digitalWrite(pinI2,HIGH);
  35.   
  36.   MsTimer2::set(1000, flash);        // 中断设置函数,每 1s 进入一次中断
  37.   MsTimer2::start();
  38.   
  39. }
  40. void loop()
  41. {
  42.   analogWrite(pwmPin,speed);
  43.   
  44.   digitalWrite(13, HIGH);      
  45. }

  46. void count()
  47. {
  48.   nWheel++;
  49. }
复制代码
改进


目前实现的功能只有用PC设定速度(0~255),测速模块将信息传送给Arduino,经计算将速度打印在PC屏幕上。调速不方便,可以用旋转角度电位计做模拟输入,用map函数映射到pwm参数设置,可以实现用旋钮调速。

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发经验
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表