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的高低电平变可以控制电机的转速和方向。另外在开发过程中有任何问题,欢迎在我们的官网:
询问“HaaS百事通”