找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6060|回复: 2
打印 上一主题 下一主题
收起左侧

风力摆的程序设计+匿名四轴上位机(15年国赛)对练习PID算法很有帮助

[复制链接]
跳转到指定楼层
楼主
PID算法的极好学习资料,匿名四轴资料


stm32单片机风力摆源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "key.h"  
  6. #include "mpu6050.h"
  7. #include "pwmset.h"
  8. #include "niming.h"
  9. #include "pid.h"
  10. #include "usmart.h"   
  11. #include "inv_mpu.h"
  12. #include "inv_mpu_dmp_motion_driver.h"

  13. volatile float pitch,roll,yaw;                 //欧拉角
  14. volatile u8 mode = 1;                                                        //当前工作方式
  15. volatile float step = 0;

  16. int main(void)
  17. {               
  18.          Stm32_Clock_Init(9);                //系统时钟设置
  19.         uart_init(72,500000);                //串口初始化为500000
  20.         delay_init(72);                                    //延时初始化
  21.         usmart_dev.init(72);                //初始化USMART
  22.         LED_Init();                                                  //初始化与LED连接的硬件接口
  23.         KEY_Init();                                                        //初始化按键
  24.         MPU_Init();                                                        //初始化MPU6050
  25.         TIM3_PWM_Init(999,8);          //初始化脉宽波输出        
  26.         TIM2_Int_Init(4999,71);        //初始化定时器2,每5ms产生一次中断


  27.         while(mpu_dmp_init())
  28.         {
  29.                 delay_ms(20);        
  30.         }               

  31.          while(1)
  32.         {               
  33.                 key=KEY_Scan(0);
  34.                 if(key==KEY2_PRES)                                                //测试发送pid数据给上位机
  35.                 {
  36.                         pid_send_data(rol_p,rol_i,rol_d,pit_p,pit_i,pit_d);
  37.                 }
  38.                
  39.                 if(key==KEY0_PRES)                                                //开启或关闭下位机数据发送开关
  40.                 {
  41.                         report=!report;
  42.                 }        

  43.                 if(key==KEY1_PRES)                                                //开启或关闭下位机数据发送开关
  44.                 {
  45.                         Rol_SumError = 0;
  46.                 }               

  47.                 if(key == KEY8_PRES)                                        //PE8按下
  48.                 {
  49.                         rol_p += 1;
  50.                         LED0 = ~LED0;
  51.                 }
  52.                 if(key == KEY9_PRES)
  53.                 {
  54.                         rol_i += 0.1;
  55.                         LED0 = ~LED0;
  56.                 }
  57.                 if(key == KEY10_PRES)
  58.                 {
  59.                         R += 0.05;
  60.                         LED0 = ~LED0;
  61.                 }
  62.                 if(key == KEY11_PRES)                                        //模式切换
  63.                 {
  64.                         mode++;
  65.                         LED0 = ~LED0;
  66.                 }

  67.                 if(key == KEY12_PRES)
  68.                 {
  69.                         rol_p -= 1;
  70.                         LED0 = ~LED0;
  71.                 }
  72.                 if(key == KEY13_PRES)
  73.                 {
  74.                         rol_i -= 0.1;
  75.                         LED0 = ~LED0;
  76.                 }
  77.                 if(key == KEY14_PRES)
  78.                 {
  79.                         R -= 0.05;
  80.                         LED0 = ~LED0;
  81.                 }
  82.                 if(key == KEY15_PRES)
  83.                 {
  84.                         mode--;                                                                                        //模式切换
  85.                         LED0 = ~LED0;
  86.                 }
  87.                
  88.                 if(USART_RX_STA == 1)                                        //检测是否接收到了数据。
  89.                 {
  90.                         USART_RX_STA = 0;                                                //清除接收标志,防止多次判断。
  91.                         LED1 = ~LED1;
  92.                         rol_p = (USART_RX_BUF[4]<<8)|USART_RX_BUF[5];
  93.                         rol_i = (USART_RX_BUF[6]<<8)|USART_RX_BUF[7];
  94.                         rol_d = (USART_RX_BUF[8]<<8)|USART_RX_BUF[9];
  95.                         pit_p = (USART_RX_BUF[10]<<8)|USART_RX_BUF[11];
  96.                         pit_i = (USART_RX_BUF[12]<<8)|USART_RX_BUF[13];
  97.                         pit_d = (USART_RX_BUF[14]<<8)|USART_RX_BUF[15];                                       
  98.                 }        
  99.                         
  100.         }         
  101. }

复制代码

所有资料51hei提供下载:
15电赛风力摆源码及上位机.rar (3.81 MB, 下载次数: 144)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:594095 发表于 2019-8-2 13:48 | 只看该作者
谢谢分享
回复

使用道具 举报

板凳
ID:594095 发表于 2019-8-2 13:49 | 只看该作者
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表