智能车制作

标题: 蓝牙与电机控制会有冲突吗 [打印本页]

作者: f123456    时间: 2014-4-27 14:59
标题: 蓝牙与电机控制会有冲突吗
请教大神,用蓝牙往上位机上发数据的时候,若让电机工作,电机会一窜一窜的,必须停止蓝牙发送数据电机才正常工作,这是怎么回事?是程序哪里冲突了吗?

作者: f123456    时间: 2014-4-27 14:59
坐等大神
作者: f123456    时间: 2014-4-27 15:03

作者: f123456    时间: 2014-4-27 15:03

作者: f123456    时间: 2014-4-27 15:04

作者: f123456    时间: 2014-4-27 15:04

作者: f123456    时间: 2014-4-27 15:09

作者: 0与1的世界    时间: 2014-4-27 15:19
不会有冲突的,硬件pwm和串口没啥大关系 主要是看看程序里面发送周期是不是影响了你的控制周期
作者: f123456    时间: 2014-4-27 15:24
0与1的世界 发表于 2014-4-27 15:19
不会有冲突的,硬件pwm和串口没啥大关系 主要是看看程序里面发送周期是不是影响了你的控制周期

就是蓝牙发送的周期和电机pwm的周期互相影响了啊?那大神有没有什么解决的办法啊?万分感谢

作者: 青の幻想    时间: 2014-4-27 15:26
分离电源
作者: f123456    时间: 2014-4-27 15:31
青の幻想 发表于 2014-4-27 15:26
分离电源

电源是分开的,电机是直接接到电池上,而蓝牙是经过5v稳压才接上的,还能怎么分离呢?请赐教

作者: 头上两只角    时间: 2014-4-27 17:10
我们也出现了这个问题。  后期就不用了。
作者: gadwgdsk    时间: 2014-4-27 17:30
建议检查串口发送和电机控制有没有冲突
作者: f123456    时间: 2014-4-27 17:40
头上两只角 发表于 2014-4-27 17:10
我们也出现了这个问题。  后期就不用了。

现在还在调试,去掉蓝牙不是很方便

作者: f123456    时间: 2014-4-27 17:45
gadwgdsk 发表于 2014-4-27 17:30
建议检查串口发送和电机控制有没有冲突

肯定是占周期了,不知道怎么解决

作者: 0与1的世界    时间: 2014-4-27 19:24
降低发送数据的周期 又或者提高主频(超频) 如果是摄像头数据的话实在是有点大 不过我们用的250M主频 也够用了 你的蓝牙最大波特率多少!?一般115200的话 发一张图像还是秒级别的
作者: f123456    时间: 2014-4-27 19:38
0与1的世界 发表于 2014-4-27 19:24
降低发送数据的周期 又或者提高主频(超频) 如果是摄像头数据的话实在是有点大 不过我们用的250M主频 也够 ...

9600啊,好的,试试看,谢谢

作者: qual9109    时间: 2014-5-4 10:27
时序没控制好吧
作者: Still    时间: 2014-5-4 17:21
加大发送速率应该有效,相对控制周期来说,来说串口速度是比较慢的,再不行 就得巧妙利用中断了,比如在中断里设置标志位自加,并且做控制。在主函数里检测标志位,检测到再发串口数据。  方法很多,呵呵
作者: f123456    时间: 2014-5-4 18:38
qual9109 发表于 2014-5-4 10:27
时序没控制好吧

后来做了调整,没有这个问题了
作者: f123456    时间: 2014-5-4 18:41
Still 发表于 2014-5-4 17:21
加大发送速率应该有效,相对控制周期来说,来说串口速度是比较慢的,再不行 就得巧妙利用中断了,比如在中断 ...

多谢,领教了

作者: 瑾瑜    时间: 2014-5-9 18:56
蓝牙一条发送周期太长,影响系统执行周期。可以多加几条蓝牙发送指令对比不加发送指令,观察效果。
作者: f123456    时间: 2014-5-10 15:09
瑾瑜 发表于 2014-5-9 18:56
蓝牙一条发送周期太长,影响系统执行周期。可以多加几条蓝牙发送指令对比不加发送指令,观察效果。

好的,谢谢

作者: 狂野的庄稼汉    时间: 2014-5-10 15:18
看下你的管脚有没有复用错了
作者: 追_梦    时间: 2014-5-10 16:30
额,你改一下那个串口波特率试试,可能是你的串口发送数据时间太长导致控制周期出问题。。
作者: ▲_important゜    时间: 2014-5-16 20:22
f123456 发表于 2014-4-27 17:45
肯定是占周期了,不知道怎么解决

问下楼主怎么解决的啊,我最近也遇到了这个问题了--

