极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 弘毅

arduino学习笔记17 - 步进电机试验

  [复制链接]
发表于 2012-12-11 21:57:59 | 显示全部楼层
本帖最后由 ttyp 于 2012-12-11 21:59 编辑

果然是每个芯片的协议都不一样啊
官方的是
Step C0 C1 C2 C3
     1  1  0  1  0
     2  0  1  1  0
     3  0  1  0  1
     4  1  0  0  1

而我的是
Step C0 C1 C2 C3
     1  1  0  0  0
     2  0  1  0  0
     3  0  0  1  0
     4  0  0  0  1

这是我修改的库

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2013-1-5 19:16:08 | 显示全部楼层
弘毅老师我用你上面的代码改了一下做成用过串口传W或者S来控制,您看这样对不对,接收到W应该是正转,接收到S应该是反转。

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

#include <Stepper.h>

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

// attached to设置步进电机的步数和引脚
Stepper stepper(STEPS, 2, 3, 4, 5);

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

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

//void loop()
//{
  // 获取传感器读数
  //int val = analogRead(0);

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

  // 保存历史读数
// previous = val;
void loop()
{
  char speed;   //小车的运动速度
  int val;
  while(1)    //while的循环条件为1,即永远都循环{}里的内容
  {        //while循环开始
     if(Serial.available()) // ①Serial.available()表示判断串口COM是否接收到数据
     {     //if开始
        val=Serial.read();//②读取串行COM的数据,控制小车运动的命令
        switch(val)     //命令有多种情况,因而使用switch语句
        {  // switch开始
        case 'W':           //第一种情况,前进,等于字符W
        stepper.step(6);   
          break;
        case 'S':           //第二种情况,后退,等于字符S
回复 支持 反对

使用道具 举报

发表于 2013-3-11 16:57:45 | 显示全部楼层
弘毅老师你好,我才开始学arduino,跟着你的教程控制用电位器控制步进电机,电机转动正常,就是不知为什么每次重新通电步进电机就会自动转一定角度才停下才可以控制,能不能修改代码使arduino在每次通电时不要自动转?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-11 21:25:53 | 显示全部楼层
coupar 发表于 2013-3-11 16:57
弘毅老师你好,我才开始学arduino,跟着你的教程控制用电位器控制步进电机,电机转动正常,就是不知为什么每 ...

因为代码中int previous = 0;每次重新启动都会归零,如果想要重启后也保持原位,需要把该变量写入eeprom中,这样断电后也能保存了。
回复 支持 反对

使用道具 举报

发表于 2013-3-11 23:26:12 | 显示全部楼层
弘毅 发表于 2013-3-11 21:25
因为代码中int previous = 0;每次重新启动都会归零,如果想要重启后也保持原位,需要把该变量写入eeprom中 ...

#include <Stepper.h>
#define STEPS 100
Stepper stepper(STEPS, 8, 9, 10, 11);
int address = analogRead(0)
int previous = address;


void setup()
{
  stepper.setSpeed(300);
}

void loop()
{
  int val = analogRead(0);
  stepper.step(val - previous);
  previous = val;
}


弘毅老师,我才学习不到2天,不知道这样写可以不啊?通电启动时先检查电位器位置,在加到previous里,如果不对,您能不能写个给我学习一下啊?
回复 支持 反对

使用道具 举报

发表于 2013-3-17 22:25:44 | 显示全部楼层
想问个白痴问题,我自己在fritzing里画图,但是搜索不到5线,像上面这篇教程出现的步进电机,是为神马?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-18 09:26:43 | 显示全部楼层
要相信 发表于 2013-3-17 22:25
想问个白痴问题,我自己在fritzing里画图,但是搜索不到5线,像上面这篇教程出现的步进电机,是为神马?

额。。这种库很多时候要找对应的库,如果找不到就需要自己画。
回复 支持 反对

使用道具 举报

发表于 2013-4-18 10:54:08 | 显示全部楼层
我要看遍极客工坊的所有帖子。。。加油中
回复 支持 反对

使用道具 举报

发表于 2013-4-18 22:33:19 | 显示全部楼层
请问下 这个 电位计 的规格?谢谢
套件里的 wxd3-13-2w 能用吗?
10k 欧姆的那个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-19 16:22:22 | 显示全部楼层
学长 发表于 2013-4-18 22:33
请问下 这个 电位计 的规格?谢谢
套件里的 wxd3-13-2w 能用吗?
10k 欧姆的那个

可以的,10K刚好
回复 支持 反对

使用道具 举报

发表于 2013-4-24 21:28:14 | 显示全部楼层
弘毅老师,请教一下,我是一个六线的步进电机,但是我想把两根VCC端的线接在一点来控制,变成一个拟5线的步进电机,这样可以么???或者我看有人用L298N不接VCC端直接控制五线,那六线可以这样么??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-24 21:58:15 | 显示全部楼层
yhy1993226 发表于 2013-4-24 21:28
弘毅老师,请教一下,我是一个六线的步进电机,但是我想把两根VCC端的线接在一点来控制,变成一个拟5线的步 ...

{:soso_e136:} 6线的还没玩过。。。。
回复 支持 反对

使用道具 举报

发表于 2013-4-25 22:40:33 | 显示全部楼层
弘毅 发表于 2013-4-24 21:58
6线的还没玩过。。。。

那五线的可以空置VCC那根线么???哎,主要是我五线的驱动板有,但是我想用的是六线的42。。。。看来没办法,只有重新去买块驱动了。。。不过谢谢老师回复啊
回复 支持 反对

使用道具 举报

发表于 2013-5-4 22:36:03 | 显示全部楼层
照着做了,但是有以下情况是否正常:
1.电机拿在手上感觉有抖动,没有转动时也有;
2.运行一会,电机有点发热的;
  以上情况不知是哪儿的问题,能实现视频上的功能
回复 支持 反对

使用道具 举报

发表于 2013-5-4 23:25:08 | 显示全部楼层
本帖最后由 chqiyi 于 2013-5-4 23:27 编辑

请问弘毅老师,0022版本的编译器在哪里可以下载?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 09:58 , Processed in 0.061970 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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