不变的是那一种感觉~!

2007年10月08日 11:53:00


  服役多年的MX500, 终于退休了, 带着几许忧愁, 淡淡的滑入我的搜藏柜, 从此进入了历史的长河中。

  我从公元2003拥有了它,带着它,在Quake的战场上血战,快意恩仇;在孤岛中求生,小心翼翼;在古墓中徘徊,险象环生。4年多了,他始终默默地支撑着我的右手,在各种环境下带给我平静的感觉。

  让它退休,考虑到它服役期已满,按键已经不大灵光了,就让他在搜藏柜里安度吧。

  寻找鼠标,寻找改变。我也看过许多的评测,试用了许多不同的款式,但是始终都没有MX500那优柔的身段带出的握感给我那种舒适的感觉,时间流去,依然不变的却是那一种感觉。

   MX518,作为MX500和MX510的升级,不但保持了前辈的优美身段,而且内在的心更加"火热"。入手之前,没做过多的考虑,直接就带回家,拆包 上机。同刚刚退休的MX500相比,518的速度的确是加快了,更稳,更精准(Q3),本人不怎么爱玩CS,没有测试了。在CAD中,拖动比MX500更 平滑。当然,这是主观感受,没有量化的对比数据。对于我,量化的数据也没什么意义, 不变的手感,才是唯一。

  G5,这是一个响亮的名字,在它头上有许多光环,用不惯笔记本配送的小鼠标的我,终于也把G5接回家,但并不是因为那些光环,而是那不变的感觉。

  刚刚入手G5,一切都还在适应过程中,相对于518,G5更加厚实,我加了一个4.5G,两个1.7G的砝码,这样感觉更加接近MX500(518似乎比500轻)。传说中的激光鼠标挑垫子并没有在我这里变成现实,尽管我用的不过10块钱的普通布垫。

  适应的过程也没有太多的心得,慢慢上手,慢慢品味,相信用惯了MX500造型的我,很快会和G5融为一体的,不变的就是那一种感觉。


  上些图, 以示纪念。





















Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1815020


