【Jsp精品源码栏目提醒】:以下是网学会员为您推荐的Jsp精品源码-两轮自平衡车 - 科学技术,希望本篇文章对您学习有所帮助。
两轮自平衡车算法:和大家的一样,一个倾角环,一个车速环。
取得角度、角速度、车速、车位移四个量后经过运算送给 PWM 驱动电机。
硬件: 主控:atmega16; 角度传感器:角速度传感器陀螺仪ENC-03MB直接接 AD 输入,未加硬件滤波、加速度传感器 MMA7260,二者 kalman 融合取得角度、角速度。
PS:抄 zlstone 的,呵呵。
电机速度传感器:每个电机两个霍尔传感器(AB 相)。
电机:型号不清楚,很常见的减速电机。
额定电压 6V,功率 3W。
电机驱动:L298N 电源:变压器整流桥那种普通电源,几块钱一个。
两个,电机、MCU 分开供电。
电机电源电压打到最高不接电机时 15V 多,接了电机 5V 多,汗。
。
显示器:LCD1602B 遥控:电视红外遥控器 原文件名:20110110_0103.jpg 引用图片 原文件名:20110110_0104.jpg 引用图片源代码 WINAVR20100110AVRStudio4.18ourdev_610434C8FD1C.rar文件大小:104K 原文件名:Balance.rar原理图:atmega16 最小系统版 ourdev_610214M89OEI.pdf文件大小:30K 原文件名:M16 迷你板电路图.pdf上位机,带波形、数据显示 ourdev_610318TY8G24.rar文件大小:48K 原文件名:串口调试.rar 车速未滤波之前波形 原文件名:车速未滤波之前波形.JPG 车速 10Hz 低通滤波后波形 原文件名:车速 10Hz 低通滤波后波形.JPG 视频在这里 http://v.youku.com/v_show/id_XMjM1OTQ3NzU2.html现在还不是很稳,我想有两个原因,一个是参数没调到最佳,调了好久,先这样吧。
再有就是电源太烂了,电机是额定 6V 的可实际电压空载的时候才打到 5 伏多一点,在平衡的时候没测,肯定更低了。
陀螺仪 ENC-03 是直接接 AD 输入端的,因为按照 datasheet 上边的参考电路有过冲问题,这个问题有个帖子已经讨论过,很多人都是围绕怎么补救这个问题,我来算一下为什么这样子,呵呵如下: 高通滤波脉冲响应 原文件名:QQ 截图未命名.jpg因为有这个问题, 会给倾角数据造成影响,所以我就去掉了滤波,直接接到 AD。
这样 1deg/s 有 0.67mv,10 位 AD 参考电压是 3.36V,最小才能测到 3.28mv,小于 4.8deg 时就测不到了。
本来担心这个问题,但试了下 KALMAN 滤波,真是强啊!角度很精确,就这么用了。
车体研究了好久, 没有用钢化玻璃的设备,就一直没动工。
有天去打水突然看到旁边有个大的三合板,呵呵,于是乎。
。
感觉车体结构也是个难点啊,要算尺寸,要打孔(先用烙铁头扎,在用螺丝刀来回钻) ,挺费劲的。
还有支架,试用很短的铜柱,一个一个摞起来的,所有能找到的铜柱都用上了,刚好够用。
这种车体的中间不能负重,重了后面俩轮就往外翻,当时是做打水机器人的,后来没有做完就 over了不知道 STC 那种的,我只用过 STC89C51 那种的,呵呵。
这个车要用很多片内外设的。
AIN0:陀螺仪输入AIN1:加速度计输入T0:采样周期定时,算法都在这里完成;T1:两路 PWM;T2:用作霍尔传感器 T 法测速(要用码盘 M 法测速,不需要用) 、红外脉冲定时;INT0、INT1:接霍尔传感器,采集速度INT2:红外接收头输入信号(遥控要用无线的话,也省了)电机驱动电路图驱 动 我 买 的 模 块 20 块 , 卖 家 没 提 供 电 路 图 。
应 该 是 和 这 个 一 样 的http://www.ourdev.cn/bbs/bbs_content.jspbbs_sn1344216bbs_page_no1bbs_id1024。
都是没加光耦直接接过去的。
这个图完全能用,我已经焊接好这个电路,驱动小车。
就是要大一点的散热片,普通散热片太小太烫了。
L298 偏偏是没有,PCB 上还要额外放 8 个高速二极管是很让人吐血的一件事情……小功率版的 L293 是有二极管的,用起来方便多了。
问题找到了,本来程序是 Debug 版本的,要改成正式发行版的,VC 我只用了不久,是低级错误啦,呵呵。
LZ 位软件我重新改过了。
VC 工程在这里。
上位机 VC工程
源码 ourdev_610317VUO0LN.rar文件大小:4.99M 原文件名:Curve1.rar写的有点乱,10.1 假期写的,后边就没怎么更新了。
两种显示,字符显示和调试助手相同,要用示波器的话,协议为:先发 0xFD,再连续发两个字节数据,多个数据依次发下去。
单片机中此段程序即为发送波形显示数据的格式:ifctr_pos2ctr_pos0temp1speed_filter10150Putc0xfdPutctemp1/256Putctemp1256数据发的不能太快(差不多要大于 10ms),太快右侧字符频繁刷新界面,上位机会卡死,所以在界面上设置了禁止字符输出,用示波器时,最好选上。
这个软件可以查看历史波形、数据。
自己顶一个,没人关注啦,大家对这个没什么兴趣?所有资料都有啊!我说下成本:AVR 最小系统版 45;陀螺仪 ENC-30MB:35;加速度传感器 MMA7260 模块:48(5V/3.3V 供电) ;电机轮子联轴器两套:96;霍尔传感器模块(两对,每对 AB 相):34;电机驱动板:20;遥控、显示看个人了。
453548963420278 元。
所有的加一起 300 元吧。
此贴的价值:1.车的成本相对来说很低; 。
;2.所有代码,电路开源(都是模块插线,没有 PCB 的。
)3.这个上位机真的很实用。
没有示波器或者不方便用示波器时候,用它显示波形很爽的,并且可以保留历史波形哦!在做此车过程中,我先后用它看了角速度、加速度、陀螺仪积分的角度、KALMAN滤波的角度、车运行过程中的角度、电机空载速度、PI 闭环的空载调速曲线(此车没用速度闭环)、车位移等曲线。
很直观!发送数据的协议很简单,上面已经讲过。
而且代码开源的,自己可以在此基础上增加、改善一些功能。
知道可不可以贴淘宝地址,有做广告的嫌疑啊。
。
。
LZ 买的太贵了,MMA7260 才 13,ENC-03 为 18,我也买了许多元件,但 AVR 单片机不太懂,一直没敢开工。
正在学习,刚设计了个实验板。
另外驱动电路是自己做的,分立元件的,体积稍大,但 。
。
效果很好。
向楼主学下中。
。
。
是有点贵当初买的时候也看了其他店子,有像你说的很便宜的,但是你也要考虑邮费起码 10 元吧,那个 MMA7260 挺好的别看要 48 元,是已经做好的模块,而且有插针,可以直接插在万用版上的,你要是 13 块钱买个芯片的话,要是没风枪的话,不好焊吧,我是不会焊,呵呵。
其他店类似的模块也要 30 多吧,再加个邮费也差不多了。
但客观的讲,那个店确实有点点贵,但是所有东西一次性都买齐了。
做此车不是非要用 AVR 的,只要速度、外设够用就可以!需要的外设上边都有说。
关键要懂算法!其实我也是一知半解,给你推荐篇文章卡 尔 曼 滤 波 介 绍 中 文 版 ourdev_611837OCLGOY.pdf 文 件 大 小 :540K 原 文 件名:kalman_intro_chinese.pdf卡尔曼滤波介绍英文版 ourdev_611838G0F5Z1.pdf文件大小:173K 原文件名:kalman_intro.pdf文章从头开始看,看完离散卡尔曼滤波那一节,就会理解很多。
后面扩展卡尔曼我看不懂,最后面举了个例子,好好看下。
卡尔曼 C 语言 ourdev_611839GC1Z3U.txt文件大小:7K 原文件名:kalman.txt 再看下这个程序。
和 。
我用的结构差不多的(我的是抄 zlstone 的,他貌似也是复制的,呵呵,最难的就是卡尔曼) 下面是我的:void Kalman_Filterfloat angle_mfloat gyro_m //gyro_m:gyro_measureanglegyro_m-q_bias dt//先验估计Pdot0Q_angle - P01 - P10// Pk- 先验估计误差协方差的微分Pdot1- P11Pdot2- P11Pdot3Q_gyroP00 Pdot0 dt// Pk- 先验估计误差协方差微分的积分 先验估计误差协方差P01 Pdot1 dtP10 Pdot2 dtP11 Pdot3 dtangle_err angle_m - angle//zk-先验估计PCt_0 C_0 P00PCt_1 C_0 P10E R_angle C_0 PCt_0K_0 PCt_0 / E//KkK_1 PCt_1 / Et_0 PCt_0t_1 C_0 P01P00 - K_0 t_0//后验估计误差协方差P01 - K_0 t_1P10 - K_1 t_0P11 - K_1 t_1angle K_0 angle_err//后验估计q_bias K_1 angle_err//后验估计angle_dot gyro_m-q_bias//输出值(后验估计)的微分 角速度我只能帮这些了,我的方向是运动控制方面,KALMAN 貌似在信号分析相关专业会学的,所以我也没细看了。
上述程序我是直接复制过来的,只改了采样周期,剩下一点没动(还加了点注释,呵呵)。
有关 KALMAN 的详细解释一般都是外国网站的,中国的都是扯淡。
我做这个车的目的就是想搞下PID,怎么获取角度是次要的东西。
需要两个传感器,角速度传感器(ENC-03MB)、加速度传感器(MMA7260) 。
AD 测量并转换得两者数据,送 KALMAN 滤波,输出得到角度(angle)、角速度(angle_dot),就可以用了!两个传感器得到的数据是什么呢是角度还是角速度呢我用了角速度传感器和加速度传感器得到倾角是没问题的 但对车子计算偏航的角度就出现问题了因为加速度传感器没法对角速度传感器进行误差补偿 这方面 lz 是怎么解决呢就是角速度和加速度啊!要得到角度需要卡尔曼(KALMAN)融合,可以活得很精确的角度。
如果用我那段程序需要根据自己的采样周期修改 dt 的值,我的是 6ms,所以 dt0.006。
用卡尔曼融合角速度传感器和加速度传感器的数据 这里明白了 也可以得到倾角 因为有对地面的加速度是不变的 也是 1g到了计算偏航的时候 没有了地心引力 就头痛了偏航的也是角速度和加速度吗 角速度传感器的数据得到 gyro_m 但怎么把加速度得到的数据算成angle_m 呢我还是不懂呢不好意思,我搞错了。
送给 KALMAN 的数据应该是角速度、加速度计求得的角度而不是加速度。
accacc-1650//加速度测量数据-静态值accacc/800//这里得到角度的正弦值ifacc1//算出的值可能大于 1 或小于-1,是错的,所以限下幅acc1else ifacc