找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stm32f103的自动调节角度的源程序

[复制链接]
跳转到指定楼层
楼主
ID:346849 发表于 2018-6-23 19:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用电位器读取角度,通过小车的加速度来控制下面摆杆

单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "sys.h"
  3. #include "usart.h"
  4. #include "adc.h"
  5. #include "Ultrasonic.h"
  6. #include "control.h"
  7. //u32 Distance1,Distance2;  
  8. float Set_Angle;
  9. //角速度和角度向左为正,向右为负
  10. extern u32 TIM1_CH1_Time;        //CH1测量方波1的高电平时间,用于计算占空比
  11. extern u32 TIM1_CH4_Time;        //CH4测量方波2的两个上升沿间隔时间,用于计算周期
  12. extern u16 TIM1CH1_CAPTURE_STA ;        //通道1输入捕获标志,15位做捕获标志,低15位做溢出标志               
  13. extern u16 TIM1CH1_CAPTURE_UPVAL,TIM1CH1_CAPTURE_DOWNVAL;
  14. extern u16 TIM1CH4_CAPTURE_STA;        //通道1输入捕获标志,15位做捕获标志,低15位做溢出标志                       
  15. extern u16 TIM1CH4_CAPTURE_UPVAL,TIM1CH4_CAPTURE_DOWNVAL;

  16. int KEY1_Num,KEY2_Num,KEY3_Num,KEY4_Num;
  17. int m;
  18. int n=0;
  19. int a=0;
  20. float Place;
  21. float Angle;
  22. float Speed_Left,Speed_Right;   
  23. float angle1;               //角度传感器所得角度
  24. float temp;
  25. u8 dir=1;
  26. u8 d[15];
  27. int main(void)
  28. {
  29.             vu8 key=0;
  30.             delay_init();
  31.                   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  32.             LED_Init();
  33.             OLED_Init();
  34.       KEY_Init();
  35. //           uart_init(9600);
  36.            PWM_Init(7199,0);                   //10KHZ
  37.            Ultrasonic_Init();
  38.      TIM3_Cap_Init(0XFFFF,72-1);                //=====超声波初始化       
  39.            TIM5_Time_Init(4999,7199);
  40.            Adc_Init();       
  41.            BEEP_Init();
  42.            while(1)
  43.                 {
  44.                         angle1=Get_angle1_Average(4,5);
  45.                         Ultrasonic_Dis_Turn();         
  46.                         Ultrasonic_Trig();
  47. //                         Place=Dis_FIR.FRONT;
  48. //      Place=Dis_FIR.FRONT;
  49. //                        Angle1_PID(angle1,2000);
  50. //                        SetSpeed=Place_PID(Place);
  51.                         OLED_ShowString(0,0,"Dis_FIR");
  52.                         OLED_ShowNum(60,0,Dis_FIR.FRONT,5,12);
  53.                         OLED_ShowString(0,1,"Dis_BACK");
  54.       OLED_ShowNum(60,1,Dis_FIR.BACK,5,12);
  55.                         OLED_ShowString(0,2,"angle1");
  56.                         OLED_ShowNum(60,2,angle1,5,12);
  57.                         OLED_ShowString(0,3,"PWMA");
  58.                         OLED_Float(60,3,PWMA,1);
  59.                         OLED_ShowString(0,4,"PWMB");
  60.                         OLED_Float(60,4,PWMB,1);
  61.                                 Angle1_PID(angle1,2235);
  62.                          Angle_PWM=Angle1_PID(angle1,2190);
  63.                          Set_Pwm(Angle_PWM,Angle_PWM);
  64. //                                Angle1_PID(angle1,2235);
  65. //                         Angle_PWM=Angle1_PID(angle1,2235);
  66. //                         Set_Pwm(Angle_PWM,Angle_PWM);
  67.                         delay_ms(10);
  68.                          key=KEY_Scan(0);        //得到键值
  69.                    if(key)
  70.                 {                                                  
  71.                         switch(key)
  72.                 {                                 
  73.                          case KEY0_PRES:        //控制LED0翻转
  74.                          Set_Pwm(1500,1500);
  75.                          break;
  76.        case KEY1_PRES:        //控制LED0翻转
  77. //                         Angle1_PID(angle1,2235);
  78. //                         Angle_PWM=Angle1_PID(angle1,2235);
  79. //                         Set_Pwm(Angle_PWM,Angle_PWM);
  80.                          delay_ms(10);
  81.                          break;
  82.                          case KEY2_PRES:        //控制LED0翻转
  83.                                  Turn_Off();
  84.                          break;
  85. //                         case KEY3_PRES:        //控制LED1翻转         
  86. //                                        LED1=!LED1;
  87.                        

  88.                 }
  89. }
  90. }
  91. }
  92. //                 key=KEY_Scan(0);        //得到键值
  93. //                   if(key)
  94. //                {                                                  
  95. //                        switch(key)
  96. //                        {                                 
  97. //                         case KEY1_PRES:        //控制LED0翻转
  98. //                                         Turn_Off();
  99. //                         break;
  100. //                         case KEY2_PRES:        //控制LED0翻转
  101. //                                        LED1=!LED1;
  102. //                         break;
  103. //                         case KEY3_PRES:        //控制LED1翻转         
  104. //                                        LED1=!LED1;
  105. //                         break;
  106. //                         case KEY0_PRES:        //同时控制LED0,LED1翻转
  107. //                                        LED2=!LED2;
  108. //                                        LED1=!LED1;
  109. //                         break;
复制代码

所有资料51hei提供下载:
F1小车.rar (317.32 KB, 下载次数: 7)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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