完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
我的红外遥控双轮平衡小车程序初步完整,STM32F103ZET6主控,整个LCD显示,MPU6050数据读取,角度计算,卡尔曼滤波,PID算法,PWM输出,红外遥控,都已完成,还剩下最后PID的几个具体参数的调试了,这个需要等我的硬件部分完成之后开始,下面附上我初步的工程程序的链接,已经编译OK了的。 http://pan.baidu.com/s/1dD2I4zZ,
后面会继续更新。包括硬件部分。 最近在硬件调试时,电路各个模块都链接好之后,接上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,实在是无法也不太敢在原来电路基础上做实验,望各位多多指教,) http://bbs.eeworld.com.cn/thread-249976-1-1.html http://www.amobbs.com/thread-5495321-1-1.html http://bbs.21ic.com/icview-583546-1-1.html 解决任何问题必须下定决心,一定要一定要!!!不然拖拖拉拉! 我认为编码器与单片机是需要共地的,需要参考定位点,宽且编码器的电源并不是导致TM32烧掉的原因,罪魁祸首应当还是那个12V电源! 给平衡小车编码器供电时需要跟单片机共地么 肯定需要共地的。 不然你编码器返回的脉冲和你单片机参考电平不一致 这样单片机就不能得到有效的电平信息 所有的类似的需要两个系统之间通讯的,在使用一套电源的前提下都是需要共地 STM32的IO口是要先进行时钟定义然后初始化的。 在我对IO口初始化后,再在main函数中写入PWM_INT()之后,我的车子受PWM轮子可以转了。 终于进入最后的PID参数的调节。 此时的小车程序代码如下,当然我还没有接上红外遥控模块,但PWM可以正常输出控制电机了。http://pan.baidu.com/s/1pJuqIz5 平衡小车matlab建模: 建模、控制算法及PD调节的取值参考: http://www.mathworks.com/matlabcentral/fileexchange/19147-nxtway-gs-self-balancing-two-wheeled-robot-controller-design 硬件及软件参考如下网站资料; http://www.circuitcellar.com/avr2006/winners/de/at3329.htm http://tlb.org/scooter.html http://www.geology.smu.edu/~dpa-www/robo/nbot/ 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编写的,大家可做完善; zl 2010.06.16 辛苦了大概两个多月,之前一直都调不好。中间也遇到了很多的问题,但当问题解决后每次都是重大的突破。现在就介绍一下,制作过程中遇到的问题。 1、关于加速度计的转换系数 要制作自平衡车,角度和角速度的计算就很重要。关于加速度计和陀螺仪的使用就不多说了,他们一个用来测加速度计,一个用来测角速度。 把从加速度计读出来的数据转换成角度,要乘以一个比例系数。在转换成角度角度的过程中,可以完全不用三角函数(因为车的倾角其实不会超过正负10度,后面会提到),直接把(最大值-最小值)/90(/2如果有正负的话)作为比例系数就可以了(这样可以和真实角度比较)。其实理论上这个比例系数是什么都可以,因为后面陀螺仪转换系数是根据加速度计的转换比例系数跳出来的,所以加速度计的比例系数无论是什么值都没有影响。 2、关于陀螺仪转换系数 陀螺仪的转换系数需要根据滤波的波形来调(我是在飞思卡尔公布的官方方案中看到的,经实践千真万确),陀螺仪的转换系数不用去算,只需要通过看波形去调就可以了,直到不超调也不滞后就可以了,具体的可以看附件官网方案中的93页(第二版)。 3、关于滤波 角度滤波有很多方案,我所知道的是互补滤波、官网的方案和卡尔曼滤波,我的感想是什么滤波都不重要,重要的是参数要调好。 互补滤波:这是很简单也很实用的方法,其实和官网的方案有一点类似的地方,在网上有一个很著名的20页的PPT文件The Balance Filter,介绍的是互补滤波,相信大家看了之后都会明白的。在文件中,作者把高通滤波系数a和时间常数T(涛,不知道怎么打出来)及采样周期dt用一个公式建立了联系,而我的经验是,我们不要用这个公式去计算。高通滤波系数取0.98(不能比0.98再小了,会不平滑),采样周期根据你程序的需要是多少就多少(5ms的效果会比10ms好很多,越小越好),滤波可以通过调陀螺仪的转换系数达到很好的效果。也就是说,用互补滤波的关键调试参数是陀螺仪转换系数,把加速度计转换系数、高通滤波系数和采样周期定好之后,只需要调试陀螺仪转换系数就可以达到满意的效果了 PS:互补滤波的效果一定不差,我看过网上用互补滤波和单纯的P控制达到很好的效果的。 官网滤波方案:我总觉得官网的和互补滤波有些相似,经实验,效果也是很好的。具体的公式在参考方案里面也有。调试的关键就是陀螺仪转换系数。 卡尔曼滤波:一直没用过,也不会用,主要是没弄懂。我不喜欢用一知半解的东西,因为出现问题的时候排查不出来或者不知道怎么解决问题。网上也有很多卡尔曼滤波的程序,因为一直看不懂,就连试也没试。如果会用的话,效果应该是好的,但我不会用。如果有谁用兴趣的话还请多多指教,互相交流一下。 4、关于控制 当然有再好的角度和角速度控制不好的话也是站不好的。控制就用一般的PID控制,PWM=P*角度+D*角速度,这里没用积分控制,效果已经很好了。 在官网的方案中,还加上了死区电压,我的最大的体会就是,这个死区电压是可以不要的,而且不要更好(或者去一个小一点的值)。 这样的话就要把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=1000*1/75=13.3,效果都是很好的。PS:这个关系只是在车模静止平衡时的关系,行进中的关系我还没有实验过。 5、说明 (1)陀螺仪的过冲是一个严重问题,高通滤波的那个电容是不可取的,要把它去掉才好。 (2)每一步都是关键,要真正理解原理才会知道怎么调。 (3)资料不知道怎么上传,他总是说附件超过大小了,有需要的可以留言 下一步打算把速度控制加上,谁有好的又不是很贵的编码器可以推荐下,谢谢! http://www.amobbs.com/forum.php?mod=viewthread&tid=5464211 总结得也是相当到位的,现在才渐渐看懂。 现在才渐渐意识到核心不是PID的调节了,是滤波还有转换系数等等。 下面一张截图是我目前小车调到最好时的滤波,可以明显感受到滤波前和滤波后的不一样,也深深地感受到滤波信号处理的厉害与重要。 这个波形的显示的扯个串口调试助手还是用山外的好,那个SSCOM32以后建议不用了,直接用这个,功能非常强大,支持自动搜索串口等等,包括发送字符也支持16进制的显示。完爆SSCOM32,也谢谢学长的推荐,我也附上合格山外串口调试助手的下载链接,里面有使用说明文档。http://pan.baidu.com/s/1i3AItQt 经过串口调试显示波形再调试参数等等,现在车子可以达到稳定十几秒最高纪录42秒了。(连续几十个小时彻夜的参数调试),下面附上目前调的最好的一组参数的程序,至少可以让小车保持基本(十几秒几十秒)的平衡,当然我最终目标是永久的平衡。下面是程序链接:http://pan.baidu.com/s/1i38a27V 附上我小车的图片吧(硬件上已经完成的) 本来是想自己把串口引出来,后来才发现那个手机数据线插口下载程序的就是串口,可以共用哈哈。 我觉得我之后要好好研究下滤波了,对于这个小车,还远没有结束,只是开始,我要它像那天晚上我见到的四轴飞行器一样平稳!我觉得滤波是关键中的关键! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1754 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1613 浏览 1 评论
1053 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1667 浏览 2 评论
1931浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
716浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
562浏览 3评论
587浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
546浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 13:10 , Processed in 0.755050 second(s), Total 74, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号