V
主页
烂尾平衡车稳了
发布人
好久前的平衡车了,板子打的早,一直懒,最近几天才拾起来调试。 中间踩过不少坑,分享下经验吧, 1,编译器优化是个很玄学的东西,嵌入式,硬件领域如果不是特别了解这个,如果出现玄学问题,可以试着关掉看看(cubeide默认关,ccstheia默认O2) 2,这个和编译器优化有些相似,但不完全一样,即使设置成O0(不优化),也可能造成一些问题,一些直接和硬件寄存器有关系的变量,如果出现问题,可以考虑前加volatile声明,告诉编译器不要对这个变量进行优化,否则有可能出现硬件寄存器数值已经变了,但是在程序运行的时候由于使用了先前缓存的量,导致数据还是没有变。 如果一些重要的语句实际上没有产生效果,在确定没有逻辑上的问题之后,可以从一下几个角度排查,1编译器优化相关2中断相关导致3硬件阻塞4实时性 3,实时性,我个人认为,这个对于低算力的实时控制类场景很重要,不知道各位有没有考虑到一个问题?用常见的pid控制原理举例,如果你直接将pid程序放在while1里,那么很有可能实际上它在每个单位时间里运行的次数是不确定的(如果过程调用了硬件阻塞函数等),这就会导致一个问题,在不均匀的时间片段里,你实际检测到的变化量,它为系统携带的信息很有可能会出现偏差。如果算法不能在时间间隔相对均匀的情况下运行,尤其是时间间隔相差很大的情况下,这将会对你的系统造成毁灭性打击,很有可能你调了半天的pid参数就作废了。另外,还需要考虑到硬件的实际最小刷新时间(采样率),也就是传感器刷新其读数的最短时间,如果任何你的算法在传感器读数没有变化时运行了多次,这实际上对于保持系统稳定是没有任何意义的,还有可能造成系统层面的超调。 4,举个例子,如果不加入调试函数,这台小车的pid算法可以在1秒内运行15万次左右,但是如果加入一句波特率为9600的阻塞串口发送函数(printf串口重定义,极端情况),这个算法在1秒内能够运行的次数将会下降到100次以内(实际上随着参数变化,这个次数还会在30~70左右浮动),如果你在保留/去掉这句调试函数的情况下调好了pid参数,那么相信我,在去掉/增加这句调试函数之后,不要惊讶也不要奇怪,你几乎必然得重新调参了。 实际上,在很多简单的场景下,也完全不需要高频的运行pid控制程序,而且我一定会建议你的pid程序运行频率不要超过传感器的采样率(例如mpu6050通常情况下的采样率会被设置成1000hz,如果你使用了int中断来读取,即每秒数据更新1000次,而对于编码器,一个亘古不变显而易见的道理,采样时间越长,采样结果越精确,你的采样频率越高,相应的你的p值也会越大)。正如视频所示的,这个效果仅仅需要保持pid每秒运行100次(你需要能够保证这个频率几乎不会出现变化),而参数仅仅是调试了2分钟粗略确定下来的。 (提供一个思路参考:这里仍然是放在while1内运行,但是借助定时器控制其运行频率在每秒100次) 5,最后我想说的,作为低性能嵌入式领域的入门学者,我们都必须学会更加细致,深入和仔细的思考问题,在极其有限的算力下,许多高性能场合下无需考虑或者很少考虑的问题都有可能会出现,与此同时,还应该学会从硬件角度去考虑实际上一定会发生的事和可能出现的问题,很多事都不会像预想的一样运行,这是我们不得不接受的事实。
打开封面
下载高清视频
观看高清视频
视频下载器
遥控平衡车
一个电源UI
国庆结束了
32
【32位】【古董级电脑专用】Win10LTSB2016精简版(32位)
笔记本触摸板ps2转usb驱动成功
遥控车。。。
简易2D图形库,同时支持软硬iic,软件spi
开发5分钟,验证两小时
叕重写驱动
超级拉的寻线小车
寻迹项目结束,至少曾经做过
失败的man
才发现大赛模式不算成绩于是又推了一小时ap结果iOS录屏出bug只录上了这个最后的镜头我服了不玩了。。。
机导期末5小时极限复习记录
云台姿态跟踪MPU6050
神州笔记本是有点东西的
《全网首发》有道领世平板电脑YDLST01强开ADB调试模式
杜邦仙人之平衡小车
觉醒后的32面对两大UL会如何
现在笔记本开机都这么快吗
手机版我的世界极佳光影不卡,地图桃花源,均附下载方法,封面真实(看简介)。
9个报错?但我代码只有8行?
压测稳了 边解码mp3边跑的 rtos高光时刻
神州轻薄本高负载的真实风噪(可能不准)
「虎扑讨论」王楚钦爆冷输给14岁小将,看看大家怎么说!
手机版《掘地求升》,和电脑版地图一样,封面真的,不是云电脑,有下载教程。
阶段性记录
AI终于能画手了,可为啥还是画不出汉字?
3D游戏到底是怎么做出来的?
索尼最大的危机不是《星鸣特攻》暴毙,而是主机行业不行了?【差评君】
英雄哥大厂年薪多少?如何应对35岁危机?
当你以为流氓APP透明图标已经够防不胜防...