当前位置:   article > 正文

基于stm32f103c8t6的智能小车_stm32f103c8t6小车

stm32f103c8t6小车

学了stm32后,自己动手完成一辆智能小车的制作,主要内容有5步进电机驱动、路灰度循迹、舵机控制等。

目录

所用到的硬件有:

首先是如何驱动步进电机

步进电机驱动方法

代码编写:

电机驱动板的接线

​编辑  

使能驱动

5路灰度传感器工作原理

循迹逻辑

代码编写:

总结



所用到的硬件有:

  1. stm32f103c8t6单片机
  2. 5路数字灰度传感器模块
  3. 42步进电机
  4. LV8731V步进电机驱动模块

首先是如何驱动步进电机

步进电机驱动方法

        最​基本的方法有3种,单4拍法、双4拍法、单双8拍法。但我们在这里不细讲,只讲我们怎么做能让步进电机动起来。

        要想让步进电机动起来,关键是要给它脉冲信号。我们可以通过PWM来输出脉冲信号,当然我们可以用更简单的for循环+GPIO高低电平+延时实现脉冲信号的输出以驱动步进电机。

        我们现在采用的思路是更简单的后者。

代码编写:

  1. void Car_Go()
  2. {
  3. GPIO_WriteBit(MOTOR_GPIO_PORT, DA, Bit_RESET); //DA表示电机A的方向引脚,使用时,我这边是置低电平为前进方向
  4. GPIO_WriteBit(MOTOR_GPIO_PORT, DB, Bit_SET); //大家可根据自己的实际情况调整电机转动方向
  5. GPIO_WriteBit(MOTOR_GPIO_PORT, DC, Bit_SET);
  6. GPIO_WriteBit(MOTOR_GPIO_PORT, DD, Bit_RESET);
  7. for (int a=0;a<500;a++)
  8. {
  9. GPIO_WriteBit(MOTOR_GPIO_PORT, VA, Bit_SET); //VA表示电机A的速度引脚
  10. GPIO_WriteBit(MOTOR_GPIO_PORT, VB, Bit_SET); //需要置高电平一段时间再置为低电平一段时间以输出脉冲信号
  11. GPIO_WriteBit(MOTOR_GPIO_PORT, VC, Bit_SET);
  12. GPIO_WriteBit(MOTOR_GPIO_PORT, VD, Bit_SET);
  13. delay(2); //延时2ms
  14. GPIO_WriteBit(MOTOR_GPIO_PORT, VA, Bit_RESET);
  15. GPIO_WriteBit(MOTOR_GPIO_PORT, VB, Bit_RESET);
  16. GPIO_WriteBit(MOTOR_GPIO_PORT, VC, Bit_RESET);
  17. GPIO_WriteBit(MOTOR_GPIO_PORT, VD, Bit_RESET);
  18. delay(2); //延时2ms
  19. }
  20. }

延时函数可这样写:

  1. void delay(int n)
  2. {
  3. volatile int i;
  4. while (n--)
  5. {
  6. i = 12000;
  7. while (i--);
  8. }
  9. }

电机驱动板的接线

        LV8731V驱动接线相对来说,比较简单,直接按照对应的接线端口插上去即可。如图:

  

使能驱动

        现在要想让电机动起来还需要使能我们的LV8731V驱动板,也就要给驱动板上的ST引脚置高电平

5路灰度传感器工作原理

        其实很简单 未碰到黑线(红灯亮):对应引脚状态 = 0
                           碰到黑线(红灯灭):对应引脚状态 = 1

循迹逻辑

        当小车向偏右离(黑线)时,左侧循迹红灯灭,引脚状态为1,表示车辆向右偏离黑线,车辆需要向左行驶以调整车辆沿着黑线行驶。

代码编写:

  1. void Find(void)
  2. {
  3. if(L2==0&&L1==0&&M!=0&&R1==0&&R2==0&&S==0) //左右都没有检测到黑线
  4. {
  5. Car_Go();
  6. }
  7. else if(L2!=0&&L1==0&&R1==0&&R2==0) //左边检测到黑线
  8. {
  9. Car_Turn_Left();
  10. }
  11. else if(L2==0&&L1!=0&&R1==0&&R2==0) //左边检测到黑线
  12. {
  13. Car_Turn_Left();
  14. }
  15. else if(L2==0&&L1==0&&R1!=0&&R2==0) //右边检测到黑线
  16. {
  17. Car_Turn_Right();
  18. }
  19. else if(L2==0&&L1==0&&R1==0&&R2!=0) //右边检测到黑线
  20. {
  21. Car_Turn_Right();
  22. }
  23. else if(L2!=0&&L1!=0&&R1!=0&&R2!=0)
  24. {
  25. Car_Go();
  26. }
  27. else if(L2==0&&L1==0&&M==0&&R1==0&&R2==0)
  28. {
  29. }
  30. else
  31. {
  32. Car_Go();
  33. }
  34. }

舵机控制方面呢,我们下次再讲^-^

总结

        本次项目主要运用到的知识:GPIO的使用,delay延时函数的编写,利用for循环驱动步进电机,读取IO口引脚状态,if分支语句判断循迹状态。

    最后,感谢大家的阅读,祝大家学习愉快。

        如有错误,敬请斧正~

        编写不易,多多支持~

   

        

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/46457
推荐阅读
相关标签
  

闽ICP备14008679号