1.电机简介
电机是在IoT领域经常用到的一个重要模块 大到使用在农业中的水泵、电动大棚 小到机器人、甚至镜头中的微型马达 都需要使用到电机 可以说电机是为设备提供机械动力的重要来源之一。
而步进电机又是电机中较为复杂的一类 它是基于最基本的电磁铁原理 它接收外部的电脉冲信号 通过其内部的逻辑电路 控制步进电机的绕组以一定的时序正向或反向通电 从而产生电磁场 使得电机正向/反向旋转 或者锁定。步进电机的角位移量与输入的脉冲个数严格成正比 而且在时间上与脉冲同步。因而只要控制脉冲的数量、频率和电机绕组的相序,即可获得所需的转角、速度和方向。
本文就以时下最火的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细分
电机和驱动器有两种接法 本文采用共阴极接法
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
? ? int fd
? ? int i
? ? int val
? ? 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
? ? ? ? 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
? ? ? ? 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 ?
至此 步进电机已经可以转动了 通过调节频率以及DIR的高低电平变可以控制电机的转速和方向。另外在开发过程中有任何问题 欢迎在我们的官网
询问“HaaS百事通”
本文转自网络,原文链接:https://developer.aliyun.com/article/787510