找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3|回复: 0
收起左侧

BTS7960电机驱动模块接线方式以及PWM控制 单片机程序设计

[复制链接]
ID:140644 发表于 2026-7-2 06:59 | 显示全部楼层 |阅读模式
BTS7960.png
BTS7960测试.png
MK.jpg
接线图.png
控制方式.jpg
图.png
原理图.jpg


/***2025 4 17 22:18*L184*CODE331*******/
              #include     "reg52.h"
              #include     "intrins.h"
              #define      uchar unsigned char
              #define      uint  unsigned int
              sbit         L_PWM=P5^5;           //
              sbit         L_EN=P3^3;            // 高电平使能 低电平关闭
              sbit         R_PWM=P3^0;           //
              sbit         R_EN=P3^1;            //
              sbit         OUT1=P3^6;            //
              sbit         OUT2=P3^5;            //
              sbit         S1=P2^6;
              sbit         S2=P2^7;
              sbit         S3=P1^0;          //功能键                        
              sbit         S4=P1^1;   
              sbit         LED=P3^5;             //EEPROM写指示
              uchar        kcounter,kstatus;     //按键计数标志 按键状态标志
/**************Delay*******************************/
              void     Delay_50ms(unsigned int Del_50ms)        //
              {
              unsigned int m;
              for(;Del_50ms>0;Del_50ms--)
              for(m=62450;m>0;m--);
              }
/****************按键计数器状态寄存器归零*************/
              void RstKey()
              {
              kcounter=0;                        //按键计数器归零
              kstatus=0;                         //状态寄存器归零
              }
/*****************按键低电平检测函数*****************/
              void   LowVoltKey(void)            //按键计数器状态标志加一
              {
              kcounter++;                       
              kstatus++;     
              }
/*****************按键高电平检测函数*****************/
              void    HighVoltKey(void)          //按键计数器加一 状态标志归零
              {
              kcounter++;                        //按键计数器加一
              kstatus=0;                         //按键状态标志归零
              }
/*************关所有输出*******************************/            
              void Init_io()
              {
               P1M0=0X00;                        //    Init
               P1M1=0X00;                        //
               P2M0=0X00;                        //
               P2M1=0X00;                        //
               P3M0=0X01;                        //
               P3M1=0X00;                        //
               P5M0=0X20;                        //
               P5M1=0X00;                        //
               L_PWM=1;                          //
               L_EN=1;                           //高电平使能 低电平关闭
               R_PWM=1;                          //脉冲频率
               R_EN=1;                           //高电平使能 低电平关闭
              }
/***************************************/
              void out1()
              {
               LED=0;
               L_EN=0;
               R_EN=1;
               L_PWM=0;
               R_PWM=1;
               L_EN=1;
               R_EN=1;
               L_PWM=1;
               R_PWM=0;
               Delay_50ms(50);
               LED=1;
              }
/***************************************/
              void out2()
              {
               LED=0;
               L_EN=0;
               R_EN=1;
               L_PWM=1;
               R_PWM=0;
               L_EN=1;
               R_EN=1;
               L_PWM=0;
               R_PWM=1;
               Delay_50ms(50);
               LED=1;
              }
/***************************************/
              void out3()
              {
               LED=0;
    //           L_EN=0;
    //           R_EN=1;
    //           Delay_50ms(5);
               L_EN=1;
               R_EN=1;
               L_PWM=1;
               R_PWM=0;
               Delay_50ms(50);
               LED=1;
              }
/***************************************/
              void out4()
              {
               LED=0;
    //           L_EN=0;
    //           R_EN=1;
    //           Delay_50ms(5);
               L_EN=1;
               R_EN=1;
               L_PWM=0;
               R_PWM=1;
               Delay_50ms(50);
               LED=1;
              }
/***************************************/
              void  main()
              {
               while(1)
               {
                 Init_io();
               RstKey();
               for(;kcounter<5;)               //按键循环5次
                if(!S1)                   //按键低电平
                {
                 LowVoltKey();                      //按键低电平 清除计数器
                }
                else if(~!S1)             //按键高电平
                {
                 HighVoltKey();                     //按键计数器加一 状态计数器加一
                }
                if(kstatus>=3)                  /*按键状态标志大于等于3为有效值*/
                {
                 out1();  
                }
//
                RstKey();
                for(;kcounter<5;)               //按键循环5次
                if(!S2)                   //按键低电平
                {
                 LowVoltKey();                      //按键低电平 清除计数器
                }
                else if(~!S2)             //按键高电平
                {
                 HighVoltKey();                     //按键计数器加一 状态计数器加一
                }
                if(kstatus>=3)                  /*按键状态标志大于等于3为有效值*/
                {
                 out2();  
                }
//
               RstKey();
               for(;kcounter<5;)               //按键循环5次
                if(!S3)                   //按键低电平
                {
                 LowVoltKey();                      //按键低电平 清除计数器
                }
                else if(~!S3)             //按键高电平
                {
                 HighVoltKey();                     //按键计数器加一 状态计数器加一
                }
                if(kstatus>=3)                  /*按键状态标志大于等于3为有效值*/
                {
                 out3();  
                }
//
               RstKey();
               for(;kcounter<5;)               //按键循环5次
                if(!S4)                   //按键低电平
                {
                 LowVoltKey();                      //按键低电平 清除计数器
                }
                else if(~!S4)             //按键高电平
                {
                 HighVoltKey();                     //按键计数器加一 状态计数器加一
                }
                if(kstatus>=3)                  /*按键状态标志大于等于3为有效值*/
                {
                 out4();  
                }
//
               }

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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