<think>好的,用户现在的问题是:当目标速度设置为0时,给定占空比65,电机速度没有逐渐减速,感觉PID没有起作用。需要分析可能的原因。 首先,用户提到“PID根本没有用到”,这可能是因为PID没有被正确调用,或者PID的输出没有应用到电机控制上。需要检查代码中是否在正确的位置调用了PID计算,并且输出是否传递给了电机。 其次,目标速度设为0时,PID的目标是将实际速度调整到0,所以理论上应该输出负的占空比(如果当前速度是正的)来减速。如果速度不变,可能是PID的误差计算错误,或者输出被限制,或者死区补偿导致无法有效制动。 另外,用户提到“一开始给的占空比是65”,可能是指手动设置了初始占空比,而没有通过PID。需要确认控制逻辑是开环(直接设置占空比)还是闭环(通过PID调整)。如果代码中同时存在手动设置和PID输出,可能会冲突。 还要考虑PID的参数设置,比如积分项是否被禁用,或者比例系数太小,导致输出足以改变当前占空比。此外,编码器反馈是否正常,如果速度反馈没有变化(比如编码器故障),PID无法调整。 可能的步骤包括:检查PID调用逻辑、验证误差计算、查看输出是否被正确应用、检查编码器反馈、确认控制模式(开环/闭环)。 </think> 当目标速度设为0时,若电机速度未逐渐减速,且感觉PID未起作用,核心问题可能出在 **PID未被正确调用**、**反馈信号异常** 或 **控制逻辑冲突**。以下是具体分析和排查步骤: ### 一、验证PID是否被实际调用(最直接的原因!) 若代码中存在 **手动设置占空比**(如 `Set_Speed(0, 65)`)与 **PID自动控制** 的逻辑冲突,PID可能被完全绕过。例如: ```c // 错误示例:同时手动设置和调用PID,导致PID输出被覆盖 int main(void) { while (1) { Set_Speed(0, 65); // 手动设置占空比65(开环控制) speed_control(); // 调用PID(闭环控制),但输出未被使用 } } ``` 此时,`Set_Speed(0, 65)` 会直接覆盖PID的输出,导致PID无效。需确认控制逻辑是否为闭环模式(仅通过PID输出控制电机): ```c // 正确示例:仅通过PID输出控制电机 int main(void) { while (1) { encoder_update(); // 更新速度反馈 speed_control(); // 调用PID计算占空比,并通过Set_Speed输出 } } ``` ### 二、检查PID误差计算是否正确(目标速度与反馈速度的关系) 当目标速度 `target_speed_l=0` 时,PID的误差应为 `error = 0 - speed_l`。若 `speed_l` 始终为正(电机正转),则误差为负,PID应输出负的占空比(试图反转电机以减速)。若输出仍为正或0,说明: - **编码器反馈错误**:`speed_l` 未正确反映实际速度(如编码器未计数,`speed_l=0`,导致误差 `error=0-0=0`,PID输出0)。 - **PID参数错误**:积分项(I)或比例项(P)为0,导致输出无法随误差调整。 ### 三、验证编码器反馈是否正常(关键!) 若编码器未正确计数(如接线松动、中断未触发),`speed_l` 会始终为0,此时: - 目标速度 `target_speed_l=0` → 误差 `error=0-0=0` → PID输出0 → 电机保持原占空比(65),速度不变。 #### 验证方法: 1. 在 `encoder_update` 函数中添加打印,输出 `enco_l_current`(本轮累计脉冲数): ```c void encoder_update(void) { __disable_irq(); int32_t enco_l_current = enco_l; enco_l = 0; __enable_irq(); printf("左轮脉冲数:%ld\n", enco_l_current); // 新增打印 // ...计算speed_l... } ``` 2. 手动转动电机,观察打印的脉冲数是否变化: - 无变化 → 编码器未正常工作(接线/中断问题)。 - 有变化但数值小 → 编码器线数或减速比配置错误(如实际为13线×28减速比,但代码中误写为10线×20)。 ### 四、检查PID输出是否被正确应用(占空比是否被覆盖) 若 `speed_control` 函数计算了 `duty_l`,但未通过 `Set_Speed` 输出,PID无效。例如: ```c // 错误示例:PID输出未传递给Set_Speed void speed_control(void) { float duty_l = PID_Realize(&pid_left, speed_l, target_speed_l); // 未调用Set_Speed(0, duty_l); → 输出未应用 } ``` 需确认 `speed_control` 函数末尾是否有: ```c Set_Speed(0, (int8_t)duty_l); // 左轮应用PID输出 ``` ### 五、验证PID参数是否合理(输出是否足够大) 若PID的比例系数(P)过小,或积分项(I)被禁用,当误差较小时,输出可能无法克服电机惯性或摩擦,导致减速明显。例如: ```c // PID参数过小(P=0.1, I=0) PID_Init(&pid_left, 0.1f, 0.0f, 0.0f, 100.0f); ``` 此时,即使误差 `error=-50`(目标0,实际速度50),输出 `duty_l = P*error = -5`,可能被死区补偿截断为0(若 `MIN_DUTY=15`),无法驱动电机反转减速。 ### 六、死区补偿导致PID输出被截断(常见问题) 若PID输出的 `duty_l` 绝对值小于 `MIN_DUTY`,死区补偿会将其截断为 `±MIN_DUTY`,但可能无法有效制动。例如: - 电机正转时 `speed_l=50`,PID输出 `duty_l=-10`(绝对值小于 `MIN_DUTY=15`),补偿后 `duty_l=-15`。 - 若电机需要至少 `-20` 的占空比才能有效减速,`-15` 可能足以克服惯性,导致速度不变。 ### 总结与验证步骤 1. **确认控制模式**:代码中是否仅通过PID输出控制电机(而非手动设置占空比)。 2. **验证编码器反馈**:通过打印 `enco_l_current` 确认脉冲是否正常计数。 3. **检查PID调用**:确认 `speed_control` 函数是否调用了 `Set_Speed` 输出PID结果。 4. **测试PID参数**:增大P值(如从0.1→2.0),观察减速是否明显。 5. **调整死区补偿**:临时关闭死区补偿(`MIN_DUTY=0`),测试PID输出是否直接作用于电机。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值