8浏览
查看: 8|回复: 7

[项目] 【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机

[复制链接]
CASIC MOTOR ZWS37U‑CS‑001 无刷行星减速电机
CASIC为中国航天科工,属于工业级无刷行星减速电机,集成内置驱动+霍尔编码器,多用于航空座椅、机器人底盘、机械臂关节。

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图1

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图2

驴友花雕  高级技神
 楼主|

发表于 半小时前

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机

这是内置驱动板一体化行星减速 BLDC 电机,不需要外接三相无刷电调;给主电源 + 方向 + PWM 信号即可运转,尾部集成正交码盘编码器,适合机器人底盘、全向轮小车、AGV 小车项目。

一、铭牌核心参数

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图1

二、8P 引线定义(4 根功率控制 + 4 根编码器反馈)

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图2

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 半小时前

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机

四、结构拆解
前端:金属行星齿轮减速箱,金属行星齿轮,负载能力强,抗冲击,输出轴 D‑型轴,方便固定联轴器 / 轮子。
中段:三相无刷电机本体,内置无刷驱动,不需要外置 BLDC 电调;供电 + PWM 调速、方向信号直接给电机排线。
尾部:集成霍尔编码器模块,编码器独立排线,获取转轴位置、测速,闭环速度 / 位置控制。

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图2

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图3

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图1

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 半小时前

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机

五、电气引脚功能(排线)
电源:直流 14.8V 供电正负极
控制信号:PWM 调速引脚、正反转 DIR 方向引脚、使能 EN 引脚
编码器 A/B 相、电源 GND:用于读取转速、位置,做 PID 闭环调速。
✅ 特点:单电源供电,直接 TTL 电平控制,不用外接无刷电调。支持 PWM 调速,支持正反转;自带编码器直接闭环控制。

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图1

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图2


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 半小时前

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机

六、优缺点
1、优点
航天科工工业品质,金属行星减速箱,寿命长,抖动小,扭矩大,体积紧凑 37mm 直径。
驱动板内置,大大简化硬件,单片机直接 TTL 信号控制。
自带高精度霍尔编码器,非常适合机器人小车(麦克纳姆轮底盘)、小型机械臂关节、AGV。
14.8V 正好匹配 4 串 18650 锂电池机器人供电系统。

2、缺点
体积比普通有刷减速电机大;重量较重。
控制逻辑比简单有刷电机复杂,需要处理 EN、DIR、PWM,读取编码器 AB 相;不可以直接接电源硬转。
停产老型号,市面大多是拆机二手件,无全新现货。

3、适合项目
麦克纳姆轮小车、差分轮机器人底盘(ESP32 / 行空板 K10 闭环 PID 调速)
小型机械臂关节执行器
自动化平台、往复执行机构
机器人竞赛 VEX、RoboMaster 小型机构

4、注意事项
额定14.8V,不要直接上 24V,会烧毁内置驱动板,上限不超过 18V。
禁止堵转,堵转电流会远大于 1.6A,容易烧内置驱动。
编码器信号线不要和动力线捆在一起,避免干扰测速。

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图2

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图1

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 半小时前

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机

七、Arduino‑ESP32 最小控制示例片段

  1. #define DIR_PIN  22   //黄色方向线
  2. #define PWM_PIN  23   //绿色调速线
  3. // 注意:PWM频率设置 >=5000Hz
  4. // 该电机逻辑特殊:0%占空比全速,80%占空比低速
  5. void setup() {
  6.   pinMode(DIR_PIN,INPUT); //INPUT=悬空,CW;OUTPUT_LOW=CCW
  7.   ledcSetup(0,5000,10);   //通道0,5kHz,10bit分辨率 0‑1023
  8.   ledcAttachPin(PWM_PIN,0);
  9. }
  10. //全速运行
  11. void motor_full_speed(){
  12.   ledcWrite(0,0); //0 对应0%占空比,满速
  13.   pinMode(DIR_PIN,INPUT); //CW方向
  14. }
  15. //低速23rpm附近,80%占空比 = 819(10bit 1023*0.8)
  16. void motor_low_speed(){
  17.   ledcWrite(0, 819);
  18. }
  19. //停机!切换方向前必须调用
  20. void motor_stop(){
  21.   ledcWrite(0, 820); //>80%,停机
  22.   delay(100);
  23. }
复制代码

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图2

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图1

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 28 分钟前

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机

八、ESP32 读取 ZWS37U‑CS‑001 正交编码器 AB 脉冲完整代码
硬件说明:该电机编码器输出A/B 两相正交脉冲,无 Z 相;编码器供电:白→5V,蓝→GND;CHA、CHB 接 ESP32。
ESP32 有硬件正交解码计数器 PCNT 外设,硬件计数,不占用 CPU,不会丢脉冲,优先使用硬件 PCNT,不要用外部中断轮询。

硬件接线

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图1

