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