使用arduino输出PWM波控制模型车

使用arduino输出PWM波控制模型车

本文是学习极客学院上由troy_wei老师提供的 玩转Arduino——周边模块:执行部件 课程笔记

  • PWM:脉宽调制。
  • 是数字电路中控制模拟电路的主要方式。
  • 精确而简单
  • 一般希望PWM的频率高于20Hz

arduino
- 带~的引脚可以输出PWM波
- 使用analogWrite库函数analogWrite(pin, value value范围在0~255
- 使用arduino输出PWM波控制模型车_第1张图片
- 为什么6个端口可以输出PWM波,三个定时器,一个定时器可以输出两路PWM波
- timer寄存器是8位的(也就是使用计数寄存器,然后溢出是很巧妙的设计)
- 使用arduino输出PWM波控制模型车_第2张图片

上面是软件输出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毫秒脉宽使用arduino输出PWM波控制模型车_第3张图片
使用arduino输出PWM波控制模型车_第4张图片
控制舵机的PWM波需要满足的要求
使用arduino输出PWM波控制模型车_第5张图片
旋转角度 = (脉冲宽度 - 1ms) * 180/1ms
使用arduino输出PWM波控制模型车_第6张图片

舵机控制代码

#include 
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. 此外这部分厂家已经封装成了芯片使用arduino输出PWM波控制模型车_第7张图片

使用arduino输出PWM波控制模型车_第8张图片

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);

后面一章是不进电机,应该用不到

你可能感兴趣的:(ROS)