极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: It's_me

基于Arduino+MPU6050+Tp-link 703n平衡车完美站立(部分代码上传)

  [复制链接]
 楼主| 发表于 2014-5-4 09:40:52 | 显示全部楼层
一叶萧然 发表于 2014-5-3 20:11
楼主还是电机的问题,电机的引线(就是可以测出转速的两根线),具体是连接哪两个口?是直接INPUT然后analo ...



你看一下这个码盘测速的原理,还是不懂我再给你讲讲

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-4 09:43:06 | 显示全部楼层
一叶萧然 发表于 2014-4-29 22:58
嗯还有楼主,就是如果我利用外部控制(我用的是无线PS2),是直接控制PID里的参数还是其他的什么能让它稳定前 ...

是的,你直接改变这个值就行
回复 支持 反对

使用道具 举报

发表于 2014-5-4 13:58:44 | 显示全部楼层
It's_me 发表于 2014-5-4 09:40
你看一下这个码盘测速的原理,还是不懂我再给你讲讲

time = millis();//以毫秒为单位,计算当前时间
  //计算出每0.5秒钟内,编码器码盘计得的脉冲数,
  if(abs(time - old_time) >= 500) // 如果计时时间已达0.5秒
  {
    detachInterrupt(0); // 关闭外部中断0
    detachInterrupt(1); // 关闭外部中断1  
     //此直流减速电机的编码器码盘为334个齿,减速比为21.3。
    //把编码器每0.5秒钟计得的脉冲数,换算为当前转速值的计算式
    rpm_right =(float)count_right*60*2/(334*21.3);
    rpm_left =(float)count_left*60*2/(334*21.3);
    //根据左右车轮转速差,乘以比例调节因子2,获得比例调节后的左侧电机PWM功率值
    PWM_left=(float)PWM_left+(rpm_right-rpm_left)*2;      
//根据刚刚调节后的小车电机PWM功率值,
//及时修正小车前进或者后退状态,以使小车走直线
    if(flag=='a')
    advance();
    if(flag=='b')
    back();     
    count_right = 0;   //把脉冲计数值清零,以便计算下一个0.5秒的脉冲计数
    count_left = 0;
    old_time=  millis();     // 记录每次0.5秒测速后的时间节点   
    attachInterrupt(0, Code_right,FALLING); // 重新开放外部中断0
    attachInterrupt(1, Code_left,FALLING); // 重新开放外部中断1
  }
}

//右侧电机编码器码盘计数中断子程序
void Code_right()
{  
  count_right += 1; // 编码器码盘计数加一
}
//左侧电机编码器码盘计数中断子程序
void Code_left()
{
  count_left += 1; // 编码器码盘计数加一   
}


其实这里有这个代码,是为了能够保持转速一致的,想到从端口读取,但是应该直接连到端口就可以了吧,然后INPUT,不知道楼主把那两根线是如何连接的,楼主给的原理图已经看懂~谢谢~~
回复 支持 反对

使用道具 举报

发表于 2014-5-4 22:25:56 | 显示全部楼层
楼主   你的陀螺仪和加速度仪分别测得是哪两个轴
回复 支持 反对

使用道具 举报

发表于 2014-5-6 08:56:22 | 显示全部楼层
楼主关于您的PID算法“Pwm_out = Kap*Angle[0] + Kad*w[0] + Ksp*speeds_filter + Ksi*positions ;”是属于位置型PID么?之前坛子里有一个平衡车的算法他的PID部分是这样的“
      Setpoint=LSpeed_Need;// =0,(+ -值使电机前进或后退)
      Input =f_angle;//加速度与陀螺仪互补滤波后的角度
      error = Setpoint- Input;
      errSum += error* timeChange;
      dErr = (error - lastErr)/ timeChange;
      Output = kp * error + ki * errSum + kd * dErr;”
这个属于增量型PID吗?有什么区别呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-11 18:12:49 | 显示全部楼层
124330190 发表于 2014-5-6 08:56
楼主关于您的PID算法“Pwm_out = Kap*Angle[0] + Kad*w[0] + Ksp*speeds_filter + Ksi*positions ;”是属于 ...

PID的基本思路是一样的,你看看最基本的公式,没有什么增强型pid
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-11 18:14:00 | 显示全部楼层
蓝调葬礼 发表于 2014-5-4 22:25
楼主   你的陀螺仪和加速度仪分别测得是哪两个轴

那两个都行,看你怎么摆放传感器了
回复 支持 反对

使用道具 举报

发表于 2014-5-13 08:51:55 | 显示全部楼层
It's_me 发表于 2014-5-11 18:12
PID的基本思路是一样的,你看看最基本的公式,没有什么增强型pid

噢~讲错了,应该是由两种,一种是位置型PID还有一种是增量型PID。写成增强了
回复 支持 反对

使用道具 举报

发表于 2014-5-13 12:26:02 | 显示全部楼层
学习中,准备做一个!
回复 支持 反对

使用道具 举报

发表于 2014-5-16 11:20:43 | 显示全部楼层
好贴,新手学习了!
回复 支持 反对

使用道具 举报

发表于 2014-5-16 15:52:23 | 显示全部楼层
楼主,我有个问题啊
我的陀螺仪积分输出的角度很加速计的角度很大差别,陀螺仪积分的角度明显是小很多,是什么问题?
回复 支持 反对

使用道具 举报

发表于 2014-6-8 17:12:31 | 显示全部楼层
初学MPU6050,买了一个没有硬件KALMAN滤波的。
回复 支持 反对

使用道具 举报

发表于 2014-6-12 08:38:12 | 显示全部楼层
这么详细,喜感,我也想做一个平衡车,有问题请教你咯。。。
回复 支持 反对

使用道具 举报

发表于 2014-6-12 13:25:03 | 显示全部楼层
楼主 如果能加入你的QQ群 或者 拉我们进群也行77167898  这样可以更进一步学习
回复 支持 反对

使用道具 举报

发表于 2014-6-14 23:31:58 | 显示全部楼层
只用到了X轴的吗?  这个能边遥控边自己保持平衡?上面三个图是什么啊?
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-6 05:47 , Processed in 0.080150 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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