硬件设备
L298N电机驱动板 直流减速电机 导线若干 硬件原理 Arduino的DigitalPin 3、5、6、9和11可以输出pwm脉宽调制。使用函数analogWrite来输出设定值。analogWrite需要一个0~255的参数,其中0为关闭,255为全功率。 光电码盘测速就三个引脚,Vcc(5V), Gnd, Out(clk)。将Out连接到Arduino的Pin2。随着码盘转动,Out输出方波,频率与速度成正比。 程序清单
- #include timer2.h>
- int pinI1=8;//定义I1接口
- int pinI2=9;//定义I2接口
- int pwmPin=10;//定义EA(PWM调速)接口
- int speed=200;
- int vTest=2;//定义中断测速接口
- int nWheel = 0; //记录测速模块的次数
- float omega = 0; //角速度
- float velocity(int n)
- {
- //角速度的计算公式为(n/20)*(2pi),即n*0.31415
- float vel = n*0.31415;
- return vel;
- }
- void flash()
- {
- int nr;
- nr = nWheel;
- omega = velocity(nr);
- nWheel = 0;
- Serial.print(omega);
- Serial.println("rad/s");
- }
- void setup()
- {
- Serial.begin(9600); //串口波特率为9600
- attachInterrupt(0,count, FALLING);
- pinMode(pinI1,OUTPUT);//定义该接口为输出接口
- pinMode(pinI2,OUTPUT);
- pinMode(pwmPin,OUTPUT);
- pinMode(vTest,INPUT);
- pinMode(13, OUTPUT);
- digitalWrite(pinI1,LOW);//使直流电机顺时针转
- digitalWrite(pinI2,HIGH);
-
- MsTimer2::set(1000, flash); // 中断设置函数,每 1s 进入一次中断
- MsTimer2::start();
-
- }
- void loop()
- {
- analogWrite(pwmPin,speed);
-
- digitalWrite(13, HIGH);
- }
- void count()
- {
- nWheel++;
- }
复制代码
改进
目前实现的功能只有用PC设定速度(0~255),测速模块将信息传送给Arduino,经计算将速度打印在PC屏幕上。调速不方便,可以用旋转角度电位计做模拟输入,用map函数映射到pwm参数设置,可以实现用旋钮调速。
|