Arduino 入门教程GO 第十三章 控制步进电机的角度-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1000|回复: 0

Arduino 入门教程GO 第十三章 控制步进电机的角度

[复制链接]
发表于 2022-1-17 16:22 | 显示全部楼层 |阅读模式
[md]## 一、步进电机实验

在上一章节中我们学习了通过PWM来对直流电机进行调速。

## 二、实验器材

+ UNO控制板:1块

+ ULN2003A芯片:1块

+ 步进电机:1个

+ 面包板:1块

+ 面包板跳线:若干

## 三、连线示意图

01.jpg
图13-1


## 四、硬件连接图

02.jpg
图13-2


## 五、硬件知识要点

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

步进电机驱动方式:

1、1相励磁法:每一瞬间只有一个线圈导通,其他线圈休息。其特点是励磁方法简单,耗电低,精确度良好。但是力矩小、震动大,每次励磁信号走的角度是标称角度。

2、2相励磁法:每一瞬间有两个线圈同时导通,特点是力矩大、震动较小,每次励磁 转动角度是标称角度。

3、1-2相励磁法:1 相和 2 相轮流交替导通,精度较高,且运转平滑。每送一个励磁信号转动二分之一标称角度。有称为半步驱动。4 相电机中,1、2 种方式称 4 相 4 拍,3 种称 4 相 8 拍。

1 相励磁、2 相励磁和 1-2 相励磁方式如下表所示。

03.jpg
图13-3


04.jpg
图13-4


## 六、程序编写
[/md]
  1. #include <Stepper.h>
  2. #define STEPS 100// 这里设置步进电机旋转一圈是多少步
  3. Stepper stepper(STEPS, 8, 9, 10, 11);
  4. void setup() {
  5.   stepper.setSpeed(90);// 设置电机的转速:每分钟为90步
  6. }
  7. void loop() {
  8.   /**
  9.    * 顺时针旋转数值为正,逆时针旋转数值为负。
  10.    * 转动角度对应数值
  11.    * 1、转360°:2048;
  12.    * 2、转180°:1024;
  13.    * 3、转90°:512;
  14.    */
  15.   stepper.step(512); // 顺时针旋转半周
  16.   delay(500);
  17.   stepper.step(-512); // 逆时针旋转半周
  18.   delay(500);
  19. }
复制代码

[md]
## 七、程序知识要点

\#include:

\#include用于调用程序以外的库。这使得程序能够访问大量标准C库,也能访问用于Arduino的库。注意#include和#define一样,不能在结尾加分号,如果你加了分号编译器将会报错。

## 八、拓展阅读

接下来我们要通过电位器来对步进电机进行控制

05.jpg
图13-5


[/md]
  1. /*
  2. * 步进电机跟随电位器旋转
  3. * (或者其他传感器)使用0号模拟口输入
  4. * 使用arduino IDE自带的Stepper.h库文件
  5. */

  6. #include <Stepper.h>

  7. // 这里设置步进电机旋转一圈是多少步
  8. #define STEPS 100

  9. // attached to设置步进电机的步数和引脚
  10. Stepper stepper(STEPS, 8, 9, 10, 11);

  11. // 定义变量用来存储历史读数
  12. int previous = 0;

  13. void setup()
  14. {
  15.   // 设置电机每分钟的转速为90步
  16.   stepper.setSpeed(90);
  17. }

  18. void loop()
  19. {
  20.   // 获取传感器读数
  21.   int val = analogRead(0);

  22.   // 移动步数为当前读数减去历史读数
  23.   stepper.step(val - previous);

  24.   // 保存历史读数
  25.   previous = val;
  26. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-28 08:28 , Processed in 0.074454 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表