单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:6306|回复:1
打印上一主题下一主题

L298N电机驱动小车的学习资料与单片机源程序(含PWM PID 循迹算法分析)

[复制链接]
跳转到指定楼层
楼主
ID:381259发表于 2018-8-14 00:29|只看该作者|只看大图回帖奖励
这是关于电机驱动模块L298N的资料,设计智能小车必备,共享之,按需取


列表:
电机驱动板51单片机的4个引脚输入控制的测试程序\
红外\
超声波资料\
PWM控制技术.ppt
关于PID.pdf
寻光 寻迹 电机驱动原理分析.ppt
智能寻迹小车 3路寻迹算法分析.ppt


单片机测试程序5(L298N小车调速PWM前进)源程序如下:
  1.        /****************************************************************************
  2.        硬件连接
  3.        P1_6 接驱动模块ENA       使能端,输入PWM信号调节速度
  4.      P1_7 接驱动模块ENB       使能端,输入PWM信号调节速度

  5.      P3_4 P3_5 接IN1  IN2   当 P3_4=1,P3_5=0; 时左电机正转       驱动蓝色输出端OUT1 OUT2接左电机
  6.      P3_4 P3_5 接IN1  IN2   当 P3_4=0,P3_5=1; 时左电机反转          
  7.      P3_6 P3_7 接IN3  IN4       当 P3_6=1,P3_7=0; 时右电机正转       驱动蓝色输出端OUT3 OUT4接右电机
  8.      P3_6 P3_7 接IN3  IN4       当 P3_6=0,P3_7=1; 时右电机反转

  9.      P1_0接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1
  10.      P1_1接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2      
  11.      P1_2接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3
  12.        P1_3接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4
  13.        四路寻迹传感器有信号(白线)为0  没有信号(黑线)为1
  14.        四路寻迹传感器电源+5V GND 取自于单片机板靠近液晶调节对比度的电源输出接口
  15.                                                                                                                             
  16.        关于单片机电源:本店驱动模块内带LDO稳压芯片,当电池输入最低的电压6V时候可以输出稳定的5V
  17.        分别在针脚标+5 与GND 。这个电源可以作为单片机系统的供电电源。
  18.        ****************************************************************************/

  19.        #include<AT89x51.H>

  20.        #define Left_moto_pwm     P1_6         //接驱动模块ENA       使能端,输入PWM信号调节速度
  21.        #define Right_moto_pwm   P1_7         //接驱动模块ENB

  22.    #define Left_1_led       P1_0         //四路寻迹模块接口第一路
  23.        #define Left_2_led       P1_1         //四路寻迹模块接口第二路
  24.    #define Right_1_led     P1_2         //四路寻迹模块接口第三路
  25.        #define Right_2_led     P1_3         //四路寻迹模块接口第四路


  26.        #define Left_moto_go     {P3_4=0,P3_5=1;} //P3_4 P3_5 接IN1  IN2   当 P3_4=0,P3_5=1; 时左电机前进
  27.        #define Left_moto_back   {P3_4=1,P3_5=0;} //P3_4 P3_5 接IN1  IN2   当 P3_4=1,P3_5=0; 时左电机后退          
  28.        #define Right_moto_go     {P3_6=0,P3_7=1;} //P3_6 P3_7 接IN1  IN2       当 P3_6=0,P3_7=1; 时右电机前转
  29.        #define Right_moto_back   {P3_6=1,P3_7=0;} //P3_6 P3_7 接IN1  IN2       当 P3_6=1,P3_7=0; 时右电机后退

  30.          unsigned char pwm_val_left  =0;//变量定义
  31.        unsigned char push_val_left =0;// 左电机占空比N/10
  32.        unsigned char pwm_val_right =0;
  33.        unsigned char push_val_right=0;// 右电机占空比N/10
  34.        bit Right_moto_stop=1;
  35.        bit Left_moto_stop =1;
  36.        unsigned  int  time=0;

  37. /************************************************************************/
  38.      void  run(void)       //前进函数
  39. {
  40.      push_val_left  =3;  //PWM 调节参数1-10   1为最慢,10是最快  改这个值可以改变其速度
  41.        push_val_right =3;       //PWM 调节参数1-10   1为最慢,10是最快       改这个值可以改变其速度
  42.        Left_moto_go ;             //左电机前进
  43.        Right_moto_go ;       //右电机前进
  44. }

  45. /************************************************************************/
  46. /*               PWM调制电机转速                         */
  47. /************************************************************************/
  48. /*               左电机调速                           */
  49. /*调节push_val_left的值改变电机转速,占空比         */
  50.            void pwm_out_left_moto(void)
  51. {  
  52.    if(Left_moto_stop)
  53.    {
  54.    if(pwm_val_left<=push_val_left)
  55.            Left_moto_pwm=1;
  56.        else
  57.            Left_moto_pwm=0;
  58.        if(pwm_val_left>=10)
  59.        pwm_val_left=0;
  60.    }
  61.    else  Left_moto_pwm=0;
  62. }
  63. /******************************************************************/
  64. /*               右电机调速                       */  
  65.    void pwm_out_right_moto(void)
  66. {
  67.   if(Right_moto_stop)
  68.    {
  69.    if(pwm_val_right<=push_val_right)
  70.            Right_moto_pwm=1;
  71.        else
  72.            Right_moto_pwm=0;
  73.        if(pwm_val_right>=10)
  74.        pwm_val_right=0;
  75.    }
  76.    else   Right_moto_pwm=0;
  77. }
  78. /***************************************************/
  79. ///*TIMER0中断服务子函数产生PWM信号*/
  80.        void timer0()interrupt 1   using 2
  81. {
  82.      TH0=0XF8;       //1Ms定时
  83.        TL0=0X30;
  84.        time++;
  85.        pwm_val_left++;
  86.        pwm_val_right++;
  87.        pwm_out_left_moto();
  88.        pwm_out_right_moto();
  89. }      
  90. /***************************************************/

  91.        void main(void)
  92. {

  93.        TMOD=0X01;
  94.        TH0= 0XF8;             //1ms定时
  95.        TL0= 0X30;
  96.        TR0= 1;
  97.        ET0= 1;
  98.        EA = 1;

  99.        while(1)                                       /*无限循环*/
  100.        {      
  101.        run();

  102.        }
  103. }
  104.       
复制代码

所有资料51hei提供下载:
L298N(NEW).rar(5.11 MB, 下载次数: 205)


评分

黑币 +50
收起理由
+ 50
共享资料的黑币奖励!

查看全部评分

沙发
ID:919137发表于 2021-6-10 16:49来自手机|只看该作者
好资料,51黑有你更精彩!!!

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

Powered by 单片机教程网