学习平衡车中写的串口工具,希望对初学者有用
在论坛上潜水几个月了,跟大家学习两轮平衡车的制作,获益良多。在调试传感器数据和滤波时写了一个串口工具,趁这个周末整理了一下,共享出来,希望能对初学者们有所帮助。功能比较简单,主要是接收单片机发送来的3个整型数据,以图形显示。可以向单片机发送几个字节,用作控制目的。单片机发送的数据以0xFF作为帧结束标志,每个整型数以5个字节表示,具体参照单片机调用的函数(在安装目录下的使用说明中)。
个人曾经在数据滤波上停滞了较长时间,纠结于滤波器的延时,后来看了MIT那个PPT文件才意识到自己没弄好传感器数据的符号,贴两张图示意一下:
本帖最后由 小皮2005 于 2012-12-17 09:20 编辑
安装文件大约8M,上传了2次没有成功,显示今天没有上传权限了 。。。。 明天再传吧{:sad:}
这次能传了!
小皮2005 发表于 2012-12-16 13:11 static/image/common/back.gif
安装文件大约8M,上传了2次没有成功,显示今天没有上传权限了 。。。。 明天再传吧
...
楼主,发我邮箱可以吗?我也在做平衡车,需要这样的软件,谢谢。邮箱是261313062@qq.com 顶………… diyeyuye 发表于 2012-12-16 19:02 static/image/common/back.gif
楼主,发我邮箱可以吗?我也在做平衡车,需要这样的软件,谢谢。邮箱是 ...
已发送,查收.... {:smile:}
小皮2005 发表于 2012-12-16 20:06 static/image/common/back.gif
已发送,查收....
收到,多谢楼主{:handshake:} LZ用C++写的还是C写的上位机?{:lol:} 酷爱diy 发表于 2012-12-16 23:12 static/image/common/back.gif
LZ用C++写的还是C写的上位机?
用CVI写的。工作比较偏重硬件,对于软件,只努力保持会一种工具,能在windows下写带界面的测试程序。连单片机程序都是参考坛中大侠们的开源边捡边学的。开始时,用51芯片模拟I2C、模拟PWM、定时和串口放一起,怎么弄都不好使,很是懊恼,这么多年难道连单片机都忘了?后来一想,不是忘了,是从来就没精通过{:titter:} 学多了,不精通,还是同于没学一样,放下所有的一切,学通一个已经很不容易了,学精一门技术,很难,很艰苦,下辛苦去学,要想学精得需要长时间的坚持{:lol:} 正在找这样的软件。谢谢!!{:lol:} 楼主 串口接收部分用的是api还是mscomm控件 number007cool 发表于 2013-1-9 10:08 static/image/common/back.gif
楼主 串口接收部分用的是api还是mscomm控件
调用开发环境里的函数,我理解应该是API。
我看你在其它帖子中也在问同样的问题,这个很重要吗? 用控件存在着一定的问题 LZ你的软件 360报毒啊 acai039033 发表于 2013-1-10 09:43 static/image/common/back.gif
LZ你的软件 360报毒啊
很多东西360都报病毒。有一个我用了很多年的网上来的串口调试工具,都不能从邮件发送,显示有病毒.....
不过这个工具是我自己写的/编译的,另外,我可没有编病毒那两下子...{:lol:} 谢谢分享. 楼主你好,为什么蓝色曲线跟另外两条曲线差别很大,能否介绍一下三根曲线所代表的意思,从图中看貌似滤波效果一般啊 wwxxcc 发表于 2013-1-27 09:15 static/image/common/back.gif
楼主你好,为什么蓝色曲线跟另外两条曲线差别很大,能否介绍一下三根曲线所代表的意思,从图中看貌似滤波效 ...
三条曲线,绿色的是通过加速度算出来的角度;蓝色的是从陀螺仪读出的角速度;黄色的是卡尔曼滤波后的效果了。一楼中,第一张图是有问题的情况,第二张图是正常的效果。
卡尔曼就是坛中的大侠们的程序,我看到的效果就是图中那样的了。至于蓝色曲线比较大,显示的是原始数据,没有做变换或缩放的处理。 楼主能加QQ1164512033吗我也在做平衡车遇到问题求教 装不了显示installation summary no softwarewill beinstalled or remove 现在要读取mpu050 陀螺仪的数据,用串口不知道怎么测,有办法吗 自从社区改版之后,我就已经心灰意冷,对社区也没抱什么希望了,传说已经幻灭,神话已经终结,留在社区还有什么意思.没想到,没想到,今天可以再睹楼主的风范,我激动得忍不住就在屏幕前流下了眼泪.是啊,只要在楼主的带领下,社区就有希望了.我的内心再一次沸腾了,我胸腔里的血再一次燃烧了.楼主的话概括扼要,一语道出了我们苦想多年的而不可得答案的几个重大问题的根本.楼主就好比社区的明灯,楼主就好比社区的方向,楼主就好比社区的栋梁.有楼主在,社区的明天必将更好!楼主你的高尚情操太让人感动了.在现在这样一个物欲横流的金钱社会里,竟然还能见到楼主这样的性情中人,无疑是我这辈子最大的幸运.让我深深感受到了人性的伟大.楼主的帖子,就好比黑暗中刺裂夜空的闪电,又好比撕开乌云的阳光,一瞬间就让我如饮甘露,让我明白了永恒的真理在这个世界上是真实存在着的.只有楼主这样具备广阔胸怀和完整知识体系的人,才能作为这真理的唯一引言者.看了楼主的帖子,让我陷入了严肃的思考中,我认为,如果不把楼主的帖子顶上去,就是对真理的一种背叛,就是对谬论的极大妥协.因此,我决定义无返顾的顶了! 123bac 发表于 2013-1-29 11:57 static/image/common/back.gif
现在要读取mpu050 陀螺仪的数据,用串口不知道怎么测,有办法吗
1. 我很少上QQ,但一有空就来刷一下这个论坛,看看大侠们的信息,哪些可以借鉴到自己的小车上。
2. 不知道你的操作系统是什么,我在XP上用没什么问题,也有些坛友下了这个工具,不知道有没有用,能不能用。没看到太多的反馈。哦, 你的安装不上,会不会是被防病毒软件给屏蔽了,有网友说过“显示有病毒”。
3. 显示6050的数据,其实就是在单片机程序中读到6050的数据,然后按照约定好的格式从单片机的串口发出来,然后在电脑上收进来,按照约定的格式恢复数据再以图形的方式显示出来。网上和坛中有好几个大侠共享的他们的工具,都是这样的模式。
我的工具安装后,在安装目录有一个说明,里面有单片机那边的串口发送函数(我自己用的)。 pplive 发表于 2013-1-29 12:31 static/image/common/back.gif
自从社区改版之后,我就已经心灰意冷,对社区也没抱什么希望了,传说已经幻灭,神话已经终结,留在社区还有什么 ...
{:sweat:} {:funk:} 为什么要安装? william_rain 发表于 2013-1-29 15:01 static/image/common/back.gif
为什么要安装?
需要几个底层的DLL, 开发环境自带生成安装文件的功能,能自动将需要的DLL打包。以前一直这么做,还没试过将所有文件单独拷出来能不能运行。 装上了怎么用啊,两天了,那个函数怎么样,怎样用单片机采集mpu6050的数据是把mpu6050的的两根线连到单片机的I/o口具体怎么编程还是不会能详细示范一下吗我请教了rangtingting没理解过来 能给一下你单片机那边的采集数据的程序吗我想参考一下好像要用到iic总线 Mark 一下, 我最近想写一下类似的程序 123bac 发表于 2013-1-29 15:35 static/image/common/back.gif
装上了怎么用啊,两天了,那个函数怎么样,怎样用单片机采集mpu6050的数据是把mpu6050的的两根线连到单片机 ...
MPU6050的接口是I2C的,可以用单片机IO口模拟I2C的时序来访问MPU6050。其实rantingting大侠共享的程序就有IO口模拟I2C的函数,下面有我的程序,你会发现都差不多的。重要的是搞明白了然后“移植”到你的工程中,一定是移植,不是拷贝,虽然只是简单的几行代码,但可能不同的单片机,或不同频率设置,或不同的编译工具,都可能使直接拷贝的程序不好使。如果对单片机或I2C不是很熟悉,可能需要先在网上恶补一下,我的体会,虽然有很多大侠共享了代码,但想直接拷贝就好使也不容易,基本上不明白的地方还是会“被”花时间补上,我走的可能比你远一点点,但现在我还在补习PID控制和参数整定部分,呵呵....
下面是调用I2C函数访问MPU6050的例子:
void InitMPU6050()
{
WriteI2C(MPU6050_ADDR, PWR_MGMT_1, 0x00); //解除休眠状态
WriteI2C(MPU6050_ADDR, SMPLRT_DIV, 0x07);
WriteI2C(MPU6050_ADDR, CONFIG, 0x06);
WriteI2C(MPU6050_ADDR, GYRO_CONFIG, 0x18);
WriteI2C(MPU6050_ADDR, ACCEL_CONFIG, 0x01);
}
void Measure_Acc_Gyro()
{
ReadI2C(MPU6050_ADDR, ACCEL_XOUT_H, &I2CDATA, 14);
accx_measure = (I2CDATA<<8) + I2CDATA;
accz_measure = (I2CDATA<<8) + I2CDATA;
gyroy_measure = (I2CDATA<<8) + I2CDATA;
}
模拟I2C函数文件:
mark!!!!!!!!!!!!!! {:lol:}有道理毕竟中间还有很多的细节{:shocked:} LZ能把通讯协议说明一下吗?还有软件使用方法 LZ能否共享一下CVI的代码呢?俺最近也在搞CVI,想学习一下,感谢+1 bfk2003 发表于 2013-2-2 16:23 static/image/common/back.gif
LZ能把通讯协议说明一下吗?还有软件使用方法
单片机发送16个字节为一帧,每5个字节标示一个整型数,最后一个字节是0xff 作为帧结束符),上位机收到这个0xff后开始解析前面收到15个字节的数据。
单片机发送函数:
void Print_Show(int data1, int data2, int data3)
{
SeriPush2Bytes(data1);
SeriPush2Bytes(data2);
SeriPush2Bytes(data3);
uart_transmit(0xff);
}
把一个整数分解成5个字节标示,是为了避免数据中再出现0xff。5个字节中第一个表示符号,然后将整数的两个字节拆成4个字节表示,看下面的函数应该更清楚
void SeriPush2Bytes(int value)
{
unsigned char t_char;
if(value < 0) {
value = -value;
uart_transmit(0xf0);
}
else {
uart_transmit(0xf5);
}
t_char = value/256;
if(t_char > 127) uart_transmit(0x80);
else uart_transmit(0x00);
uart_transmit(t_char & 0x7f);
t_char = value%256;
if(t_char > 127) uart_transmit(0x80);
else uart_transmit(0x00);
uart_transmit(t_char & 0x7f);
}
软件的使用方法不复杂,看界面上的按钮吧,只要收到的数据是指定的格式,就可以显示数据。我看到有坛友在使用,能显示波形了.....
3.3v 发表于 2013-2-2 19:24 static/image/common/back.gif
LZ能否共享一下CVI的代码呢?俺最近也在搞CVI,想学习一下,感谢+1
在另一台电脑上,晚些时候吧. 如果是学习CVI的话,建议看安装程序中的例程,每个控件都有实例的,我的一部分程序就是从例程中copy出来的.... 小皮2005 发表于 2013-2-3 11:20单片机发送16个字节为一帧,每5个字节标示一个整型数,最后一个字节是0xff 作为帧结束符),上位机收到这 ...
还是有些不明白,LZ能加下QQ吗?445353987 小皮2005 发表于 2013-1-9 11:11 static/image/common/back.gif
调用开发环境里的函数,我理解应该是API。
我看你在其它帖子中也在问同样的问题,这个很重要吗? ...
mscomm库封装了api 手机上,没有找到有收藏,回复收藏下先 小皮2005 发表于 2013-2-3 11:23 static/image/common/back.gif
在另一台电脑上,晚些时候吧. 如果是学习CVI的话,建议看安装程序中的例程,每个控件都有实例的,我的一 ...
同问,能分享一下源码吗? LZ的float转换成4个ucar为什么不用指针的啊?LZ中间的转换过程有点看不懂 扎希德 发表于 2013-2-4 23:28 static/image/common/back.gif
mscomm库封装了api
哦,那还是有坛友提到的“控件”啊。
我只当工具用,对软件深层的东西了解不多{:sweat:} migrantcn 发表于 2013-2-5 15:41 static/image/common/back.gif
同问,能分享一下源码吗?
绝对可以,稍等两天.... 等小孩考完课外班的试,我做小车的一堆东西和那台电脑都堆在一个角落里..... bfk2003 发表于 2013-2-5 20:54 static/image/common/back.gif
LZ的float转换成4个ucar为什么不用指针的啊?LZ中间的转换过程有点看不懂
我不善写代码,可能有点费解,呵呵....
没有float数,是把一个int数转换成5个字节,第一个字节是符号,然后看int的高位字节,把这个字节看成最高bit和余下7个bit两部分,最高bit是1就发送0x80,否则发送0x00;然后发送屏蔽最高bit,发送余下7个bit。int的低位字节也是一样,这样在上位机处理接收数据时, d | d * 256 + d | d 就是原始数据了, 在加上的d的符号就可以了。
嗯,现在我才想起来,其实将待转换的字节直接写成 t_char&0x80, t_char&0x7f 要好理解的多。 本帖最后由 骚黄 于 2013-2-8 13:27 编辑
给LZ说个严重性BUG,9600波特率下,每组数据发送间隔小于10ms, 或者19200波特率下,每组数据发送间隔小于1ms,软件显示的结果将不可预料,开始确实是因为嵌套太多导致堆栈溢出了,结果最后我用串口发送固定数据,曲线显示还是不可预料的结果,结果用串口调试软件一看,我发出的数据是没问题的,但是你的软件却表现为一会正常,一会不正常。
按照协议发送模拟数据:123 456 789三个数字,有图有真相!~
小皮2005 发表于 2013-2-6 11:22 static/image/common/back.gif
绝对可以,稍等两天.... 等小孩考完课外班的试,我做小车的一堆东西和那台电脑都堆在一个角落里..... ...
工具代码
骚黄 发表于 2013-2-8 13:23 static/image/common/back.gif
给LZ说个严重性BUG,9600波特率下,每组数据发送间隔小于10ms, 或者19200波特率下,每组数据发送间隔小于1 ...
嗯,我用38400波特率从单片机那边接收数据,用串口线连接时(老笔记本的RS-232),使用中没有发现过问题。但最近用蓝牙串口(同样是38400波特率)来调试大车的PID参数时,就时常发生你说的这个现象,由于重点在调试PID,复位几次还能用就没怎么深想,还以为是蓝牙模块不稳定....{:sweat:}
你觉得这是什么原因导致的?上位机数据接收处理不过来?还是有什么其他bug导致上位机的数据帧识别有问题..... 小皮2005 发表于 2013-2-8 22:54 static/image/common/back.gif
嗯,我用38400波特率从单片机那边接收数据,用串口线连接时(老笔记本的RS-232),使用中没有发现过问题 ...
我怀疑是软件缓冲区太小造成数据溢出导致的,建议下个版本加上类似普通的串口调试功能,比如16进制显示什么的,这样看起来也会比较方便!~ 首先感谢一下楼主的贡献,我之前调试用了Visual Scope,那叫一个不好用,出来的波形根本看不懂,今天试了一下楼主的软件,直接拷贝安装目录下的程序,出来的波形跟实际的很符合,强烈向大家推荐,使用很简单!再次感谢楼主。 很高兴这个工具能用的上{:biggrin:} 非常感谢! 第一次做这个,顶顶!! 楼主,这个软件是不是有速度的限制啊,速度太快好像没反应了 阳光天蓝色 发表于 2013-3-25 22:54 static/image/common/back.gif
楼主,这个软件是不是有速度的限制啊,速度太快好像没反应了
我自己只用过38400(8M晶体算出来这个误差小的最大的波特率了),其它速率没试过,按道理应该不会,但毕竟也没有全面测试过这个工具。
或许你可以用通用的串口调试工具试一下, 楼主能不能显示浮点型 数据的,我想显示他的浮点型 数据,整形精度会不会不那么高!!!! 本帖最后由 小皮2005 于 2013-3-28 15:16 编辑
853728579 发表于 2013-3-28 09:28 static/image/common/back.gif
楼主能不能显示浮点型 数据的,我想显示他的浮点型 数据,整形精度会不会不那么高!!!! ...
之前没有考虑过用浮点,我用MPU6050读出的数据还要除以一个数(LSB/g)才能使用,所以没涉及到精度不够的问题。
另外,这个工具也仅是显示,并不参与实际控制。如果觉得精度不够,可不可以将内部需要要显示的浮点数乘以一个系数(比如 x10),再变成整数送出来显示?
实际上,我在线调整PID参数时, 每次调整步长为0.1, 我就是将PID参数乘以10送出来显示的 果断收藏了!
很好用啊,感谢LZ!!!!!!! 感觉我这个角度跟踪的稍慢。还有一个问题,从这个波形图来看,融合出的角度黄线总要先向反方向走一段才能跟踪到正确的角度,这是什么缘故呢???新手,正在做小车车{:lol:} 什么回事啊,还要安装才能用么 楼主好强大自己都能写软件了啊{:biggrin:} 开始学习中。。。谢谢LZ 我的卡尔曼滤波效果跟您第一张图一样,您能具体说下是什么符号问题导致的延迟吗??
我检查了下,貌似没发现我的问题耶 谢谢楼主...... 呼呼,可以了,谢谢楼主的提醒,果然是符号问题....
先下载了,找了好多总会有一个合适的 标记一下,后面肯定会用到的 不错,谢谢分享。 感谢LZ提供的自编调试工具软件,同时,使我了解到LabWindows/CVI的应用.... 很高兴大家能用的上这个工具{:biggrin:} 谢谢楼主啊啊 本帖最后由 am_diy 于 2013-7-21 09:00 编辑
楼主,我用的平衡车(rantingting大侠的代码,晶振是20M,直接使用他源码中的发送给串口的函数),在用您的串口工具观察波形时,只能使用9600波特率,其它的波特率都木有显示波形,另外所显示出的波表也并不是和你贴中发的正确波形图类似!此问题和贴子中几位玩家雷同,,,不知是啥原因??急着解决的是为何波形会不一样!盼回 图片上传不了,,我发你QQ上,还请指点一下!!! 学习了,谢谢LZ 打个记号 已收藏…… 收了,留个脚印免得以后找不到,谢谢楼主分享 CVI需要安装LABVIEW软件吧? 这个工具不错!谢谢分享! lxl_lxl 发表于 2013-4-12 13:45
呼呼,可以了,谢谢楼主的提醒,果然是符号问题....
能说下是什么符号导致的吗,要怎么改啊!!感谢!! 非常感谢 标记我要做车 果断MARK 谢谢楼主分享! 顶一个{:lol:} 看上去不错的小工具,使用一下看看是否比Visualcope好 收下了,感谢楼主! shoule 谢谢分享! rantingting 发表于 2012-12-16 19:05
顶…………
同顶!!!!! 有什么问题就在阿莫搜下,会有惊喜,呵呵、 谢谢 小皮2005 。 多谢楼主、、 下载学习,谢谢楼主分享。 谢谢分享 顶顶更健康! 支持下。 支持下。。。。。 显示波形的控件用的是哪个? http://www.amobbs.com/forum.php?mod=attachment&aid=MjE4NDU0fGJjMzlmZTk4fDE0MTAwNDgzNDd8MTMyNDkwOXw1NTk0OTY1&noupdate=yes¬humb=yes楼主,你觉得我这个滤波之后波形可以站稳了吗? liguiyuan112 发表于 2014-9-7 08:13
楼主,你觉得我这个滤波之后波形可以站稳了吗?
从波形看,滤波的延时是可以接受的,具备站稳的前提。但站稳需要佷多条件,滤波只是其中一个,再就是PlD的闭环控制以及硬件上电机的特性等等 以后可能会用到
页:
[1]
2