注意:电机 8 根线中,红黑黄绿是电机动力控制;编码器是独立 4 根(白、蓝、菲、棕)。
ESP32‑S3 同样支持 PCNT 外设,引脚分配逻辑一样。
完整代码(硬件 PCNT 正交解码)

  1. /*
  2.   ESP32 PCNT硬件正交计数器读取AB编码器
  3.   适配 CASIC ZWS37U‑CS‑001 减速无刷电机
  4.   硬件计数,不丢脉冲,主线程读取计数值即可
  5. */
  6. #include <Arduino.h>
  7. #include "driver/pcnt.h"
  8. // =========配置区=========
  9. #define PCNT_UNIT        PCNT_UNIT_0
  10. #define PCNT_CHANNEL     PCNT_CHANNEL_0
  11. #define ENC_A_PIN        18      // CHA A相
  12. #define ENC_B_PIN        19      // CHB B相
  13. // 编码器参数:根据你的电机码盘线数修改
  14. // 重要:ZWS37U‑CS‑001 减速箱160rpm输出轴,注意:码盘在【电机高速端】不是减速输出轴!
  15. // 脉冲数 = 原始电机码盘线数 ×4(四倍频正交),计数值对应高速电机轴,需要除以减速比得到输出轴转角
  16. const int GEAR_RATIO = 30;   //二级行星减速比,根据实际电机铭牌换算
  17. // =======================
  18. int16_t pulse_count = 0;   //硬件计数器原始计数值
  19. void pcnt_init()
  20. {
  21.     //1. PCNT单元配置
  22.     pcnt_config_t pcnt_cfg = {
  23.         .pulse_gpio_num = ENC_A_PIN,
  24.         .ctrl_gpio_num  = ENC_B_PIN,
  25.         .lctrl_mode     = PCNT_MODE_REVERSE,  // B相电平控制计数方向
  26.         .hctrl_mode     = PCNT_MODE_KEEP,
  27.         .pos_mode       = PCNT_COUNT_INC,
  28.         .neg_mode       = PCNT_COUNT_DEC,
  29.         .counter_h_lim  = 32767,
  30.         .counter_l_lim  = -32768,
  31.         .unit           = PCNT_UNIT,
  32.         .channel        = PCNT_CHANNEL
  33.     };
  34.     pcnt_unit_config(&pcnt_cfg);
  35.     //2. 开启滤波器,消除机械抖动噪声,滤除<100ns脉冲干扰
  36.     pcnt_set_filter_value(PCNT_UNIT, 100);
  37.     pcnt_filter_enable(PCNT_UNIT);
  38.     //3. 清零计数器,启动
  39.     pcnt_counter_clear(PCNT_UNIT);
  40.     pcnt_counter_resume(PCNT_UNIT);
  41. }
  42. void setup()
  43. {
  44.     Serial.begin(115200);
  45.     pcnt_init();
  46.     Serial.println("ESP32 PCNT正交编码器启动完成");
  47. }
  48. void loop()
  49. {
  50.     //读取硬件计数器,非阻塞,不占用CPU
  51.     pcnt_get_counter_value(PCNT_UNIT, &pulse_count);
  52.     Serial.printf("原始脉冲:%6d | 输出轴圈数:%.3f\r\n",
  53.         pulse_count,
  54.         (float)pulse_count / (GEAR_RATIO * 4 * 11)  //11是示例码盘线数,请替换为实际码盘线数
  55.     );
  56.     delay(50);
  57. }
复制代码


非常关键参数提醒(针对 ZWS37U‑CS‑001 电机)
码盘安装在无刷电机高速转子侧(减速箱输入侧),不是输出轴!
读到的pulse_count 是高速电机轴脉冲,不是减速输出轴脉冲。
四倍频正交:A/B 正交读取,每 1 个码盘刻度产生 4 个脉冲。
输出轴转 1 圈 = 高速电机轴转动 GEAR_RATIO 圈。
商家没有公开码盘线数!你需要实际标定:手动转动输出轴完整一圈,观察 Serial 打印脉冲总数,得到真实总脉冲每圈。

标定实操步骤
将代码上传,打开串口监视器;
手动用手转动电机输出轴,完整转 1 圈;
记下原始脉冲的变化差值,记做 PULSE_PER_OUTPUT_REV,之后直接使用这个数值。

示例标定:假设输出轴转一圈,脉冲变化为 1320,则

  1. float output_rev = (float)pulse_count / 1320.0f; //直接得到输出轴圈数
复制代码


拓展:速度计算(定时采样,计算 RPM 转速)
不能用 delay 算速度;用micros()做时间戳,固定时间间隔读取脉冲差。

  1. // 全局变量
  2. int16_t last_pulse = 0;
  3. uint32_t last_time_us = 0;
  4. float get_output_rpm(void)
  5. {
  6.     int16_t cur_pulse;
  7.     uint32_t cur_us = micros();
  8.     pcnt_get_counter_value(PCNT_UNIT, &cur_pulse);
  9.     int delta_pulse = cur_pulse - last_pulse;
  10.     uint32_t delta_us = cur_us - last_time_us;
  11.     last_pulse = cur_pulse;
  12.     last_time_us = cur_us;
  13.     // delta_us单位微秒 → min=60*1e6 us
  14.     // PULSE_PER_OUTPUT_REV:输出轴每一转总脉冲数(你手动标定出来)
  15.     float rpm = (float)delta_pulse * 60.0f * 1000000.0f / ((float)delta_us * 1320.0f);
  16.     return rpm;
  17. }
复制代码

放到 loop 中调用,即可得到减速输出轴实时转速 RPM,用于 PID 速度闭环。

硬件避坑清单
编码器 GND(蓝线)必须与 ESP32 GND、电机功率负极黑线共地,否则读数乱跳。
不要用普通外部中断 attachInterrupt 读取 AB 相,高速旋转时会丢失脉冲;PCNT 硬件计数器才是正确方案。
ESP32‑S3 PCNT 用法完全一样,注意部分引脚是 SPI/FLASH 复用脚,不要用 GPIO11‑17 (S3 flash 脚)。
电机驱动的大电流会带来干扰;编码器信号线建议用双绞线,远离电机电源线,必要时编码器 GND 串 100Ω 电阻或者增加磁珠。
PCNT 计数器范围:‑32768 ~ +32767,电机长时间转动会溢出;机器人项目需要在程序层做溢出补偿。


回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 27 分钟前

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图1

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图3

【花雕动手做】拆解 CASIC‑MOTOR ZWS37U 无刷行星减速电机图2
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail