EnsekiTT Blog

EnsekiTTが書くブログです。

「おっ、それDeepLearningでやればいいじゃん!」と言いつつ設備の稟議が通らない会社に現実をつきつける話。

つまりなにしたの?

ぶかぴっぴ「ネットの記事で見たんですけど、こんなCPUだけのじゃDeepLearningなんてむりっすよ〜」
じょうぴっぴ「それは大変だ!承認印どーん!」
ってなるためのネットの記事を作ろうと思った。
f:id:ensekitt:20170924143310j:plain

続きを読む

ESP-WROOM-32のMCPWMのDeadTimeがわからんから全部試した話

つまりなにしたの?
僕はDeadTimeの説明がピンとこないアホの子だったことがよくわかったので、MCPWMのDeadTimeの設定によって何がどう変わるのか確認してみた。
MCPWM — ESP-IDF Programming Guide v3.0-dev-745-gc4e65d6 documentation
f:id:ensekitt:20170922175225j:plain

基本設定

  • 周波数 1000Hz
  • AのDuty比 50%
  • BのDuty比 50%

mcpwm_deadtime_enable(MCPWM_UNIT_0, MCPWM_TIMER_0, ここを変えていく, 2000, 2000);

mcpwm_deadtime_enableの引数は

mcpwm_num: set MCPWM unit(0-1)
timer_num: set timer number(0-2) of MCPWM, each MCPWM unit has 3 timers
dt_mode: set deadtime mode
red: set rising edge delay = red*100ns
fed: set rising edge delay = fed*100ns

でdt_modeを変えていく
Redとfedはそれぞれ2000で0.2ミリ秒ずつずらした。

波形の見方

オシロスコープのチャンネルはAが上、Bが下。
トリガーをAの立ち上がりに設定。

以下8種類

  • デフォルトはこちら

f:id:ensekitt:20170922175247j:plain

  • MCPWM_BYPASS_RED

f:id:ensekitt:20170922175328j:plain
Bの立ち下がりが遅れてます

  • MCPWM_BYPASS_FED

f:id:ensekitt:20170922175359j:plain
Aの立ち上がりが遅れてます

  • MCPWM_ACTIVE_HIGH_MODE

f:id:ensekitt:20170922175504j:plain
Aの立ち上がりが遅れてBの立ち下がりが遅れてます

  • MCPWM_ACTIVE_LOW_MODE

f:id:ensekitt:20170922175516j:plain
反転したAの立ち上がりが遅れて反転したBの立ち下がりが遅れてます
反転してるからホントはトリガを立ち下がりにするとそれっぽく見える見たい。

  • MCPWM_ACTIVE_HIGH_COMPLIMENT_MODE

f:id:ensekitt:20170922175536j:plain
Aの立ち上がりが遅れて、反転したBの立ち下がりが遅れています
あとComplimentって書いてあるけどComplementじゃないのかな…そういうもん?

  • MCPWM_ACTIVE_LOW_COMPLIMENT_MODE

f:id:ensekitt:20170922175547j:plain
反転したAの立ち上がりが遅れて、Bの立ち下がりが遅れています

  • MCPWM_ACTIVE_RED_FED_FROM_PWMXA

f:id:ensekitt:20170922175557j:plain
わかんない※反省ポイント。Aを基準にAとBの立ち上がりと立ち下がりを遅らせてるらしい。

  • MCPWM_ACTIVE_RED_FED_FROM_PWMXB

f:id:ensekitt:20170922175620j:plain
わかんない※反省ポイント。Bを基準にAとBの立ち上がりと立ち下がりを遅らせてるらしい。

使ったコードはこちら

#include <stdio.h>
#include "string.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "esp_attr.h"
#include "soc/rtc.h"
#include "driver/mcpwm.h"
#include "soc/mcpwm_reg.h"
#include "soc/mcpwm_struct.h"

#define GPIO_PWM0A_OUT 19   //Set GPIO 19 as PWM0A
#define GPIO_PWM0B_OUT 18   //Set GPIO 18 as PWM0B

static void mcpwm_example_gpio_initialize()
{
    printf("initializing mcpwm gpio...\n");
    mcpwm_pin_config_t pin_config = {
        .mcpwm0a_out_num = GPIO_PWM0A_OUT,
        .mcpwm0b_out_num = GPIO_PWM0B_OUT,
    };
    mcpwm_set_pin(MCPWM_UNIT_0, &pin_config);
}

static void mcpwm_example_config(void *arg)
{
    mcpwm_example_gpio_initialize();

    printf("Configuring Initial Parameters of mcpwm...\n");
    mcpwm_config_t pwm_config;
    pwm_config.frequency = 1000;    //frequency = 1000Hz
    pwm_config.cmpr_a = 50.0;       //duty cycle of PWMxA = 50.0%
    pwm_config.cmpr_b = 50.0;       //duty cycle of PWMxb = 50.0%
    pwm_config.counter_mode = MCPWM_UP_COUNTER;
    pwm_config.duty_mode = MCPWM_DUTY_MODE_0;
    mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config);
    mcpwm_deadtime_enable(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_ACTIVE_RED_FED_FROM_PWMXB, 2000, 2000);
    vTaskDelete(NULL);
}

void app_main()
{
    printf("Testing MCPWM...\n");
    xTaskCreate(mcpwm_example_config, "mcpwm_example_config", 4096, NULL, 5, NULL);
}

反省(※)

一応振る舞いはわかったけど、わかった上でDuty比は50にしなければよかった
RedとFedはそれぞれ違う値にすればよかった
フレーズだけで実験してみてたし字面的に違う感じはしてたけど
「それやりたいことと違うと思うよ」って後輩が教えてくれました。
ありがとうございます!!!DCモータ作るときは使います!!!!

終わってから見つけた

https://espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf
超詳しく書いてあったね。つらいね。

若松通商で買ったちっこいステッピングモータをぶん回まわす話【2日目】

つまりなにしたの?

若松通商で買ったちっこいステッピングモータを積んであったのでせっかくだからぶん回してみたい。
の2日目(モータドライバを組み立てて回す)
f:id:ensekitt:20170919012731j:plain

続きを読む

若松通商で買ったちっこいステッピングモータをぶん回まわす話【1日目】

つまりなにしたの?

若松通商で買ったちっこいステッピングモータを積んであったのでせっかくだからぶん回してみたい。
の1日目(ステッピングモータの紹介と電源準備)
f:id:ensekitt:20170919003055j:plain

続きを読む

TSL2561とESP-WROOM-32で部屋の明るさをはかった話

つまりなにしたの?

I2Cで遊ぼうと思って、ESP-WROOM-32に昔買った明るさセンサを繋いでみた。
f:id:ensekitt:20170916133805j:plain

続きを読む

Arduino IDE + ESP-WROOM-32をやっぱりつかった話

つまりなにしたの?

今まで意地はってesp-idf使ってたけど、ハードの確認はArduinoからやって実際にロジックを書くのはesp-idfがいいんじゃね?って思ってインストールした。

f:id:ensekitt:20170915002136j:plain

続きを読む

27年目の人生をやった話。

つまりなにしたの?

27歳の人生を1年過ごして、28歳になった。
f:id:ensekitt:20170913001536j:plain

続きを読む