找回密码
 立即注册

QQ登录

只需一步,快速开始

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

PWM调速+超声波控制车距的小车stm32源码

[复制链接]
跳转到指定楼层
楼主
ID:321034 发表于 2018-7-24 16:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32f103EZ  系列  
超声波 通过定时器来测量,PWM调速 控制车速   小车可以实现设定距离之间的 运动  ,实现跟随运动
具体的 源程序 如下 :
  1. #include "stm32f10x.h"
  2. #include "bsp_usart1.h"
  3. #include "bsp_length.h"
  4. #include "bsp_tick.h"
  5. # include "motor.h"
  6. # include "pwm_motor.h"

  7. #define CLI()      __set_PRIMASK(1)                /* 关闭总中断 */  
  8. #define SEI()      __set_PRIMASK(0)                /*开总中断*/

  9. void Delay(unsigned short int time);  //粗略的延时函数
  10. float ChangeDistance(unsigned int cout1);  //时间转为距离函数

  11. //ECHO PA4
  12. //TRIG PA5
  13. int main(void)
  14. {
  15.           unsigned int count=0; //  计数
  16.           float distance=0;     //  距离
  17.          
  18.                 /* USART1 config 115200 8-N-1 */
  19.                 USART1_Config();
  20.     Distance_Config();  //测距模块对应的引脚初始化
  21.     CLI() ;//关闭总中断
  22.           SEI(); //开总中断
  23.           Tim3_Config();  //定时器的初始化
  24.           Motor_Config();
  25.     TIM_Mode_Config();   //PWM 调速
  26.          
  27.           GPIO_ResetBits(GPIOA,GPIO_Pin_5);  //先拉低电平
  28.         
  29.           while(1)
  30.                 {
  31.                           printf(" 超声波初始化完成!! \r \n");
  32.         printf(" 测距开始 \r \n");
  33.                           GPIO_SetBits(GPIOA,GPIO_Pin_5);  //拉高电平
  34.                           Delay(30);  //延时20个微秒
  35.                         //  Delay(20);
  36.                         //  Delay(20);
  37.                          GPIO_ResetBits(GPIOA,GPIO_Pin_5); //拉低电平

  38.        TIM3->CNT=0;  //TIM3的计数器清0

  39.        while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4) == 0); //等待ECHO的高电平
  40.                

  41.        TIM_Cmd(TIM3,ENABLE);  //运行TIM3进行计时
  42.       
  43.                         while((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4) == 1) && (TIM3->CNT < TIM3->ARR-10))
  44.                         {
  45.                         
  46.                           TIM_Cmd(TIM3,DISABLE);  
  47.                        
  48.         count++;
  49.                         }
  50.         printf("count=%d",count);                        
  51.                           distance=ChangeDistance(count);
  52.                           printf(" 当前距离为:%f\n",distance);
  53.                           Delay(20000);
  54.                                 Delay(20000);         
  55.                         
  56.                                         if(distance>10)
  57.                                                  Go_forward();
  58.                                         else
  59.                                                 Go_back();
  60.                                         while(1);
  61.                                 
  62.                         
  63.      }
  64. }

  65. void Delay(unsigned short int time)  //粗略的延时函数
  66. {
  67.     unsigned char i=0;
  68.           while(time--)
  69.                 {
  70.         i=10;
  71.                           while(i--);
  72.     }
  73. }

  74. float ChangeDistance(unsigned int cout1)
  75. {
  76.     float distance=0;
  77.           printf("cou1=%d\n",cout1);
  78.           distance=cout1/58.0;
  79.         
  80.           return distance;
  81. }
  82. /*********************************************END OF FILE**********************/
复制代码

全部资料51hei下载地址:
超声波+PWM调速 小车.rar (318.71 KB, 下载次数: 45)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:383531 发表于 2018-8-6 17:50 | 只看该作者
你好,能否详细说一下超声波测距的具体作用   
回复

使用道具 举报

板凳
ID:267330 发表于 2018-10-15 10:32 | 只看该作者
你好,能否详细说一下超声波测距的具体作用   
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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