作者: f123456    时间: 2014-5-16 21:29
▲_important゜ 发表于 2014-5-16 20:22
问下楼主怎么解决的啊,我最近也遇到了这个问题了--

改周期,一个周期里别发送太多了

作者: ▲_important゜    时间: 2014-5-17 10:04
f123456 发表于 2014-5-16 21:29
改周期,一个周期里别发送太多了

一个5ms内就发送一个浮点变量也不多吧
作者: f123456    时间: 2014-5-17 13:04
▲_important゜ 发表于 2014-5-17 10:04
一个5ms内就发送一个浮点变量也不多吧

后来效果不是很好,不用了

作者: 火之翼    时间: 2015-4-18 11:57
能请教一个问题吗?自己想用手机通过蓝牙模块控制直流电机的运作,但是两部分单独测试的时候可以运作,但是将两部分程序和在一起就不能实现控制,求帮忙看一下程序哪个地方出现错误
  1. //蓝牙模块外加流水灯效果
  2. #include <reg52.h>                                                                                                          
  3. #include <intrins.h>
  4. #define uchar unsigned char
  5. #define uint  unsigned int

  6. uchar tmp;
  7. uchar i,j;
  8. uint ldutycycle=0  ; //左边电机的占空比
  9. uint t=0;                //定时器中断计数器

  10. sbit flin1=P3^4;//前轮驱动
  11. sbit flin2=P3^5;
  12. sbit fena=P1^1;
  13. sbit Turn_key=P1^4;

  14. void driveinit();
  15. void init();                                   //串口初始化
  16. void send(unsigned char a);        //单字节发送函数
  17. void ctrl();                                 //接收处理函数
  18. void delay(unsigned int i);  //声明延时函数

  19. void main()
  20. {
  21.         init();
  22.         driveinit();
  23.      while(1)
  24.      {         
  25.        if(RI==1)  // 是否有数据到来
  26.        {
  27.           RI = 0;
  28.           tmp = SBUF;  // 暂存接收到的数据
  29.                   ctrl();
  30.                 }      
  31.       }
  32. }

  33. void driveinit()          //电机驱动初始化
  34.                   {
  35.                      flin1=0;
  36.                      flin2=1;
  37.                   }
  38. void timer0() interrupt 3                  //定时中断+pwm
  39. {  
  40.         if(t<ldutycycle)
  41.         {
  42.                 fena=1;                          //假设的ena控制左边,enb控制右边
  43.          }
  44.         else
  45.         {
  46.                 fena=0;
  47.         }
  48.         t++;
  49.         if(t>100)
  50.         t=0;
  51.         TH0=(65536-1000)/256;
  52.         TL0=(65536-1000)%256; //周期5ms        ,给初值
  53. }
  54.                
  55. void goforward()                  //前进
  56. {       
  57.         flin1=1;
  58.         flin2=0;
  59.         ldutycycle=30;                  
  60. }
  61. void goback()                          //后退
  62. {
  63.         flin1=0;
  64.         flin2=1;
  65.         ldutycycle=30;
  66. }
  67. void delay(unsigned int i)
  68. {
  69.     unsigned char j;
  70.     for(i; i > 0; i--)
  71.         for(j = 255; j > 0; j--);

  72. }
  73. void init()        //串口初始化
  74. {

  75.                   ES=0;       
  76.                   TMOD=0x21;                                                          //关中断
  77.                   SCON = 0x50;
  78.                   TH0=(65536-1000)/256;
  79.                   TL0=(65536-1000)%256; //周期1ms
  80.                   TH1=TL1=0xFD;
  81.                   PCON &= 0x7f;         //波特率不倍增
  82.                   EA=1;                                        //总中断
  83.                   ET0=1;                                //开定时中断
  84.                   TR0=1;                                //启动定时器
  85.                   TI=0;                                        //发送标志位置0
  86.                   RI=0;                                        //接收标志位置0
  87.                   ES=1;
  88.                   P2=0x55;
  89. }   
  90. void send(unsigned char a)        //单字节数据发送
  91. {                                                        //注意:若单片机TXD(P3.1)无上拉能力,必须在P3.1端接上拉电阻。本次测试需要接上拉电阻
  92.         TI=0;       
  93.         SBUF=a;
  94.         while(TI==0);
  95.         TI=0;
  96. }

  97. void ctrl()                            //接收处理函数
  98. {
  99.                                     switch(tmp)
  100.                                   {
  101.                                            case '1':
  102.                                            goforward();
  103.                                            break();
  104.                                         default:                   //其他,灯全灭
  105.                                                   goback();
  106.                                                   send(tmp);
  107.                                   }
  108. }
复制代码





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2