FC2カウンター FPGAの部屋 Zybot の車輪が回転した

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Zybot の車輪が回転した

Zybot の車輪がVivado HLS で作ったPWMモジュールで回転した。

ZYBOのVivado 2016.2を使用したブロック・デザインのベースはZYBO_0_2 を使用して、そこに左車輪と右車輪用のPWMモジュールを追加した。
ブロック・デザインを示す。
Zybot_14_160223.png

論理合成、インプリメントを行って、SDK を立ち上げ、アプリケーションを作成して、出来上がったので、早速モーターを回してみることにした。
Zybot_15_160223.png

アプリケーションの pwm_test.c を示す。

/* * PWM_test.c * *  Created on: 2016/06/20 *      Author: ono */

#include <stdio.h>
#include <stdlib.h>
#include "xil_io.h"
#include "xparameters.h"
#include "sleep.h"
#include "xpwm.h"

int main(){
    XPwm XPwmL, XPwmR;
    XPwm_Config *XPwmLPtr, *XPwmRPtr;

    XPwmLPtr = XPwm_LookupConfig(0);
    if(!XPwmLPtr){
        fprintf(stderr, "Left XPwm configuration failed.\n");
        return(-1);
    }
    int XPwmL_status = XPwm_CfgInitialize(&XPwmL, XPwmLPtr);
    if (XPwmL_status != XST_SUCCESS){
        fprintf(stderr, "Could not Initialize Left XPwm\n");
        return(-1);
    }

    XPwmRPtr = XPwm_LookupConfig(1);
    if(!XPwmRPtr){
        fprintf(stderr, "Right XPwm configuration failed.\n");
        return(-1);
    }
    int XPwmR_status = XPwm_CfgInitialize(&XPwmR, XPwmRPtr);
    if (XPwmR_status != XST_SUCCESS){
        fprintf(stderr, "Could not Initialize Right XPwm\n");
        return(-1);
    }

    XPwm_Set_sw_late_V(&XPwmL, 0); // 25で車輪が回り始める
    XPwm_Set_sw_late_V(&XPwmR, 0); // 25で車輪が回り始める

    XPwm_Set_dir_V(&XPwmL, 1); // 1 - 正転、0 - 逆転
    XPwm_Set_dir_V(&XPwmR, 0); // 0 - 正転、1 - 逆転

    XPwm_DisableAutoRestart(&XPwmL);
    while(!XPwm_IsIdle(&XPwmL)) ;
    XPwm_Start(&XPwmL);
    XPwm_EnableAutoRestart(&XPwmL);

    XPwm_DisableAutoRestart(&XPwmR);
    while(!XPwm_IsIdle(&XPwmR)) ;
    XPwm_Start(&XPwmR);
    XPwm_EnableAutoRestart(&XPwmR);

    return 0;
}


Zybot を箱の上に置いて、車輪が回転しても動かないようにした。センサー・フィードバック・ピンの SA と SB にオシロスコープのプローブを当てて、波形を観測できるようにした。その写真を示す。
Zybot_9_160623.jpg

このZybot では、右左のモーターが180度向きを変えて実装してあるので、前進するときはPmodHB5 の回転方向は、左モーターはDIR = 1, 右モーターはDIR = 0 にする必要がある。後進するときは、逆になる。

まずは、PWM 値が 25 % のときに回り始めた。80 % までやってみたが、車輪が勢い良く回っている。

次に右モーターだけであるが、各PWM 値でどの様な波形が出てくるか?を観察した。

PWM 25 % 、DIR = 0 の時 (XPwm_Set_sw_late_V(&XPwmR, 25); XPwm_Set_dir_V(&XPwmR, 0); )
Zybot_10_160623.jpg

CH1 が SA で CH2 が SB だ。周波数は 338 Hz で、周期は 29.6 ms だった。
SA の立ち上がり時の SB は0 になっている。

PWM 25 % 、DIR = 1 の時 (XPwm_Set_sw_late_V(&XPwmR, 25); XPwm_Set_dir_V(&XPwmR, 1); )
Zybot_11_160623.jpg

SA の立ち上がり時の SB は1 になっている。

PWM 50 % 、DIR = 1 の時 (XPwm_Set_sw_late_V(&XPwmR, 50); XPwm_Set_dir_V(&XPwmR, 1); )
Zybot_12_160623.jpg

周波数は 609 Hz で、周期は 16.4 ms だった。

PWM 80 % 、DIR = 1 の時 (XPwm_Set_sw_late_V(&XPwmR, 80); XPwm_Set_dir_V(&XPwmR, 1); )
Zybot_13_160623.jpg

周波数は 733 Hz で、周期は13.6 ms だった。
  1. 2016年06月23日 11:52 |
  2. Zybot
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/3499-c2574ac5
この記事にトラックバックする(FC2ブログユーザー)