玩转物联网外设之步进电机

 

1.电机简介

电机是在IoT领域经常用到的一个重要模块,大到使用在农业中的水泵、电动大棚,小到机器人、甚至镜头中的微型马达,都需要使用到电机,可以说电机是为设备提供机械动力的重要来源之一。

而步进电机又是电机中较为复杂的一类,它是基于最基本的电磁铁原理,它接收外部的电脉冲信号,通过其内部的逻辑电路,控制步进电机的绕组以一定的时序正向或反向通电,从而产生电磁场,使得电机正向/反向旋转,或者锁定。步进电机的角位移量与输入的脉冲个数严格成正比,而且在时间上与脉冲同步。因而只要控制脉冲的数量、频率和电机绕组的相序,即可获得所需的转角、速度和方向。

本文就以时下最火的HaaS100开发板为例,描述一下如何控制步进电机。

2.核心模块

HaaS100核心板

HaaS100是一款物联网场景中的标准硬件,并配套嵌入到硬件中的软件驱动及功能模块,为用户提供物联网设备高效开发服务。

玩转物联网外设之步进电机_第1张图片

HaaS100核心板有着丰富的外设接口,如下所示,足够用来控制电机,以及驱动器了。

玩转物联网外设之步进电机_第2张图片

 

步进电机

电机型号:42BYGH39-401A

电流:1.5A 输出力矩:0.4Nm(牛米)

机身长度:39mm 出轴长度:21mm

出轴轴径:5mm

出轴方式:单/双出轴(默认发单轴)

出线方式: 二相四根引出线 (黑色A+绿色A-红色B+蓝色B-)

电机驱动器

驱动器型号:TB6600升级版

脉冲信号:3.3v/5V/24V兼容,不需要窜电阻

输入电压: DC(直流)9~42V 适应恶劣的电网环境

电流:4A 的速度自适应电路,电流自动寻优

细分数:6400细分

3.硬件接线方法

电机和驱动器有两种接法,本文采用共阴极接法

玩转物联网外设之步进电机_第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百事通”

你可能感兴趣的:(HaaS解决方案,电机,物联网,嵌入式,硬件,iot)