风力摆(15国赛题)

这题代码没有难点,半天就能写完,主要硬件上有坑,记录如下:

①arduino给出pwm波时频率不可调节,为固定的1khz,而1khz是人耳很敏感的频率,噪声很明显。上网搜遍国内外各大arduino社区,发现说来说去都是改avr的一个寄存器来实现变频,可是我用的是DUE啊!寄存器不一样啊摔o_0!!最后竟然在百度知道里面找到了方法: https://zhidao.baidu.com/question/1499135414638868219.html 找到文件,一改,示波器测了一下,20.04khz

②接上mpu6050,一读数,不错没问题。电机上电,诶mpu你怎么了?为什么只给我发66535?断电,重启,上电,重复几次,发现电机一上电,mpu的数据直接卡死。很巧的是,邻桌也在调这步,发现了同样问题。首先怀疑供电,空心杯上电瞬间对整个供电系统产生冲击,拿了一节18650对mpu单独供电,问题依旧。然后怀疑空心杯上电时产生磁场对mpu产生了干扰,拿手机里的霍尔元件去测了一下,空心杯附近磁场的确比较强,遂将mpu抬起5cm,远离空心杯的强磁场范围,问题依然。接下来怀疑了磁场对IIC产生的干扰,对比了一下电机不上电与上电两种情况下IIC的电平变化,在上电后明显多了很多毛刺与杂波,遂将mpu的线与电机供电线分开(原来平行贴在一起),问题解决

③mpu的xz轴和电机xy轴不重合,写了点三角函数,把他们对齐了

④mpu不带地磁的话,z轴是无法自校准的,也不想开机还要等十几秒校准,比赛肯定对时间有严格要求,所以没有去拿mpu的四元数来判断位置。由于单摆周期固定,所以只需要知道xz的角速度,就可以通过计算来得到一切需要的信息。看网上很多人都在角速度为零(最高点)获取一次四元数,得知现在的角度,然后作pid矫正,但是这样一个周期只有两次pid,效果很差。我直接利用单摆周期确定的特性,做出一条角速度拟合曲线(就是画一个正弦波),告诉单片机我这一时刻的角速度应该是多少,这样一个周期内可以做80次pid,可以做到精确控制,同时抗干扰能力很强

⑤由于pid的对象是角速度拟合曲线,pid调起来很简单,在一个很大的范围内取值都是差不多的效果,随便调两下就很稳。只要针对那条拟合曲线与实际情况的误差,在拟合曲线上做出微调即可,题目中长度误差范围是+-2.5cm,我调完后在+-0.5cm以内。两条拟合曲线给出不同幅值,就可以改变角度,给出不同相位,就可以做椭圆,相位差90°就是一个正圆。所以最后把一堆题目合成了两道:1:输入幅值、角度、相位差,单摆直接做出相应李萨如图形。2:稳定在原点(这里不要i,pd要给大)

⑥差不多调完的时候,电机突然怎么都不转了,一波问题排查(查学生电源,查降压电路,查电机自身,查6612),啥问题都没有,最后一看杜邦线,6612的地线烧了,并了两根杜邦线充当地线,没问题了

下载链接

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注