ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

电机家族:有的电机听“目标”,有的电机听“力气”

电机家族:有的电机听“目标”,有的电机听“力气” 经典三问Q: 舵机收到的是什么A: 一段 PWM 里高电平脉宽代表的目标角度。舵机内部自己完成“读位置、算误差、转到位”的全过程外界只给它目标值。Q: 舵机和普通直流电机差在哪A: 直流电机收到的是电压电压就是驱动力舵机内部有电机、减速、电位器和一块控制板外界给的是“目标”不是“力气”。Q: 为什么要先认识电机家族A: 写程序前先分清楚这一台是“给目标”还是“给力气”。把舵机的代码直接搬到直流电机上转起来的现象会完全不同。舵机里面不只是一个电机把 SG90 的壳打开看里面有四样东西一只小直流电机、一组减速齿轮、一个电位器、一块小控制板。电位器装在输出轴上。轴转到哪儿电位器就把位置翻译成一个电压。控制板干的事很固定读电位器和你给的目标角度比一比算出差多少然后驱动小电机正转或反转直到误差归零。舵机当然也有电机但光说“能转的电机”就把它说窄了。它其实是一套自己会调节的小闭环。你写Servo_SetAngle(0)并不是在给它通电让它往 0 度转——是在告诉它“0 度到了没”剩下的事它自己做。你给的是目标不是力气普通直流电机不一样。把电压加到直流电机两端电流穿过线圈轴就转。你给的占空比、方向脚直接决定了它拿多少力气、往哪个方向使劲。给多少就是多少——没有人在中间帮它看“到了没有”。直流电机给电压/占空比 给力气力气决定转速和方向 舵机 给脉宽 给目标目标决定停在哪这也是为什么舵机堵转时会一直嗡嗡响它认为还没到目标就持续发力直到卡住的机构自己让步或者烧掉。这时候加大 PWM 救不了它——你给的是目标不是力气目标没变它只会更用力地撞墙。同一句“PWM 控制”落到两种器件上是两种语义一个在听每个脉冲有多长一个在感受一段时间里拿到多少能量。代码不能互换原因在这里。电机家族先认四个成员直流有刷电机最老实的成员。线圈通电就转换向靠里面的电刷和换向片机械完成。你给它电压它就出力关系最直接。小车现在用的就是这种只是外面多了一层减速齿轮。缺点也写在结构里电刷会磨损高速时会有火花和噪声。直流无刷电机把“换向”从机械电刷搬到了外面的控制器。控制器要知道转子转到哪了才能按时换通电方向——它靠霍尔传感器或反电动势猜位置。所以无刷电机很少单独出现常以“电机控制器”的形式卖。没有电刷寿命和效率都好看代价是控制器变复杂。无刷也不是云台的专属——机器人、航模、电动车里它越来越多寿命和效率是它推开有刷的原因代价是每台都要陪一个控制器。步进电机把一整圈分成固定步数每收到一个脉冲就精确走一步。它听的是“步数”不靠反馈也能停在开环位置——前提是别丢步。走得快、负载重的时候它容易跟不上脉冲这就是“丢步”。步进在工业里很常见3D 打印机、数控、送料凡是“按步数走”的位置活都有它云台只是主线里用到它的地方。舵机位置伺服的一种前面拆过的那套电机减速电位器控制板。“伺服”是个泛称指带反馈、能自己把输出调到目标上的执行器。工业上的伺服电机是更精密的版本电机编码器驱动器力气大、精度高、价格也高。SG90 是这条线里最便宜的一号——塑料齿、小力矩但闭环的逻辑一模一样。成员你给它它回报常在哪儿直流有刷电压/占空比力气转速开环小车车轮、玩具直流无刷换相时序由控制器转交大扭矩、高转速、长寿命机器人、航模、电动车步进一个个脉冲步数精确的角度步进3D 打印机、数控、工业定位舵机脉宽目标角度自己转到位并停住转向、云台、机械臂关节先动手把 SG90 转起来SG90 三根线5V 接电源线GND 接地信号线接 PA3。降压模块的 GND 和 STM32 的 GND 接在一起。舵机电源不要从 STM32 的 3.3V 挤出来STM32 只发命令5V 负责出力。颜色只能当提示以你手里那只的说明书为准。TIM2_CH4PA3做 50 Hz 周期PSC 72-1让计数步进 1 usARR 20000-1凑成 20 ms比较值写在CCR4PSC 72 - 1 72 MHz / 72 1 MHz1 个计数约 1 us ARR 20000 - 1 数满 20000 个计数周期约 20 ms CCR4 1166 高电平约 1.166 ms-60° CCR4 1500 高电平约 1.5 ms0° CCR4 1833 高电平约 1.833 ms60°三档取值是算出来的不是随手取的pulse 1000 (角度 90) × 1000 / 180——1000~2000 us对应-90° ~ 90°所以-60°/0°/60°落在1166 / 1500 / 1833 us上。程序让输出轴按-60° → 0° → 60°每个位置停 1.5 秒用 TIM1 的更新中断换位置中断函数名要写成启动文件里的向量名TIM1_UP_IRQHandler写错不报错、只是永远不进不在while (1)里睡延时。把舵盘装好它会向一边停住、回到中间、再向另一边停住。1500 us在这里不是“绝对中位”连杆孔位、舵盘齿位、车轮安装角都会移动真正的直行位置。要精确找中位拆下舵盘固定输出1500 us再把舵盘插到最接近机械中位的齿位还偏就在应用层存一个校准值例如center_offset_us -35别把机械误差藏进定时器初始化。脉宽边界控制在1000~2000 us输入越界代码会截断。网上常见的500~2500 us不是所有 SG90 都能承受连杆装上后更不能拿它当盲扫范围。可以把ARR临时改成2000-1做一次“周期改坏”实验舵机不动、抖动或发出细响改回20000-1恢复——重点是学会先按公式算周期再判断现象。现场故障它们都在说同一件事程序明明在发命令舵机却一动不动。先证明“命令确实在发”把当前角度和脉宽打到 OLED 上数字在跳说明信号线在工作——这一步不需要示波器。命令在走、舵机却不动就只剩供电和共地两个嫌疑人降压模块输出有没有掉、共地线有没有断。恢复稳定 5V 和共地问题消失。只在一边嗡嗡响。连杆被拧到机械尽头舵机仍认为没到目标持续发力。马上断电松开连杆重新找中位。正确指令救不了卡死的机构堵转发热很快。方向反了。把Servo_SetAngle()的两端映射交换或把舵盘换一个齿位。方向由“脉宽映射机械安装”共同决定别急着改驱动代码。抖STM32 还复位。让舵机快速来回扫5V 端并万用表看电压。负载一大电源就下陷。先减小负载、缩短线、确认降压模块额定电流再谈软件参数。同一个壳可能装着另一套耳朵普通 SG90 的脉宽是“目标位置”。还有一种连续旋转舵机外形几乎一样脉宽却变成“方向和速度”中间附近停往两边偏就转偏得越多越快。把普通舵机代码直接搬过去现象完全不同。买到模块先看型号说明别只看外壳颜色。最后橘猫说直流电机是执行器给力气就转转速靠猜——它不知道自己转多快也不知道轮子走了多远。想要它变成“知道自己做到没有”的执行器需要一双眼睛把转动报回来那是编码器的事。到那时直流电机也会站进“带反馈”的那一排。舵机先认识到这里它听的从来不是“PWM 信号”本身而是脉宽写进去的那个目标角度目标以内力气是它自己的。写程序前先问一句——这台电机我是该给它力气还是给它目标
返回列表