小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 5590|回复: 4

跪求高手帮小弟修改下论坛驱动板源代码

[复制链接]
发表于 2013-7-13 21:25:37 | 显示全部楼层 |阅读模式

小弟用的论坛的驱动板,在某宝上面掏了一块15A的大电流驱动板,可惜有点问题,

1.png

如上图,这个板子的控制信号只有一个DIR,技术人说要电机停转,PWM必须等于0.

这样接上咱们的驱动板之后电机不是正转就是反转。
我觉得咱们驱动板的程序当中电机速度PWM是提前设定好了,控制电机正反转只要控制四个端口0或者1就行了,
全部为0就停转而没有去设置PWM=0,所以接这个驱动板电机停不下来。

小弟没学过单片机,看不懂代码啊。哪位大哥能帮我改下源代码,小弟在这谢谢了!

附上源代码。 机器人创意工作室·智能小车机器人驱动板源代码.rar (61.53 KB, 下载次数: 22)
回复

使用道具 举报

发表于 2013-7-14 01:46:09 | 显示全部楼层
  1. #include "uart.h"
  2. #include <stdio.h>
  3. #include "motor.h"
  4. #include "steer.h"



  5. extern uint16 se_timer[5];
  6. uint8 buffer[3];
  7. uint8 rec_flag = 0;        //等于0等待接受 等于1正在接受

  8. uint8 Left_Speed = 0;
  9. uint8 Right_Speed = 0;
  10. uint8 Left_Speed_Hold=0;
  11. uint8 Right_Speed_Hold=0;

  12. void UART_init(void)
  13. {
  14.         PCON |= 0x80;                //使能波特率倍速位SMOD
  15.         SCON = 0x50;                //8位数据,可变波特率
  16.         BRT = RELOAD_COUNT;                //设定独立波特率发生器重装值
  17.         AUXR |= 0x04;                //独立波特率发生器时钟为Fosc,即1T
  18.         AUXR |= 0x01;                //串口1选择独立波特率发生器为波特率发生器
  19.         AUXR |= 0x10;                //启动独立波特率发生器
  20.         ES      =   1;    //允许串口中断
  21.     EA      =   1;    //开总中断
  22.         TI      =   1;        
  23. }

  24. void UART_send_byte(uint8 byte)
  25. {
  26.         ES     =   0;  //关串口中断
  27.     TI     =   0;  //清零串口发送完成中断请求标志
  28.     SBUF   =   byte;
  29.     while(TI ==0); //等待发送完成
  30.     TI     =   1;  //清零串口发送完成中断请求标志
  31.     ES     =   1;  //允许串口中断
  32. }

  33. void UART_send(uint8 *Buffer, uint8 Length)
  34. {
  35.         while(Length != 0)
  36.         {
  37.                 UART_send_byte(*Buffer);
  38.                 Buffer++;
  39.                 Length--;
  40.         }

  41. }

  42. void Communication_Decode(void)  
  43. {        
  44.         if(buffer[0]==0x00)
  45.         {
  46.                 switch(buffer[1])
  47.                 {
  48.                         case 0x01:Left_Speed=Left_Speed_Hold;Right_Speed=Right_Speed_Hold;MOTOR_GO_FORWARD;DIR=1; se_timer[0]=180;return;//add by liuviking
  49.                         case 0x02:Left_Speed=Left_Speed_Hold;Right_Speed=Right_Speed_Hold;MOTOR_GO_BACK;  DIR=0; se_timer[0]=180;return;//add by liuviking
  50.                         case 0x03:Left_Speed=Left_Speed_Hold;Right_Speed=Right_Speed_Hold;MOTOR_GO_LEFT; se_timer[0]=0;  return;//add by liuviking
  51.                   case 0x04:Left_Speed=Left_Speed_Hold;Right_Speed=Right_Speed_Hold;MOTOR_GO_RIGHT;   return;
  52.                         case 0x00:Left_Speed=Left_Speed_Hold;Right_Speed=Right_Speed_Hold;MOTOR_GO_STOP;    return;

  53.                         case 0x05:Left_Speed=2;Right_Speed=9;MOTOR_GO_FORWARD;return;
  54.                         case 0x06:Left_Speed=2;Right_Speed=9;MOTOR_GO_BACK;return;
  55.                         case 0x07:Left_Speed=9;Right_Speed=2;MOTOR_GO_FORWARD;return;
  56.                         case 0x08:Left_Speed=9;Right_Speed=2;MOTOR_GO_BACK;return;
  57.                         default: return;
  58.                 }        
  59.         }
  60.         else if(buffer[0]==0x01)
  61.         {
  62.                 if(buffer[2]>180)
  63.                         return;
  64.                 switch(buffer[1])
  65.                 {
  66.                         case 0x01:se_timer[0]=buffer[2]; return;
  67.                         case 0x02:se_timer[1]=buffer[2]; return;
  68.                         case 0x03:se_timer[2]=buffer[2]; return;
  69.                         case 0x04:se_timer[3]=buffer[2]; return;
  70.                         case 0x05:se_timer[4]=buffer[2]; return;
  71.                         default : return;
  72.                 }
  73.         }
  74.         else if(buffer[0]==0x02)
  75.         {
  76.                 if(buffer[2]>10)
  77.                         return;
  78.                 switch(buffer[1])
  79.                 {
  80.                         case 0x01:Left_Speed_Hold=Left_Speed  = buffer[2]; return;
  81.                         case 0x02:Right_Speed_Hold=Right_Speed = buffer[2]; return;
  82.                         default : return;
  83.                 }
  84.         }
  85.         else
  86.         {
  87.                 return;
  88.         }
  89. }

  90. void UART_Interrupt_Receive(void) interrupt 4
  91. {
  92.         static uint8 i;
  93.         
  94.     if(RI==1)
  95.     {
  96.         RI  =   0;
  97.         if(rec_flag==0)
  98.                 {
  99.                         if(SBUF==0xff)
  100.                         {
  101.                                 rec_flag=1;        
  102.                                 i=0;
  103.                         }                        
  104.                 }
  105.                 else
  106.                 {
  107.                         if(SBUF==0xff)
  108.                         {
  109.                                 rec_flag=0;        
  110.                                 if(i==3)
  111.                                 {
  112.                                         Communication_Decode();               
  113.                                 }
  114.                                 i=0;
  115.                         }
  116.                         else
  117.                         {
  118.                                 buffer[i]=SBUF;
  119.                                 i++;
  120.                         }
  121.                 }               
  122.     }
  123.     else
  124.     {
  125.         TI  =  0;
  126.     }        
  127. }
