天天看點

玩轉物聯網外設之步進電機 -《神奇的物聯網》

1.電機簡介

電機是在IoT領域經常用到的一個重要子產品,大到使用在農業中的水泵、電動大棚,小到機器人、甚至鏡頭中的微型馬達,都需要使用到電機,可以說電機是為裝置提供機械動力的重要來源之一。

而步進電機又是電機中較為複雜的一類,它是基于最基本的電磁鐵原理,它接收外部的電脈沖信号,通過其内部的邏輯電路,控制步進電機的繞組以一定的時序正向或反向通電,進而産生電磁場,使得電機正向/反向旋轉,或者鎖定。步進電機的角位移量與輸入的脈沖個數嚴格成正比,而且在時間上與脈沖同步。因而隻要控制脈沖的數量、頻率和電機繞組的相序,即可獲得所需的轉角、速度和方向。

本文就以時下最火的HaaS100開發闆為例,描述一下如何控制步進電機

2.核心子產品

HaaS100核心闆

HaaS100是一款物聯網場景中的标準硬體,并配套嵌入到硬體中的軟體驅動及功能子產品,為使用者提供物聯網裝置高效開發服務。

玩轉物聯網外設之步進電機 -《神奇的物聯網》

HaaS100核心闆有着豐富的外設接口,如下所示,足夠用來控制電機,以及驅動器了:

玩轉物聯網外設之步進電機 -《神奇的物聯網》

步進電機

電機型号:42BYGH39-401A

電流:1.5A 輸出力矩:0.4Nm(牛米)

機身長度:39mm 出軸長度:21mm

出軸軸徑:5mm

出軸方式:單/雙出軸(預設發單軸)

出線方式: 二相四根引出線 (黑色A+綠色A-紅色B+藍色B-)

電機驅動器

驅動器型号:TB6600更新版

脈沖信号:3.3v/5V/24V相容,不需要竄電阻

輸入電壓: DC(直流)9~42V 适應惡劣的電網環境

電流:4A 的速度自适應電路,電流自動尋優

細分數:6400細分

玩轉物聯網外設之步進電機 -《神奇的物聯網》

3.硬體接線方法

電機和驅動器有兩種接法,本文采用共陰極接法

玩轉物聯網外設之步進電機 -《神奇的物聯網》

HaaS100和驅動器接線如下:

HaaS100接口 驅動器接口 功能
PIN3(GND) ENA- 接地
PIN10(GPIO_P2_2) ENA+ 電機使能
PIN4(GND) DIR-
PIN12(GPIO_P2_3) DIR+ 電機方向控制
PIN7(GND) PUL-
PIN9(GPIO_P2_5) PUL+ PWM脈沖信号輸出
玩轉物聯網外設之步進電機 -《神奇的物聯網》

4.軟體開發

4.1 首先根據

https://help.aliyun.com/document_detail/184184.html?spm=a2c4g.11186623.6.701.d706566froCbj8

的快速開始搭建好HaaS100的軟體開發環境。

4.2 在solution/helloworld_demo.c中添加gpio和pwm的依賴:

## 第二部分:依賴資訊

depends:

  - cli: dev_aos

  - osal_aos: dev_aos

  - haas100: dev_aos

  - gpio: dev_aos

  - pwm: dev_aos

4.3.在components/drivers/peripheral/gpio/gpio_example.c中增加電機相關控制代碼

int vfs_gpio_motor_test(){

    int ret = 0;

    int fd = 0;

    int i=0;

    int val=0;

    char buffer[16];

    struct gpio_io_config config;

    fd = open("/dev/gpio", 0);

    ddkc_info("open gpio %s, fd:%d\r\n", fd >= 0 ? "success" : "fail", fd);

    if (fd >= 0) {

      //驅動器是能端ENA+

        config.id = 18; //GPIO2_2

        config.config = GPIO_IO_OUTPUT | GPIO_IO_OUTPUT_PP;

        config.data = 0;

        ret = ioctl(fd, IOC_GPIO_SET, (unsigned long)&config);

        ddkc_info("gpio write %d return %d\r\n", config.data, ret);

        usleep(1000000);

        //驅動器是能端DIR+

        config.id = 19; //GPIO2_3

        config.data = 1;

    }

}

struct cli_command vfs_gpio_cli_cmds[] = {

    { "gpiot", "gpio test", vfs_gpio_cli_cmd, },

    { "gpio_out_pp", "gpio test output pp", vfs_gpio_motor_test, },

};

4.4.在components/drivers/peripheral/gpio/package.yaml中添加example

source_file:

- "src/*.c"

- "example/gpio_example.c" //要打開注釋

4.5.編譯和燒錄

4.6.啟動闆子在序列槽中輸入:

#控制gpio口

gpio_out_pp

#控制pwm脈沖輸出,3表示PWM3,100HZ頻率,持續輸出10s

pwm 3 100 10  

5.結語

至此,步進電機已經可以轉動了,通過調節頻率以及DIR的高低電平變可以控制電機的轉速和方向。另外在開發過程中有任何問題,歡迎在我們的官網:

https://haas.iot.aliyun.com/

詢問“HaaS百事通”

玩轉物聯網外設之步進電機 -《神奇的物聯網》

繼續閱讀