使用arduino输出PWM波控制模型车
本文是学习极客学院上由troy_wei老师提供的 玩转Arduino——周边模块:执行部件 课程笔记
- PWM:脉宽调制。
- 是数字电路中控制模拟电路的主要方式。
- 精确而简单
- 一般希望PWM的频率高于20Hz
arduino
- 带~的引脚可以输出PWM波
- 使用analogWrite库函数analogWrite(pin, value
value范围在0~255
-
- 为什么6个端口可以输出PWM波,三个定时器,一个定时器可以输出两路PWM波
- timer寄存器是8位的(也就是使用计数寄存器,然后溢出是很巧妙的设计)
-
上面是软件输出PWM波,其实也可以使用软件对定时器进行模拟
loop()
{
int compareReg1 = pulseWidh1;
int compareReg2 = pulseWidth2;
int currentCount = 0;
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
for(int i=0; i<255; i){//可能有些问题
currentCount ++;
if(currentCount >= compareReg1){
digitalWrite(5, LOW);
}
if(currentCount>=compareReg2){
digitalWrite(6, LOW);
}
delayMicroseconds(2);
}
控制舵机
又叫伺服电机,能够根据控制信号旋转角度并且保持在角度上,1.5毫秒脉宽
控制舵机的PWM波需要满足的要求
旋转角度 = (脉冲宽度 - 1ms) * 180/1ms
舵机控制代码
#include <Servo.h>
Servo myservo;//舵机对象
void setup(){
myservo.attach(9);//对系统进行初始化,对引脚进行设置
}
void loop(){
int pos = 0;//接受旋转角度的数值
for (pos = 0; pos <180; pos ++){
myservo.write(pos);
delay(15);//延迟15ms以给舵机反应时间
}
for(pos = 180; pos >0; pos --){
myservo.write(pos);
delay(15);
}
}//然后就可以运行了
Arduino 控制直流电机
直流电机的特点
- 转动速度快
- 调速容易
- 转速随负载变化
但是使用arduino并不能直接连接
1. 不能直接用数字端口
2. 逆电流对arduino产生影响
3. 这里使用的是H桥电路,用于控制直流电流的方向
4. VCC与H桥间增加一个接受PWM波的端口
5. 此外这部分厂家已经封装成了芯片
int pwmPin = 9;//输出pwm
int dir_1 = 8;//控制旋转方向
int dir_2 = 7;
void setup(){
pinMode(pwmPin, OUTPUT);
pinMode(dir_1, OUTPUT);
pinMode(dir_2, OUTPUT);
}
void loop(){
digitalWrite(dir_1, HIGH);
digitalWrite(dir_1, HIGH);
analogWrite(pwmPin, 255);