复制代码
Config.h文件:
  1. /*
  2. 版权声明:
  3. WIFI机器人网·机器人创意工作室版权所有 www.wifi-robots.com
  4. 您可以任意修改本程序,并应用于自行研发的智能小车机器人及其他电子产品上,但是禁止用于向他人牟取暴利。
  5. By WIFI机器人网·机器人创意工作室
  6. */
  7. #ifndef _CONFIG_H_
  8. #define _CONFIG_H_

  9. #include "stc_new_8051.h"

  10. /* 直流电机管脚配置 */
  11. sbit MOTOR_A_CON1=P0^0;
  12. sbit MOTOR_A_CON2=P0^2;
  13. sbit MOTOR_A_EN=P0^1;

  14. sbit MOTOR_B_CON1=P0^3;
  15. sbit MOTOR_B_CON2=P0^5;
  16. sbit MOTOR_B_EN=P0^4;


  17. /* 舵机管脚配置 */
  18. sbit SE1=P1^0;
  19. sbit SE2=P1^1;
  20. sbit SE3=P1^2;
  21. sbit SE4=P1^3;
  22. sbit SE5=P1^4;

  23. /*大脚车驱动板DIR口*/
  24. sbit DIR=P1^5;//add by liuviking

  25. #define SE1_Deg  45 //舵机1上电默认角度
  26. #define SE2_Deg  30 //舵机2上电默认角度
  27. #define SE3_Deg  40 //舵机3上电默认角度
  28. #define SE4_Deg  45 //舵机4上电默认角度
  29. #define SE5_Deg  90 //舵机5上电默认角度

  30. /* LED管脚配置 */
  31. sbit LED6=P0^6;
  32. sbit LED5=P0^7;
  33. sbit LED4=P2^7;
  34. sbit LED3=P2^6;
  35. sbit LED2=P2^5;
  36. sbit LED1=P2^4;

  37. /* 串口配置 */
  38. /*晶振为22.1184MHz 以下为可选波特率*/
  39. #define BPS_9600     0x70  
  40. #define BPS_19200         0xB8
  41. #define BPS_38400         0xDC
  42. #define BPS_57600         0xE8
  43. #define BPS_115200         0xF4

  44. #define RELOAD_COUNT   BPS_9600        //波特率选择

  45. #endif
复制代码



我帮你改了一下,主要修改Uart.c和Config.h文件,这个是只驱动一个电机板的示例代码,重点看//add by liuviking这个注释的前面部分,接线时,将舵机1的PWM口接到你这个板子的PWM口上,DIR接口接到P15口上。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-15 21:46:47 | 显示全部楼层
liuviking 发表于 2013-7-14 01:46
Config.h文件:

你好,又得麻烦你了大哥。

我现在是这样接线的,
P05—Input4  接DIR2
P04—ENB     接PWM2
P03—Input3
P02—Input2 接DIR1
P01—ENA    接PWM1
P00—Input1

我是这样想的,在1,2电机转动的代码后面加段“设定PWM”的代码。
在1,2电机停转的代码后面加段代码设定PWM=0.这样不就可以驱动那种驱动板了吗?

另外,如何加段代码可以使用左右差速功能,这样我就可以调速了?
麻烦大哥给小弟给改一下,万分感谢!
回复 支持 反对

使用道具 举报

发表于 2013-7-15 23:25:29 | 显示全部楼层
kxw_0000 发表于 2013-7-15 21:46
你好,又得麻烦你了大哥。

我现在是这样接线的,

这样改不行,因为P02口已经被占用了,你看看Config.h里面的管脚配置就知道了,不能用已经占用的IO。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-16 08:06:31 | 显示全部楼层

RE: 跪求高手帮小弟修改下论坛驱动板源代码

liuviking 发表于 2013-7-15 23:25
这样改不行,因为P02口已经被占用了,你看看Config.h里面的管脚配置就知道了,不能用已经占用的IO。

谢谢了,我还是从arduino开始吧,正好手上有一块。arduino的代码可读性比较好,从头开始学。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-4-27 12:14 , Processed in 1.101114 second(s), 21 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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