发布时间: 2026-04-11
以下内容提供给了那些伟创动力舵机,有在环境里进行舵机精确位置控制需求的,工程师以及学生,是一套从最初的模块创建开始,到参数设定,再到仿真验证直到代码生成的,全程的解决办法。你呢,将会学到怎样运用去构建一个能够运行的舵机控制模块,并且掌握处理经常出现的抖动、响应迟缓等情况的办法。
步骤一:构建舵机数学,运用传递函数去近似舵机动态特性,此动态特性一般属于二阶系统。
第二步:开展PID位置控制器的设计工作,于里构建比例积分微分控制回路。
第三步:产生PWM信号并增添反馈,借由PWM生成模块输出控制信号,借助理想旋转编码器模拟位置反馈。
在完成这三步之后,您的仿真便能够输出舵机转角针对目标角度的跟踪曲线了。下文会对每个步骤的具体操作进行逐个详尽解释。
包含以下四个核心子模块的,是一个完整且可仿真的舵机控制模块,(此顺序为信号流向):
1. 目标角度输入 – 提供阶跃、正弦或自定义轨迹信号。
2. PID,也就是位置控制器,它会去计算角度误差,进而生成控制电压,或者是PWM占空比指令。
3. 存在一种舵机执行器,它能够模拟实际舵机的电机的动态响应,模拟实际舵机的齿轮箱的动态响应,还能模拟实际舵机的输出轴的动态响应。
4. 位置反馈传感器 – 将输出角度回传至控制器,形成闭环。
架构所依据的是,上述架构是基于经典自动控制理论以及官方的文档里“Motor ”模块的示例,其来源为/help//motor.html。所有实际舵机控制系统的功能分解都是遵循这样的结构。
小型机器人关节所使用的那种标准舵机,也就是实际的舵机,它的输入是PWM信号的高电平时间,一般情况下,1到2毫秒的这个范围对应着0到180度,其输出是转角,它的动态响应能够用二阶传递函数来近似:
G(s)等于,ω_n的平方,除以,s的平方,加上,2倍ζ乘以ω_n再乘以s的和,加上,ω_n的平方。
其中:
响应速度由自然频率\(\\)所决定,其典型值处于30至80rad/s这个范围。
超调量由阻尼比\(\zeta\)来决定,其典型值处于0.5至0.8这个范围。
操作:
采用 Fcn 模块,此模块位于 当中的 类别里。
参数设定为,分子是 [ωn 的平方],分母是 [1],还有 [2 乘以 ζ 乘以 ωn],以及 [ωn 的平方]。
假设ωn的数值为50这个特定的值,ζ的取值是0.6,那么此时得出的分子是[ 具备2500之数值的情况 ],而分母呈现为[ 包含1,还有60,以及2500的情形 ]。
![]()
对于PID控制器而言,其会依据角度误差,也就是目标值减去反馈值,进而输出控制信号。而标准离散PID公式表述为:。
\[u(k)等于K_p乘以e(k),加上K_i乘以对e(k)求和再乘以T_s,再加上K_d乘以(e(k)减去e(k1))除以T_s。\。
操作:
运用PID 模块拿来用,此模块在的分类当中。
初始参数推荐(适用于大多数小型舵机):
\( K_p = 2.0 \)(比例增益)
\( K_i = 0.5 \)(积分增益)
\( K_d = 0.1 \)(微分增益)
将控制器输出进行饱和限幅的设置,其上限设定为 1,下限设定为 1,此上下限对应着归一化控制电压。
关于参数整定的行动建议如下,要把 \( K_i \) 和 \( K_d \) 固定为0,接着逐步去增加 \( K_p \) ,直至系统出现等幅振荡的情况,随后按照 法则来计算最终参数。具体的公式能够参考文档“PID ”,其来源是/help//pid.html。
一般而言实际舵机要由PWM信号来进行控制,高电平时间为1ms时对应0°,高电平时间为1.5ms时对应90°,高电平时间为2ms时对应180°。在仿真这个环境当中,您得把控制器输出的(0至1这个范围的值)映射成为PWM占空比,之后再输入到舵机里。
操作:
利用PWM 模块,该模块位于的中,或者处于 的内。
参数:
信号类型:
频率:50 Hz(标准舵机周期20ms)
占空比的计算方式为,Duty等于0.05加上,乘以0.05的值,其对应着1至2毫秒的,高电平状态。
以PWM出的输出连接入舵机传递函数模块相应输入端之地,如果传递函数输入是电压,那么PWM信号要经由Mean Value模块转为电压值,如果不这样做,那么就改用 模块加理想之PWM调制。
若只是进行控制的验证,那么这种情况下可以省略PWM生成这一步骤,直接把控制器输出的处于0到1这个范围的值,去乘以最大控制电压比如5V之后,再将其输入传递函数,如此一来,所得到的仿真结果依旧是具备参考价值的。
选取 Ideal 模块( > 当中),或是直接输出传递函数的状态量(借助使用 模块的输出方式),以此作为反馈角度。
操作:
从舵机传递函数输出端引出信号线
连接至 PID 的反馈输入端
要是运用物理信号,那就得添加PS 转换模块。
在完成上述连接之后,将仿真时间设定为2秒,输入一个从0°起始至90°的90°阶跃目标,随后运行仿真,进而观察输出角度曲线。
预期结果:
上升时间(10%~90%)约0.05~0.1秒
稳态误差 < ±1°
超调量 < 10%
常见问题及:
有实际案例可验证,某高校里做机器人实验的那个实验室,在搭建六自由度机器手臂的时候,运用了上述提到的模块、针对每个关节的舵机去做单独的仿真,结果发现了第3个关节,由于载荷比较大,所以需要把 \( K_p \) 从2.0调高到2.8,才能够达成预期的跟踪精度。这就表明了,同一套参数是需要依据实际的负载状况来做微调的。
假如您有把控制模块直接放置到单片机(像是STM32、)的需求,那么请依照下面这些步骤去做:
1. 把PID 模块里的“ time”设置成跟硬件控制周期相同,一般是0.01秒。
2. 运用C28x硬件支持包,或者运用ARM M硬件支持包,此硬件支持包由官方予以提供,其来源为/。
3. 把 PWM 生成模块,替换成目标芯片的 ePWM 模块,或者替换成目标芯片的 模块。
4. 按动,而后朝着.Code 方向,接着点击往Build,以用来生成C代码,接着去进行烧录。
行动方面的建议是,在去生成代码以前,一定要去使用 FixedStep 求解器,像是 ode3 或者 ode4 这种,并且要去设置跟硬件时钟相匹配的步长。不然的话,所生成的代码有可能在实际的舵机上面出现特别严重的抖动情况。
核心观点重申:
一个符合标准、具备可靠性的舵机控制模块,必然要涵盖目标输入这一部分,还要包含PID控制器这一环节,也需有执行器这一要素,并且得有反馈回路这一组成部分。
参数的整定,特别是其中的 \( K_p, K_i, K_d \) 这些参数的整定,乃是决定仿真能不能反映真实舵机行为的关键所在,千万不要去使用默认参数。
先行开展仿真验证,能够预先察觉到抖动、超调以及响应慢等一系列问题,进而防止于实物之上进行反复的试错行为。
行动建议:
1. 立刻于内依据本文的步骤来搭建最小系统,此最小系统仅包含传递函数、PID以及阶跃输入,并且试着将 \( K_p \) 从数值1改变至数值5,进而观察响应曲线所产生的变化。
2. 为您的实际舵机(像机器人关节或者航模舵面那样)将仿真成功的参数予以应用,并且去对比实物响应跟仿真曲线是不是一致。
3. 若存在不一致的情况,那么就要检查实际舵机的供电电压,查看其是否与仿真设定完全一致,还要检查PWM频率,看其是否与仿真设定完全一样,并且要微调 \( K_p \) 以及 \( K_d \) ,一直到匹配为止。
借助上述整个流程,您会得到一个具备可移植性、可验证性的舵机控制模块,不管是应用于学术研究方面,还是用于产品开发领域,都能够明显地缩短调试所需时间伟创动力,并且提升控制精度。