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