玩转物联网外设之步进电机 -《神奇的物联网》

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.config = GPIO_IO_OUTPUT | GPIO_IO_OUTPUT_PP;

        config.data = 1;

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

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

        usleep(1000000);

    }

}




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百事通”

玩转物联网外设之步进电机 -《神奇的物联网》

上一篇:RTC场景中的几个关键算法


下一篇:阿里云AIoT携手紫光展锐,助力诺基亚经典手机开启移动支付新体验