我老婆昨天晚上我可能死了吃了十几颗减肥胶囊。请问会

  我的红外遥控双轮平衡小车程序初步完整STM32F103ZET6主控,整个LCD显示MPU6050数据读取,角度计算卡尔曼滤波,PID算法PWM输出,红外遥控都已完成,还剩下最后PID的几个具体参数的调试叻这个需要等我的硬件部分完成之后开始,下面附上我初步的工程程序的链接已经编译OK了的。

后面会继续更新包括硬件部分。

最近茬硬件调试时电路哥哥模块都链接好之后,接上12V驱动电机的电源之后把我的STM32的板子给烧了,具体原因还在找估计得加上光耦隔离。需要做好足够的保护措施才是确实我的STM32在连接那个L298N的驱动时候就遇到了显示的问题,开始没太在意最后给L298N接上12V的时候,整个就烧了雖然没有和STM32直接相连。最开始接上6V(给L298N芯片供电的理论上应该是5V)时,TFT显示等等都是没有问题的然后给编码器接上电池(3.7V的,3V到5V的都可鉯)接着给L298N接上12V的,然后TFT屏就白了不能显示东西了,但这个时候烧录程序什么的都是可以进行的而且,烧录我原来的程序也就是沒有驱动电机的,而只是单纯地显示MPU6050参数的程序是可以正常运行的而且TFT是可以正常显示的,烧录进后面完整的通过定时中断方式输出PWM的程序时屏幕就无法显示了,我后来认为是那个编码器的电源没有与单片机共地然后我引了一条线与单片机共地,再接上12V电源再给单爿机供电时,发现板子上没有任何反应了并且发现UART模块发热很严重,一插上板子那上面的灯就不亮了,板子上的灯根本没有反应了通过其他端口供电也米有反应,果然是电源端与地段短路了通过万用表也测出来了,但无法找出是哪里发生短路了估计是哪里被击穿叻吧。后来我看了下这个板子的系统电路图他们的电源端和地端之间都是接有电容的,我想很可能是某个电容被击穿了导致短路。电機启动瞬间会产生尖峰脉冲会对控制器产生影响

复制他人(如图为L298组成的电机控制,MCU是STM32F103RBT6电源12V,经过LM2676转换5V供给板上5V的芯片5V经过LM1117输出3.3V给STM32,电机运行的情况下将产生50V的反向电动势这个电动势将在续流二极管SK24的作用下回馈到电源VIN消耗掉,也就是这样会抬高输入的12V电压假使這个50V的反压会通过LM2676到达+5V电压,在L298的+5V端通过L298的IO作用到STM32的IO

第一个问题,看到STM32的IO说明图里面有保护二极管这个保护二极管是内部带的吗?这個二极管吧高压回馈到STM32的电源会不会烧芯片,手册上的“VDD_FT 对5 伏兼容I/O 脚是特殊的”VDD_FT是如何连接的,什么原理能使他兼容5V输入。是不是兼容5V就去掉了内部的上拉保护二极管它与VDD ?同手册所说的ESD保护2000V是否能保护我现在这种情况的发生。第二个问题我现在L298用的5V逻辑电压,STM32鼡的3.3V这种情况下STM32做输出会产生什么不好的因素,如何避免设置为OD吗?经过试验现在很快烧毁了两片103RBT6,实在是无法也不太敢在原来电蕗基础上做实验望各位多多指教,)

解决任何问题必须下定决心一定要一定要!!!不然拖拖拉拉!

我认为编码器与单片机是需要共哋的,需要参考定位点宽且编码器的电源并不是导致TM32烧掉的原因,罪魁祸首应当还是那个12V电源!

不然你编码器返回的脉冲和你单片机参栲电平不一致
这样单片机就不能得到有效的电平信息
所有的类似的需要两个系统之间通讯的在使用一套电源的前提下都是需要共地

STM32的IO口昰要先进行时钟定义然后初始化的。

在我对IO口初始化后再在main函数中写入PWM_INT()之后,我的车子受PWM轮子可以转了


终于进入最后的PID参数的调节。
此时的小车程序代码如下当然我还没有接上红外遥控模块,但PWM可以正常输出控制电机了

平衡小车matlab建模:


建模、控制算法及PD调节的取值參考:

matlab(matlab需要2008版,旧的6.5版打不开)里打开NXT.mdl输入NXT.m.txt内容回车,K_f的四个值就是所需的PD调节比例;详细参考NXT的文档;

 1:新布置的因为修改了一些不合理的地方,和我使用的不一样主控制板上RS232硬件部分还未调试过,所以使用时需要注意;
 2:可调电位器用来调试修改PD参数;
 3:另外幾个接口可以用来改成遥控输入比例遥控可以用AD采样口实现,但需要增加滤波;
 4:车轮速度我进行了低通滤波否则可能会发抖;

 1:同樣重新修订,PCB最好自己优化并检查;
 2:马达控制板最好是使用IR2184因为直接兼容5V电平,IR2111需要使用12V输入我直接在单片机输出口接12V上拉电阻,吔可以使用但不推荐;
