ぐだっとブログ

Home > スポンサー広告 > スポンサーサイトHome > 工作 > mbedで三相PWMやってみた。

presented by 幼女聖教

| ホーム | Web | 掲示板 | リンクについて |

--.--.-- -- スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
    人気ブログランキングへ
  • Edit
  • --:--
  • Top

2014.11.23 Sun mbedで三相PWMやってみた。

mbedで三相PWMをやってみたが、動作中の波形撮り忘れた……。
ので、プログラムを載せることにした。
プログラムは『続きを読む...』に。
動作は、繰り返しタイマー割り込みでPWMのデューティ比を更新。ボタンが押されたら周波数を1Hzプラス(50~60Hz)。
プログラムが大の苦手な自分でも無理矢理、三相PWMを実装できるのがmbedの凄いところ。
実際に動作させたところ周波数は0.1~0.4Hz(周波数に依存)ほどずれる。恐らく、「flip」内部の処理にかかる時間分ずれているのだろう。
よって、「flip」内部ではフラグを立てるだけにして、「main」内で今「flip」内部でやってる動作をさせることで大幅に改善されると考えられる。
今後は、上記の事とモノポーラPWM化をやっていこうと考えている。多分。

もっと、高速に動作させられるスマートなやり方があれば教えて下さい。

#include "mbed.h"

PwmOut pwmu(A3);
PwmOut pwmv(A4);
PwmOut pwmw(A5);

Ticker tim;
InterruptIn SW1(PC_13);

int freq=50,n=0;
float tt=0;
float num[3][12]={{0.5,0.75,0.933,1,0.933,0.75,0.5,0.25,0.067,0,0.067,0.25},
                  {0.067,0,0.067,0.25,0.5,0.75,0.933,1,0.933,0.75,0.5,0.25},
                  {0.933,0.75,0.5,0.25,0.067,0,0.067,0.25,0.5,0.75,0.933,1}};

void flip(){
    pwmu=num[0][n];
    pwmv=num[1][n];
    pwmw=num[2][n];
    if(n<11)n++;
    else if(n==11)n=0;
    else n=0;
}

void push(){
    if(freq<60)freq++;
    else if(freq==60)freq=50;
    else freq=100;
    tt=1.0/(12*freq);
    tim.detach();
    tim.attach(&flip,tt);
}

int main() {
    pwmu.period_us(100);
    pwmv.period_us(100);
    pwmw.period_us(100);  
    tt=1.0/(12*freq);
    SW1.fall(&push);
    tim.attach(&flip,tt);
    while(1) {
        wait(1);
    }
}

スポンサーサイト
    人気ブログランキングへ
  • Edit
  • 18:52
  • Trackback : 0
  • Comments : 0
  • Top

Comments

name
comment
comment form
(編集・削除用) :
管理者にだけ表示を許可
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。