数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 437|回复: 13

[工仪] 拆个仪表盘步进电机,试驱动

[复制链接]
发表于 2026-5-26 12:50:55 | 显示全部楼层 |阅读模式
本帖最后由 飞向狙沙 于 2026-5-26 13:06 编辑

型号RY29‑05,车用仪表盘步进电机,貌似很多轿车摩托车都在用,还以为大部分仪表都是电压表头的,原来都换步进电机了。
驱动先上效果图,奇怪,gif咋不会动呢



电机正面

电机背面,四颗固定螺丝

螺丝拆了就开了,眼熟不,这结构立马有种电子表的赶脚
线圈阻值185Ω,工作电压3.5-10V

三级齿轮减速

看看转子


限位开关,转不了一圈,大概300°左右


查了一下步进电机仪表优势,精度高,不受环境影响,抗震不抖动,缺点就是驱动麻烦。

测试驱动代码,直接AI生成,先是生成了一个IO直驱的,但是3.3V电压有点驱动不了,无法启动,需要手动助力一下,正好抽屉里还有俩A4988,就又用4988驱动了一下,效果还行,就是噪音较大,不确定是因为参数不匹配还是就是歌唱家4988的本性,晚上回去找找静音驱动再试试。
  1. /*
  2. * RY29-05 步进电机 - A4988驱动代码
  3. * 功能:电机每5秒自动换向一次
  4. * 硬件连接:
  5. *   A4988 STEP -> Arduino D3
  6. *   A4988 DIR  -> Arduino D2
  7. *   A4988 VDD  -> Arduino 5V
  8. *   A4988 GND  -> Arduino GND
  9. *   MS1, MS2, MS3 通过跳线帽连接到 5V (设置1/16细分)
  10. */

  11. // 定义引脚
  12. const int stepPin = 3;
  13. const int dirPin = 4;


  14. // 步进参数(根据 1/12° 步距角计算)
  15. const float OUTPUT_STEP_ANGLE = 1.0 / 12.0 / 5;  // 输出轴每步角度 = 1/12°
  16. const unsigned long STEPS_PER_REV = 360 / OUTPUT_STEP_ANGLE;  // 一圈步数 = 4320步

  17. // 时间参数
  18. const unsigned long REV_TIME_MS = 1200;           // 转一圈所需时间 = 5秒
  19. const unsigned long PAUSE_TIME_MS = 500;          // 圈间暂停 = 500ms
  20. const unsigned long STEP_INTERVAL_US = (REV_TIME_MS * 1000) / STEPS_PER_REV;  // 每步间隔 ≈ 1157微秒

  21. // 状态机变量
  22. enum MotorState {
  23.   RUNNING,    // 正在转动
  24.   PAUSING     // 暂停中
  25. };

  26. MotorState state = RUNNING;
  27. unsigned long lastStepTime = 0;       // 上次步进时间(微秒级)
  28. unsigned long lastStateChangeTime = 0; // 上次状态切换时间(毫秒级)
  29. unsigned long stepsCompleted = 0;     // 当前圈已完成的步数
  30. bool direction = HIGH;                // HIGH = 正转, LOW = 反转

  31. void setup() {
  32.   pinMode(stepPin, OUTPUT);
  33.   pinMode(dirPin, OUTPUT);
  34.   
  35.   // 设置初始方向
  36.   digitalWrite(dirPin, direction);
  37.   
  38.   // 初始化计时器
  39.   lastStateChangeTime = millis();
  40.   lastStepTime = micros();
  41.   
  42.   Serial.begin(9600);
  43.   Serial.println("RY29-05 步进电机启动(带减速齿轮,1/12°步距角)");
  44.   Serial.print("一圈总步数: ");
  45.   Serial.println(STEPS_PER_REV);
  46.   Serial.print("每步间隔: ");
  47.   Serial.print(STEP_INTERVAL_US);
  48.   Serial.println(" 微秒");
  49. }

  50. void loop() {
  51.   unsigned long currentMicros = micros();
  52.   unsigned long currentMillis = millis();
  53.   
  54.   switch(state) {
  55.     case RUNNING:
  56.       // 控制步进脉冲(非阻塞,微秒级计时)
  57.       if (currentMicros - lastStepTime >= STEP_INTERVAL_US) {
  58.         // 输出一个脉冲
  59.         digitalWrite(stepPin, HIGH);
  60.         delayMicroseconds(5);   // 脉冲宽度,>1微秒即可
  61.         digitalWrite(stepPin, LOW);
  62.         
  63.         lastStepTime = currentMicros;
  64.         stepsCompleted++;
  65.         
  66.         // 检查是否完成一圈
  67.         if (stepsCompleted >= STEPS_PER_REV) {
  68.           stepsCompleted = 0;
  69.           state = PAUSING;
  70.           lastStateChangeTime = currentMillis;
  71.           Serial.println(">>> 完成一圈,暂停500ms <<<");
  72.         }
  73.       }
  74.       break;
  75.       
  76.     case PAUSING:
  77.       // 等待暂停时间结束
  78.       if (currentMillis - lastStateChangeTime >= PAUSE_TIME_MS) {
  79.         // 切换方向
  80.         direction = !direction;
  81.         digitalWrite(dirPin, direction);
  82.         
  83.         // 打印方向信息
  84.         if (direction == HIGH) {
  85.           Serial.println(">>> 切换方向:正转 <<<");
  86.         } else {
  87.           Serial.println(">>> 切换方向:反转 <<<");
  88.         }
  89.         
  90.         // 切换到运行状态
  91.         state = RUNNING;
  92.         lastStateChangeTime = currentMillis;
  93.       }
  94.       break;
  95.   }
  96. }
复制代码





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 2家元 +48 收起 理由
kkdkj + 30 謝謝分享
jf201006 + 18 謝謝分享

查看全部打赏

发表于 2026-5-26 14:07:45 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2026-5-26 14:20:21 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2026-5-26 15:25:27 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2026-5-26 17:35:15 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2026-5-26 23:20:59 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2026-5-27 00:15:13 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2026-5-27 07:53:56 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-5-27 11:43:46 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2026-5-27 11:45:43 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2026-6-5 07:12:14 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2026-6-12 05:54:13 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 昨天 21:52 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|数码之家-技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2026-6-23 03:56 , Processed in 0.327601 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz!

© MyDigit.Net Since 2006

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