上位机只是简单的查看滤波效果和车速是否正确取得,VB编写的大家可做完善;

辛苦了大概两个多月,之前一直嘟调不好中间也遇到了很多的问题,但当问题解决后每次都是重大的突破现在就介绍一下,制作过程中遇到的问题                1、关于加速度计嘚转换系数  把从加速度计读出来的数据转换成角度,要乘以一个比例系数在转换成角度角度的过程中,可以完全不用三角函数(因为车嘚倾角其实不会超过正负10度后面会提到),直接把(最大值-最小值)/90(/2如果有正负的话)作为比例系数就可以了(这样可以和真实角度仳较)其实理论上这个比例系数是什么都可以,因为后面陀螺仪转换系数是根据加速度计的转换比例系数跳出来的所以加速度计的比唎系数无论是什么值都没有影响。             陀螺仪的转换系数需要根据滤波的波形来调(我是在飞思卡尔公布的官方方案中看到的经实践千真万確),陀螺仪的转换系数不用去算只需要通过看波形去调就可以了,直到不超调也不滞后就可以了具体的可以看附件官网方案中的93页(第二版)。  互补滤波:这是很简单也很实用的方法其实和官网的方案有一点类似的地方,在网上有一个很著名的20页的PPT文件The Balance Filter介绍的是互补滤波,相信大家看了之后都会明白的在文件中,作者把高通滤波系数a和时间常数T(涛不知道怎么打出来)及采样周期dt用一个公式建立了联系,而我的经验是我们不要用这个公式去计算。高通滤波系数取0.98(不能比0.98再小了会不平滑),采样周期根据你程序的需要是哆少就多少(5ms的效果会比10ms好很多越小越好),滤波可以通过调陀螺仪的转换系数达到很好的效果也就是说,用互补滤波的关键调试参數是陀螺仪转换系数把加速度计转换系数、高通滤波系数和采样周期定好之后,只需要调试陀螺仪转换系数就可以达到满意的效果了  官網滤波方案:我总觉得官网的和互补滤波有些相似经实验,效果也是很好的具体的公式在参考方案里面也有。调试的关键就是陀螺仪轉换系数                卡尔曼滤波:一直没用过,也不会用主要是没弄懂。我不喜欢用一知半解的东西因为出现问题的时候排查不出来或者不知噵怎么解决问题。网上也有很多卡尔曼滤波的程序因为一直看不懂,就连试也没试如果会用的话,效果应该是好的但我不会用。如果有谁用兴趣的话还请多多指教互相交流一下。        这样的话就要把P调的很大具体是多大呢,至少是电机满值的十分之一(五分之一甚至彡分之一都是没问题的)例如电机最大输出是1的话,P取0.1、0.2、0.3都是没问题的(官网的方案好像是取的0.3)如果点击最大输出是5000的话,那么P取500、1000、1500都是可以的(当然前提是加速度计转换系数转换出来的角度值和真实值相当,否则另当别论)所以车模的角度应该不会超过正負十度,因为当P=0.3的时候车模有三度多的偏差时电机就满电压输出了。我之前就是一直用一个很小的P去调原来所有的问题就在于把P调大僦可以了。  至于D的话大概在P的七十分之一或八十分之一之间都是可以有很好的效果的。这个关系就和加速度转换系数没有关系了比如官网中P=0.3则D=0.3*1/75=0.004,在我这里P=1000则D==13.3,效果都是很好的PS:这个关系只是在车模静止平衡时的关系,行进中的关系我还没有实验过    

总结得也是相当箌位的,现在才渐渐看懂

现在才渐渐意识到核心不是PID的调节了,是滤波还有转换系数等等

下面一张截图是我目前小车调到最好时的滤波,可以明显感受到滤波前和滤波后的不一样也深深地感受到滤波信号处理的厉害与重要。

这个波形的显示的扯个串口调试助手还是用屾外的好那个SSCOM32以后建议不用了,直接用这个功能非常强大,支持自动搜索串口等等包括发送字符也支持16进制的显示。完爆SSCOM32,也谢谢学長的推荐我也附上合格山外串口调试助手的下载链接,里面有使用说明文档


经过串口调试显示波形再调试参数等等,现在车子可以达箌稳定十几秒最高纪录42秒了(连续几十个小时彻夜的参数调试),下面附上目前调的最好的一组参数的程序至少可以让小车保持基本(十几秒几十秒)的平衡,当然我最终目标是永久的平衡下面是程序链接:

附上我小车的图片吧(硬件上已经完成的)


本来是想自己把串口引出来,后来才发现那个手机数据线插口下载程序的就是串口可以共用哈哈。


我觉得我之后要好好研究下滤波了对于这个小车,還远没有结束只是开始,我要它像那天晚上我见到的四轴飞行器一样平稳!我觉得滤波是关键中的关键!

我要回帖

更多关于 昨天晚上我可能死了 的文章

 

随机推荐