目录

  • 程序阅读
    • 题目解析
      • 第一问--MODE1
      • 第二问--MODE2
      • 第三问--MODE3
      • 第四问--MODE4
      • 第五问--MODE5
    • 程序架构
      • indkey
      • Motor
      • MPU6050
      • usart1
    • 参考链接

程序阅读

题目解析

第一问–MODE1

由单摆公式得到周期1.3-1.6秒,换算成频率f在0.625-0.77Hz之间

疑惑:
MoveTimeCnt 是干什么用的(还是没有很懂)
set_y 是公式x=Asin(wt+ψ) (位移时间方程),但是程序里的A不是振幅,而是最大偏角(这块看了一下午,要哭死了)
但是要是把set_y看作是设置的角度,似乎也没有问题,毕竟简谐振动还有一个方程是θ(t)=Asin(ωt+ψ)。好吧还是有点不懂。

部分解释:
w=2pi*f(f是进行归一化后的,也就是normalization)
A要换成°,1弧度=57.2958°
这个度、弧度的转换可能跟函数本身有关(sin,cos,atan),MODE3里面也有一步转换,我猜测应该是函数用的都必须是弧度,但是程序写的(为了方便看或者计算之类的原因)都是度。

第一问的思路:
就是设置x和y方向上的PID,x方向上设置为0,不变,y方向上前后摆动。
但是要注意硬件是否满足(电机物理限制、软件计算限制)

读程序感想:
好家伙,人家想的好细致啊,而且思路特别清晰。不只是简单的原理,而且还包括物理限制、归一化(归一化目前没搞懂为什么要使用它。可能是软件设计对于参数的范围选定有要求?)

第二问–MODE2

第二问跟第一问一样,只是对于振幅有所要求,也就是对于A的大小有所要求。这个在选择摆长的时候就考虑到了,所以第二问跟第一问的程序一样(唯一不同就是动的是X还是Y方向)

关于参数确定:
周期T=2π√(L/g),L是摆长,由题意可知是0.6~0.7m(这里我其实算出来的周期是1.55–1.68s,跟链接里那位大神算的不太一样,不知道是不是我的思路有问题)。周期确定了,频率也就确定了(f=1/T)。

第三问–MODE3

第三问是利用李萨茹图形,其参数方程为:
x(θ)=Asinθ
y(θ)=Bsin(nθ+ψ)
当n=1,ψ=0或Π时,画出来的是直线段。
关于李萨茹图形可以直接百度https://baike.baidu.com/item/%E5%88%A9%E8%90%A8%E5%A6%82%E5%9B%BE%E5%BD%A2/10517125?fr=aladdin.

该部分函数代码如下
解读:
利用莉萨如图形的公式,设置x和y方向的pid参数。
未解:相位补偿的值是怎么得到的。
虽然不知道那个Phase数组的值是怎么得到的,但是如果要是画直线的话,这部分不知道也没关系,直接设置0就行,因为ψ=0画出的是直线

void Mode_3(void)
{const float priod = 1410.0;  //单摆周期(毫秒)//相位补偿 0, 10   20   30   40   50   60   70   80   90   100  110  120  130  140  150  160  170 180const float Phase[19]= {0,-0.1,-0.05,0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,0.05,0.05,0.05,0.07,0};static uint32_t MoveTimeCnt = 0;float set_x = 0.0;float set_y = 0.0;float Ax = 0.0;float Ay = 0.0;float A = 0.0;uint32_t pOffset = 0;float Normalization = 0.0;float Omega = 0.0;pOffset = (uint32_t)(angle/10.0f);           //相位补偿数组下标MoveTimeCnt += 5;                           //每5ms运算1次Normalization = (float)MoveTimeCnt / priod;  //对单摆周期归一化Omega = 2.0*3.14159*Normalization;           //对2π进行归一化处理A = atan((R/88.0f))*57.2958f;//根据摆幅求出角度A,88为摆杆离地高度                                        Ax = A*cos(angle*0.017453);     //计算出X方向摆幅分量0.017453为弧度转换Ay = A*sin(angle*0.017453);   //计算出Y方向摆幅分量set_x = Ax*sin(Omega);         //计算出X方向当前摆角set_y = Ay*sin(Omega+Phase[pOffset]); //计算出Y方向当前摆角PID_M1_SetPoint(set_x);    //X方向PID跟踪目标值sinPID_M1_SetKp(60);   PID_M1_SetKi(0.79);  PID_M1_SetKd(800);PID_M2_SetPoint(set_y);  //Y方向PID跟踪目标值sinPID_M2_SetKp(60);    PID_M2_SetKi(0.79);        PID_M2_SetKd(800);   M1.PWM = PID_M1_PosLocCalc(M1.CurPos);    //PitchM2.PWM = PID_M2_PosLocCalc(M2.CurPos);  //Rollif(M1.PWM > POWER_MAX)  M1.PWM =  POWER_MAX;if(M1.PWM < -POWER_MAX) M1.PWM = -POWER_MAX;if(M2.PWM > POWER_MAX)  M2.PWM =  POWER_MAX;if(M2.PWM < -POWER_MAX) M2.PWM = -POWER_MAX;      MotorMove(M1.PWM,M2.PWM);
}

第四问–MODE4

直接判断当前位置(角度)是不是到45°,如果小于,精确制动,如果不是,PWM输出为0,直到小于后进行制动。

第五问–MODE5

根据正反转判断ψ的值,其他和第三问一样。

程序架构

indkey

里面是设置的独立按键的功能

Motor

电机的驱动啊、PWM的输出啊、PID的控制啊之类的
Motor_Control里面是上面说的几个问题的函数的定义

