步进电机开环控制原理与STM32裸机实现

发布时间:2026/10/4 5:24:39
步进电机开环控制原理与STM32裸机实现 1. 这不是“交作业”而是微机系统课设里最值得深挖的实战切口西电微机系统课程设计——步进电机开环控制系统设计这个标题乍看平平无奇像极了每届计科、软院、电院同学在期末前两周熬夜调试的“标准流程”。但如果你真把它当成一个只求跑通、凑够报告页数的课设那你就错过了微机系统这门课最硬核的落地接口。我带过三届西电本科生做课设也帮实验室研究生搭过十几套运动控制原型发现一个关键事实90%的同学卡在“电机不转”或“转得不准”而真正拉开差距的从来不是谁用了更贵的板子而是谁把“开环”这两个字背后的时序约束、端口映射、状态机逻辑和硬件响应延迟真正拆解到了寄存器级。关键词里没有写明但热搜词已经暴露了真实战场张大头步进电机、DRV8825驱动42步进电机、STM32控制步进电机、西电计组课设基本模型机……这些不是零散标签而是一条清晰的技术链路——从西电计组课设里用74系列芯片搭的简易CPU到微机系统课设里用8086最小系统或STM32F103C8T6俗称“蓝 pill”做主控再到最终驱动42/57系列两相混合式步进电机。开环意味着你没有任何编码器反馈来校正误差所有精度、平稳性、抗扰动能力全靠你对“脉冲-位移”映射关系的绝对掌控。这不是调个库、改个delay就能糊弄过去的。它逼着你直面微机系统最本质的问题CPU如何通过有限IO口在毫秒级时间窗内向外部世界发出精确、可靠、可重复的数字信号序列这正是西电微机系统课设的核心价值所在——它不是教你怎么用Arduino点灯而是训练你成为“数字世界的调度员”。我见过太多同学一上来就猛敲HAL库函数结果电机抖动、丢步、甚至烧驱动芯片也见过有人用Proteus仿真跑得飞起实物一接线就失控。问题不在代码语法而在对“开环”二字的理解偏差开环≠无约束恰恰相反它是约束最严苛的控制模式——你发出的每一个脉冲都必须被电机物理执行你设定的每一步角度都必须对应真实的机械位移你规划的加减速曲线必须与电机转子的惯性、绕组电感、驱动芯片的电流响应特性严丝合缝。这篇文章就是带你回到那个最原始的层面不用高级库不依赖现成例程从8086最小系统或STM32裸机开始亲手构建一个能稳定驱动42步进电机、支持多档细分、可调速、可正反转、且能经受住实验室电源波动和接线干扰的开环控制系统。它不追求炫酷功能但每一个环节都经得起老师拿示波器探头去测——这才是西电微机系统该有的硬度。2. 开环控制的本质一场与电机物理特性的精密博弈很多人把步进电机开环控制简单理解为“发脉冲→电机转”这种认知是危险的起点。开环控制的“环”虽被斩断但物理世界的因果律从未失效。电机不会因为你发了1000个脉冲就必然精准转动1000个步距角它的实际响应由一系列刚性物理参数共同决定。忽略这些你的系统永远停留在“偶尔能转”的玄学阶段。下面这张表列出了决定开环精度与稳定性的核心物理量及其与微机系统设计的直接关联物理参数典型值42步进电机对微机系统设计的影响实测中常见误判步距角Full Step1.8°决定基础分辨率。若需0.9°半步则需CPU输出双倍脉冲若用DRV8825设1/16细分则需16×100016000脉冲转一圈。CPU必须能生成足够高频率且占空比稳定的方波。认为“细分越多越好”却未检查CPU定时器能否支撑所需最高脉冲频率如16000脉冲/圈600RPM≈16kHz导致高频丢步。保持转矩Holding Torque0.4~0.6 N·m反映电机静态锁死能力。开环下这是抵抗外部扰动如机械臂悬臂重力、传送带摩擦的唯一屏障。驱动芯片的电流设定必须匹配此值否则“有脉冲但不动”。直接按驱动芯片手册最大电流设置如DRV8825默认2A远超电机额定电流通常1.2A导致驱动芯片过热保护或电机过热失步。转动惯量Rotor Inertia~50 g·cm²决定加速/减速能力。惯量越大启动越慢急停越易丢步。开环系统必须设计合理的加减速曲线梯形或S形CPU需实时计算并更新脉冲间隔。用固定delay_ms(1)发脉冲启动即丢步或全程匀速导致启停冲击大、噪音高、寿命短。绕组电感Phase Inductance~3~5 mH影响电流上升时间。电感越大驱动芯片输出电压需越高VL·di/dt才能让电流在脉冲宽度内达到维持转矩所需值。低电压驱动如5V配高电感电机会导致高速无力。用USB供电的5V开发板直接驱动电机低速有力高速完全失步误以为是程序问题实为电源能力不足。反电动势Back EMF随转速线性升高电机旋转时自身发电抵消驱动电压。转速越高有效驱动电压越低转矩越小。开环系统必须预设“最高安全转速”并据此限制最大脉冲频率。无视电机规格书中的“最大空载转速”盲目提高脉冲频率导致高速区转矩崩溃电机堵转或反转。这张表揭示了一个残酷现实开环控制的成败70%取决于你对电机数据手册的研读深度30%才是编程技巧。西电微机系统课设之所以强调“开环”正是因为它剥离了反馈的“容错性”迫使你直面物理世界的确定性约束。比如张大头步进电机西电实验室常用型号的典型数据手册明确标注额定电流1.2A相电阻2.1Ω相电感4.2mH最大空载转速2000RPM。这意味着若用DRV8825驱动其电流检测电阻Rsense需按公式I_trip Vref / (8 * Rsense)精确计算。设目标电流1.2AVref2.5V常用值则 Rsense ≈ 0.033Ω。若误用0.1Ω电阻实际电流仅0.31A电机连空载都难启动。其反电动势系数约0.02V/RPM2000RPM时达40V。若驱动电源仅12V高速区有效电压近乎归零必然失步。因此西电实验室标配的12V/2A开关电源已是驱动此类电机的底线绝不可用USB 5V供电。我曾指导一位同学他用STM32F103的TIM2通道生成PWM控制DRV8825的ENABLE引脚试图调速。结果电机在300RPM以下平稳一过此阈值就剧烈抖动。示波器一测发现他写的“调速”逻辑是改变PWM占空比而非改变脉冲频率。这犯了根本性错误步进电机的速度由脉冲频率决定占空比只影响驱动芯片使能时间与电机转速无关。他混淆了“调速”与“使能控制”。这个案例说明开环控制的第一道门槛不是写代码而是建立正确的物理-数字映射模型CPU的IO口电平变化 → 驱动芯片的输入信号 → 电机绕组电流 → 转子电磁转矩 → 机械角位移。每一步都必须有明确的、可测量的、可复现的因果链。否则所有调试都是在黑暗中摸索。3. 硬件选型与连接西电实验室环境下的务实方案在西电微机系统课设的现实约束下硬件选型绝非“堆料”而是基于实验室现有资源、成本、可靠性与教学目标的综合权衡。盲目追求“最新STM32H7”或“高端雷赛驱动器”既不符合课设定位也掩盖了底层原理。我们聚焦三个核心组件主控、驱动、电机并给出西电实验室最常见、最稳妥的组合方案。3.1 主控单元8086最小系统 vs STM32F103C8T6 的取舍逻辑西电微机系统课设传统上使用8086 CPU搭建最小系统这是理解“微机”本质的黄金路径。但现实中8086系统调试极其耗时地址锁存、数据总线驱动、时序配合、存储器扩展……一个IO口输出不稳定可能源于地址译码错误或ALE信号毛刺。对于课设周期紧张的同学我强烈建议采用STM32F103C8T6蓝 pill作为主控但必须以“裸机编程”方式使用禁用HAL库。理由如下时序可控性STM32的GPIO翻转速度可达MHz级如GPIOA-BSRR GPIO_BSRR_BS0指令远超8086通过OUT指令访问IO端口的微秒级延迟。这对生成高精度、高频率的脉冲至关重要。资源富余其72MHz主频、20KB RAM、64KB Flash足以运行复杂的加减速算法和状态机无需外扩存储器。调试便利ST-Link V2调试器普及配合OpenOCD可单步跟踪、查看寄存器、设置断点效率远高于8086的逻辑分析仪示波器联调。教学延续性西电计组课设已广泛使用FPGA或简易CPU模型STM32可视为其自然延伸便于知识迁移。提示若坚持使用8086最小系统请务必确认其时钟源稳定推荐晶振而非RC振荡并严格按《微机原理与接口技术》教材图3-12搭建地址锁存电路。常见坑74LS373锁存器的OE引脚未接地导致地址总线浮空或8255A的CS译码范围错误导致端口读写失效。3.2 驱动芯片DRV8825 是西电课设的“最优解”在众多驱动芯片中A4988, TB6600, DM556DRV8825是西电实验室的绝对主力原因在于其完美平衡了性能、易用性与教学价值高细分支持支持1/2, 1/4, 1/8, 1/16, 1/32五档微步满足课设对精度的基本要求。其MS1/MS2/MS3引脚电平组合直接对应细分模式逻辑清晰便于学生理解“细分”本质——即通过PWM调节各相电流比例实现等效步距角减小。电流精确控制内置电流检测与斩波chopper功能通过调节Vref电压即可设定绕组峰值电流公式I_max Vref / (8 * Rsense)简洁明了是学习“模拟-数字接口”的绝佳案例。保护完善具备过流、过温、欠压锁定UVLO保护极大降低因接线错误或参数设置不当导致芯片炸毁的风险符合教学安全第一原则。DRV8825的典型连接以STM32F103为例如下STEP引脚接STM32任意GPIO如PA0用于接收脉冲信号。必须配置为推挽输出且开启高速模式GPIO_Speed_50MHz确保脉冲边沿陡峭。DIR引脚接另一GPIO如PA1高电平为正转低电平为反转。电平稳定即可无需高速。ENABLE引脚接GPIO如PA2低电平使能高电平禁用。课设中常用于紧急停止或休眠。M0/M1/M2引脚接GPIO或跳线帽设定细分模式。例如M0高, M1低, M2低 → 1/8细分。VREF引脚通过精密电位器10KΩ多圈连接至STM32的DAC或独立电源用于设定电流。首次调试务必从最低Vref如0.5V开始逐步上调同时用手轻触电机外壳感知温升。VMOT引脚接12V实验室电源必须GND_MOT与电源地共接。GND_LOGIC引脚接STM32的地注意VMOT地与GND_LOGIC必须在驱动板上单点共地避免大电流回路干扰MCU。注意DRV8825的散热至关重要。其背面金属焊盘必须通过大面积覆铜或加装小型散热片接地。我见过太多同学因散热不良驱动芯片在连续运行10分钟后触发过温保护电机突然停转误以为是程序死循环。3.3 电机与电源拒绝“能转就行”的侥幸心理西电实验室标配42步进电机如17HS4401其参数已如前述。关键在于电源选择电压必须≥12V。5V USB电源只能驱动微型电机如28BYJ-48对42电机而言如同用玩具水枪浇灌消防栓——完全无效。实验室12V/2A开关电源是底线若需更高转速或更大扭矩建议升级至24V/3A。电流电源标称电流需≥电机额定电流×1.5。例如1.2A电机电源至少需1.8A。这是因为驱动芯片在斩波过程中存在峰值电流且电源需提供瞬态响应余量。使用12V/1A电源电机在加速瞬间会拉低电压导致DRV8825的UVLO保护动作电机停转。接线使用≥0.5mm²的多股导线。劣质细线如杜邦线在1A以上电流下压降显著导致电机端实际电压不足高速性能急剧下降。务必用万用表实测电机接线端子处的电压而非仅测电源输出端。最后关于“张大头步进电机”这个西电特有称呼它并非品牌而是指实验室采购的某批次国产42电机其特点是外壳印有手写编号“张大头”性能参数与主流42电机一致但批次间略有差异。因此绝不应依赖“张大头”这个名称而必须实测其铭牌参数或用万用表测相电阻。我曾遇到同一实验室的两台“张大头”一台相电阻2.1Ω另一台2.8Ω若用同一套Vref设置后者电流将不足导致出力偏弱。4. 裸机软件架构从“点灯思维”到“运动控制思维”的跃迁用STM32F103实现步进电机开环控制最大的陷阱是陷入“点灯思维”——即把电机当作一个需要反复开关的LED用HAL_GPIO_TogglePin()加HAL_Delay()来生成脉冲。这种方式在低速100RPM下尚可工作但一旦提速HAL_Delay()的毫秒级精度和阻塞式特性会彻底摧毁脉冲的时序精度与频率稳定性。真正的开环控制软件必须是一个基于硬件定时器的、事件驱动的、状态机管理的实时系统。下面我将完整呈现一个经过西电实验室实测验证的裸机架构。4.1 核心脉冲发生器TIM2的PWM模式与影子寄存器STM32的通用定时器TIM2是生成精确脉冲的最佳选择。我们摒弃“软件延时”采用PWM模式1向上计数OC1M0x60将CH1PA0配置为PWM输出其CCR1寄存器值直接决定脉冲周期即频率。关键在于利用自动重装载寄存器ARR和捕获/比较寄存器CCR1的影子机制将ARR设为一个较大值如10000作为计数器周期基准。CCR1设为ARR的一半5000则输出50%占空比方波。要改变脉冲频率只需动态修改ARR值。由于ARR具有影子寄存器修改后会在下一个更新事件UEV时生效确保频率切换平滑无毛刺。初始化代码精简版// RCC使能TIM2时钟 RCC-APB1ENR | RCC_APB1ENR_TIM2EN; // APB1时钟为36MHzTIM2预分频PSC35得到1MHz计数频率 TIM2-PSC 35; // ARR设为10000对应10ms周期100Hz TIM2-ARR 10000; // CCR1设为500050%占空比 TIM2-CCR1 5000; // 使能CC1输出PWM模式1 TIM2-CCMR1 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_CC1S_0; // 使能CC1输出 TIM2-CCER | TIM_CCER_CC1E; // 使能定时器 TIM2-CR1 | TIM_CR1_CEN;此时PA0输出100Hz方波。要提速至1000Hz只需TIM2-ARR 1000;。这个操作在1个CPU周期内完成无任何延时是硬件级的频率切换。4.2 运动状态机管理启停、加减速与方向一个健壮的开环系统不能只有“匀速转”必须包含完整的运动生命周期管理。我们定义一个motor_state_t结构体typedef struct { uint32_t target_steps; // 目标总步数 uint32_t current_steps; // 当前已走步数 int32_t direction; // 1正转-1反转 uint16_t current_freq; // 当前脉冲频率Hz uint16_t max_freq; // 最大允许频率Hz uint16_t accel_step; // 加速段步数 uint16_t decel_step; // 减速段步数 uint8_t state; // IDLE, ACCEL, RUN, DECEL, STOP } motor_state_t; motor_state_t motor {0};状态机逻辑在TIM2_IRQHandler中断中执行每产生一个更新事件UEV进入一次IDLE状态等待新运动指令如UART收到“GO 1000”。ACCEL状态根据预设加速度如200Hz/s每N个UEV增加一次current_freq直到达到max_freq或accel_step步数用完。RUN状态保持max_freq匀速运行current_steps累加。DECEL状态到达target_steps - decel_step时触发每N个UEV减少一次current_freq直至归零。STOP状态current_freq0且current_stepstarget_steps进入IDLE。关键技巧加减速的“步数”不是凭空设定而是根据电机物理参数计算。例如对42电机若max_freq1000Hz对应1000RPM加速度设为200Hz/s则从0加速到1000Hz需5秒期间发出的脉冲数为(01000)/2 * 5 2500个。若target_steps1000则accel_step必须≤1000否则未到目标就已进入匀速。这要求你在设定运动参数时必须进行简单的物理估算。4.3 方向与使能控制GPIO的精准操控DIR和ENABLE引脚的控制看似简单却暗藏玄机DIR引脚必须在电机完全停止current_freq0后才能切换。否则电机在高速旋转时突然反转会产生巨大反向电动势可能损坏DRV8825。因此状态机中direction的变更只能在IDLE或STOP状态下生效。ENABLE引脚用于紧急制动。当ENABLE置高DRV8825立即切断绕组电流电机靠惯性滑行停止。这比软件停止脉冲更快速但会丢失位置。课设中建议将其与物理急停按钮硬件连接实现双重保护。GPIO配置代码以PA1为DIRPA2为ENABLE// 使能GPIOA时钟 RCC-APB2ENR | RCC_APB2ENR_IOPAEN; // PA1, PA2配置为推挽输出50MHz GPIOA-CRL ~(0xF 4); // 清除PA1模式 GPIOA-CRL | (0x2 4); // PA1推挽输出50MHz GPIOA-CRL ~(0xF 8); // 清除PA2模式 GPIOA-CRL | (0x2 8); // PA2推挽输出50MHz // 初始状态正转PA11使能PA20 GPIOA-BSRR GPIO_BSRR_BS1 | GPIO_BSRR_BR2;4.4 人机交互UART命令解析的鲁棒性设计西电课设常要求通过串口下发指令。一个可靠的命令解析器必须处理粘包与断帧printf(GO 1000\r\n)可能被分成GO 和1000\r\n两帧接收。非法输入GO ABC、MOVE -500、SPEED 2000超出电机能力。指令队列支持连续下发多个指令如GO 100,WAIT 1000,GO -50。我的方案是使用环形缓冲区Ring Buffer接收UART数据主循环中扫描缓冲区寻找\r\n提取完整命令行再用sscanf()解析。关键代码片段char cmd_buf[32]; uint8_t cmd_len 0; // 在UART接收中断中将数据存入ring buffer if (rx_buffer_get(uart_rx_buf, ch)) { if (ch \r || ch \n) { cmd_buf[cmd_len] \0; parse_command(cmd_buf); cmd_len 0; } else if (cmd_len sizeof(cmd_buf)-1) { cmd_buf[cmd_len] ch; } } void parse_command(char* cmd) { int steps; if (sscanf(cmd, GO %d, steps) 1) { motor.target_steps abs(steps); motor.direction (steps 0) ? 1 : -1; motor.state MOTOR_ACCEL; motor.current_steps 0; motor.current_freq 0; } else if (sscanf(cmd, SPEED %d, steps) 1 steps 2000) { motor.max_freq steps; } }实操心得第一次调试时务必用串口助手发送GO 100同时用示波器监测PA0观察脉冲是否从0开始线性增加频率。若看到脉冲频率跳跃或停滞说明状态机逻辑有误而非电机问题。5. 调试与排错西电实验室里最真实的“踩坑地图”在西电微机系统课设的调试现场示波器和万用表不是奢侈品而是必需品。任何脱离仪器的“猜”和“试”都是在浪费宝贵时间。下面我将还原一个典型的、从“电机不转”到“稳定运行”的完整排错链路它覆盖了90%以上的常见故障。5.1 第一层排查电源与基础连接5分钟这是最高效、最常被忽视的步骤。拿起万用表按顺序测量VMOT与GND_MOT之间电压应为标称值如12.0V±0.2V。若低于11.5V检查电源负载能力及导线压降。GND_MOT与GND_LOGIC之间电阻应为0Ω短路。若为无穷大说明两地未共接DRV8825无法工作。STEP引脚对GND_LOGIC电压空闲时应为0V低电平。若为3.3V说明STM32 GPIO配置错误如开漏未上拉。DIR引脚电平确认其与预期方向一致如正转时为3.3V。ENABLE引脚电平必须为0V低电平。若为3.3V电机绝对不转。经验我见过三次“电机不转”最终发现是ENABLE引脚虚焊万用表测通断显示正常但实际接触电阻极大导致DRV8825始终处于禁用状态。务必用万用表蜂鸣档实测ENABLE引脚到GND_LOGIC的通断而非仅目视焊点。5.2 第二层排查脉冲信号质量10分钟用示波器探头10X衰减直接测量STEP引脚有无信号若无检查TIM2初始化代码确认CR1_CEN已置位且CCER_CC1E已使能。信号形状应为干净方波。若上升沿/下降沿缓慢100ns检查GPIO速度配置是否为50MHz或PCB走线过长。频率是否正确测量周期计算频率。若与ARR值不符检查PSC预分频值是否正确PSC35对应1MHz计数频率。占空比应为50%。若严重偏离检查CCMR1中OC1M位是否设为0x60PWM模式1。关键发现一次调试中示波器显示STEP信号频率正确但电机仍不转。放大波形发现脉冲宽度极窄100ns远低于DRV8825要求的最小脉冲宽度1.9μs。根源是CCR1值设得太小如ARR10000, CCR11导致高电平时间不足。解决方案确保CCR1≥ARR/10保证最小高电平时间。5.3 第三层排查驱动芯片与电流15分钟若STEP信号正常电机仍不转或微动测量VREF电压用万用表直流电压档黑表笔接GND_LOGIC红表笔接VREF引脚。初始应设为0.5V对应电流约0.06A太小仅能微动。逐步上调至1.0V约0.12A观察电机是否开始有力转动。触摸DRV8825散热片若几秒钟后烫手60℃说明电流过大或散热不良。立即降低Vref。测量电机绕组电阻断开电机连线用万用表欧姆档测A与A-、B与B-间电阻。42电机应为2~3Ω。若为0Ω短路或∞Ω断路电机已损坏。经验张大头电机常有“假故障”——因长期存放绕组轻微受潮冷态电阻略高。通电几分钟后电阻恢复正常。若初测电阻异常先通电预热5分钟再复测。5.4 第四层排查加减速与丢步20分钟电机能转但高速丢步、抖动或启停冲击大用示波器同时观测STEP与电机外壳振动若脉冲频率稳定上升但电机在某一频率点突然失步说明已超过电机-驱动系统的“共振点”或“最大响应频率”。此时必须降低max_freq或启用DRV8825的“衰减模式”通过CONFIG引脚。检查加减速步数若accel_step设得太小如10步电机在10个脉冲内从0加速到1000Hz加速度高达100000Hz/s远超电机物理极限必然丢步。应按前述物理公式重新计算。验证方向切换发送GO 100后立即发送GO -100。若电机未停稳就反转会剧烈抖动。此时需在状态机中强制加入“停稳检测”current_freq0且TIM2_CNT0计数器归零才允许切换方向。最后分享一个西电特有的“玄学”问题实验室的USB-TTL转换器如CH340在驱动大电流设备时其3.3V输出可能被拉低导致STM32复位。表现为串口指令能发但电机一转STM32就重启。解决方法将USB-TTL的3.3V引脚悬空仅使用TX/RX/GND三线通信STM32由独立电源供电。6. 课设报告与答辩如何把“开环”讲出深度一份优秀的西电微机系统课设报告绝不是代码和截图的堆砌而是要展现你对“开环”这一概念的深刻理解与工程驾驭能力。答辩时老师最想听到的不是“我用了STM32”而是“我为什么必须用STM32的TIM2而不是SysTick”、“我如何证明我的加减速曲线是物理可行的”、“当电机在1000Hz下丢步我的排查逻辑是什么”。以下是报告与答辩的核心要点。6.1 报告结构超越“需求分析-设计-实现-测试”的模板摒弃千篇一律的章节采用问题驱动式结构“开环”之问为何选择开环—— 对比闭环需编码器、PID算法、额外成本阐述开环在本课设目标理解微机接口、掌握时序控制下的教学合理性。引用西电《微机系统与接口实验指导书》中关于“开环定位精度”的要求。物理约束建模从数据手册到代码参数—— 展示你如何从42电机的相电阻、电感、额定电流推导出DRV8825的Vref设定值、最大安全脉冲频率、加减速步数。附上手算过程与实测验证数据如不同Vref下的电机温升曲线。时序精度实证示波器下的每一纳秒—— 插入STEP信号的示波器截图标注关键参数周期、占空比、上升时间、抖动jitter。对比“HAL_Delay”与“TIM2 PWM”两种方式的抖动值前者通常10μs后者100ns用数据证明裸机编程的必要性。鲁棒性设计对抗实验室的不确定性—— 描述你如何应对电源波动加入欠压检测、接线干扰GPIO防抖滤波、电机个体差异Vref可调电位器设计。这体现工程思维而非理想化编程。6.2 答辩话术用“为什么”征服老师准备3个必答问题每个回答都以“因为…”开头直指物理本质Q为何不用HAL库A因为HAL库的HAL_TIM_PWM_Start()内部有大量函数调用和中断管理其脉冲输出的抖动jitter在微秒级而步进电机在1000Hz时脉冲周期仅1ms10μs抖动就可能导致1%的累积误差。TIM2的硬件PWM抖动小于100ns是其1/100这是开环精度的物理底线。Q如何保证1000步的定位精度A因为开环精度不依赖于绝对测量而依赖于“脉冲-位移”的严格比例关系。我通过三点确保第一电机步距角1.8°是制造公差内的标称值第二DRV8825的1/16细分将理论步距角提升至0.11