マイクロマウス研修~お掃除マウス編~(岩本)マウス自作研修

マイクロマウス研修 ~お掃除マウス編~ Prat6 モータードライバ使ってみる。

マイクロマウス研修~お掃除マウス編~(岩本)

こんにちは。岩本です。今週もマウスやっていきます。
前回はモーターを直接回しましたが、今回はモータードライバを使って回していきたいと思います。
今回使用する部品は、DRV8871搭載 DCモータードライバを追加で購入してみました。
モータードライバを使うと電圧を上げるのが簡単に出来ます。

 
というわけで、下図のように配線しました。
安定化電源の電圧を上げてやると回転速度が変わります。
動作はどうやらIN1-IN2に送る信号で変わるようです。(モータードライバデータシート
配線

 
プログラムは下記の様にしました。
ストップとブレーキの違いが良く分からなかったので、正転ストップと逆転ブレーキにしてみました。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
 
#define GPIO_OUTPUT_IO_0    25 //出力ピンの設定
#define GPIO_OUTPUT_IO_1    26 //出力ピンの設定

void app_main(void)
{
     gpio_config_t io_conf;
    // 割り込みをしない
    io_conf.intr_type = GPIO_PIN_INTR_DISABLE;
    // 出力モード
    io_conf.mode = GPIO_MODE_OUTPUT;
    // 設定したいピンのビットマスク
    // 1ULLはunsigned long long(64bit)で1を表現する
    // 22ピンを設定するので、ビットマスクは下記のようになる
    // 上位32ビット:MSB|0000 0000|0000 0000|0000 0000|0000 0000|
    // 下位32ビット:    0000 0110|0000 0000|0000 0000|0000 0000|LSB
    io_conf.pin_bit_mask = (1ULL<<GPIO_OUTPUT_IO_0 | 1ULL<<GPIO_OUTPUT_IO_1) ;
    // 内部プルダウンしない
    io_conf.pull_down_en = 0;
    // 内部プルアップしない
    io_conf.pull_up_en = 0;
    // 設定をセットする
    gpio_config(&io_conf);
 

    while(1) {
        // gpioの出力をセットする
        // 0: Lo, 1: Hi
        //正回転ストップ
        gpio_set_level(GPIO_OUTPUT_IO_0, 1);
        gpio_set_level(GPIO_OUTPUT_IO_1, 0);
        vTaskDelay(1000 / portTICK_RATE_MS);
        gpio_set_level(GPIO_OUTPUT_IO_0, 0);
        gpio_set_level(GPIO_OUTPUT_IO_1, 0);
        vTaskDelay(1000 / portTICK_RATE_MS);

        //逆回転ブレーキ
        gpio_set_level(GPIO_OUTPUT_IO_0, 0);
        gpio_set_level(GPIO_OUTPUT_IO_1, 1);
        vTaskDelay(1000 / portTICK_RATE_MS);
        gpio_set_level(GPIO_OUTPUT_IO_0, 1);
        gpio_set_level(GPIO_OUTPUT_IO_1, 1);
        vTaskDelay(1000 / portTICK_RATE_MS);
    }
}

 
結果、ストップは、文字通りブレーキ掛けてないので少し空転しますが、ブレーキの方はしっかりとブレーキ掛けてくれるみたいです。
動作

 
今回は以上!

タイトルとURLをコピーしました