MPU6050

6050获取的pitch\roll\yaw

usart1

定时器端口配置、4个电机的各种方向(前后)运动定义

参考链接

链接:参考这位大神的 http://bbs.eeworld.com.cn/thread-476344-1-1.html.


暂时就写到这里叭,菜菜第一次写博客,也是刚看电赛风力摆控制没几天,对于大神程序的理解、题目的理解可能会有不清楚、迷惑的地方,怕误导大家就先说了(捂脸哭.jpg),希望各路大神能够批评指正。冲鸭!

2021-06-13(自用)电赛风力摆学习记录1相关推荐

  1. 2015国电设风力摆练手

    2015国电设风力摆练手 继续总结一下之前的经验,东西不多,随便讲讲吧. 源码链接https://download.csdn.net/download/YOUNGAAAAA/85005265 4个空心 ...

  2. 01-Flutter移动电商实战-项目学习记录

    01-Flutter移动电商实战-项目学习记录 一直想系统性的学习一下 Flutter,正好看到该课程<Flutter移动电商实战>的百度云资源,共 69 课时,由于怕自己坚持不下去(经常 ...

  3. 电赛风力摆制作过程中遇到的问题

    主控用的是msp430,传感器MPU6050,驱动mos管,空心杯电机,外加一个oled显示屏显示数据调试 一.软件部分 1.MPU6050,DMP读取欧拉角 这个过程中遇到很多问题,首先移植DMP固 ...

  4. 2021年6月 第一个月的学习记录与感想

    2021年6月2日,鸿蒙系统正式发布,回家路上看完发布会,很是激动,终于有了国产的操作系统可以学习和努力,对于一向以国产化为目标的我来说,期待这一天很久很久了. 身处半导体装备行业多年老工程师一枚,深 ...

  5. 13年电赛综合测评——三角波

    目录 背景知识科普: 原理: 仿真图如下: 背景知识科普: 积分电路是使输出信号与输入信号的时间积分值成比例的电路.最简单的积分电路由一个电阻R和一个电容C构成,如图(a)所示.若时间常数RC足够大, ...

  6. 2017美赛D题—学习记录

    原题及其翻译:https://blog.csdn.net/zhangtengyuan23/article/details/5464641 问题类型:排队论 任务: 建立至少一个模型来预估瓶颈.分析当前 ...

  7. 【硬件设计】关于电赛——硬件设计和PCB绘制的一些心得(持续更新)

    [5.20校内训练] 1.一般线宽设置成0.254mm.[具体线宽设置看6] 2.对于功能不大的小模块板子,贴片电容电阻的封装尽量选择C0805和R0805,便于焊接.0603和0402封装的贴片电容 ...

  8. 【电赛合集】19电磁炮.zip、17板球.zip、15风力摆.zip、13倒立摆.zip、(1994-2021)全国大学生电子设计竞赛历年真题.zip

    [电赛合集]19电磁炮.zip.17板球.zip.15风力摆.zip.13倒立摆.zip.(1994-2021)全国大学生电子设计竞赛历年真题.zip 电赛宝藏链接: 四天三夜,那布满着未知与紧迫感的 ...

  9. 15电赛b题风力摆小记:陀螺仪计算激光点在大地坐标系下坐标

    加速度计计算激光点在大地坐标系下坐标 最近在做风力摆题目,我们想着求解激光点坐标.有两种方案: 利用摄像头做传感器,将摄像头放在坐标纸旁边,然后透视变换即可得到激光坐标. 利用陀螺仪解算. 因为不熟悉 ...

最新文章

  1. 温水里的程序员,技术将淘汰一切。
  2. 《C和指针》学习备忘
  3. Python——[Anaconda+Jupyter Notebook+Python3.6]环境下安装face_recognition
  4. NYOJ--1236--挑战密室(第八届河南省程序设计大赛)
  5. C#并行编程(6):线程同步面面观
  6. HTMLCSS 超简单的前端设计入门-2!
  7. oracle 读懂10046视频,10046、10053、实操记录
  8. openstack密钥对_您对OpenStack了解多少?
  9. SpringBoot从入门到精通教程
  10. 入门篇:函数计算中角色和访问策略的讲解
  11. L3-019 代码排版 (30 分)-PAT 团体程序设计天梯赛 GPLT
  12. 无法找到模块“mint-ui”的声明文件_[搬运] JavaScript 模块化:CommonJS vs AMD vs ES6...
  13. 用计算机算华为平板密码,华为平板电脑密码忘记怎么办
  14. php 集成 spss,spss怎么录入数据
  15. 在csdn中,如何获取积分
  16. Oracle报错1031,dataguard 归档日志报1031错误的一次处理
  17. go解析yaml文件示例
  18. KEIL,#ifdef宏定义下失效代码差异性显示
  19. 19. 详解网络请求Axios
  20. 求N分之一序列的前N项和

热门文章

  1. Flask-SQLAlchemy
  2. 人们为什么都喜欢大屏手机
  3. 关键词爬虫,Python花瓣画板关键词采集存储数据库
  4. Postman API测试工具的使用
  5. server精简版代理意外终止 sql_MSSQLSERVER 服务意外终止 ,新安装的操作系统和数据库,怎么解决?...
  6. 魔术sql_魔术不会成为独角兽,这需要付出艰辛的努力
  7. 虚拟机如何组建局域网的技巧方法
  8. 光猫,路由器,机顶盒
  9. 错误记录:error: call to implicitly-deleted copy constructor
  10. wpf fontweight system.argumentoutofrangeexception