こんにちは。岩本です。今週もマウスやっていきます。
前回はモーターを直接回しましたが、今回はモータードライバを使って回していきたいと思います。
今回使用する部品は、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);
}
}
結果、ストップは、文字通りブレーキ掛けてないので少し空転しますが、ブレーキの方はしっかりとブレーキ掛けてくれるみたいです。

今回は以上!
