回首11月,在放弃用大量原件搭建全H桥之后,迅速进入匆忙的电机驱动选择中。
飞思卡尔,瑞萨,德州仪器,意法半导体,其中TI的DRV88XX系列,飞思卡尔的YMSxx系列,意法的L29X系列,TI的封装非常小,飞思卡尔无法购买,意法半导体未达设计要求,好在万能的x宝又帮了我,弄了一款国产的的玩具电机驱动IC L9110,最低2V的供电,单通道,连续700ma的持续电流,峰值1.5A,非常适合我的设计要求。这片子导通后有0.7V压降,估计是多基极硅三极管构成的。这家伙和TI的控制方式相同,好在之前设计H桥时积累的经验,在其输入端加入了一片74HC08.两个与门共用一个输入段,作为PWM输入,另外两个端口做方向选择,这样方便程序控制,调速与方向控制不相互干扰。另外一种方案可以不用74HC08,用软件的方法解决,即在L9110一个输入端口接PWM输入,另外一个端口接IO.只需要改变PWM相位与IO状态即可实现调速与方向控制,考虑到PWM是由MSP430G2553的timer1产生,自己对这个片子不是非常熟悉,放弃了该方案。
电机驱动告一段落,接着是测速方面。
在X宝上买了某星相机镜头配件,5块一个,拆出了两个红外对管,一个码盘,这个码盘不是一点点坑,就只有三个齿,在找了些文献后果断放弃该码盘,怀着忐忑的心态又上了淘宝,万能的淘宝又帮了我一把,找了一个8个齿的码盘,一毛一个,哈哈,立即入手10个,其实8个也不够,好在精度能控制在正负±1之内,拆出来的红外对管 挺给力的,体积非常小,电路简单,只需要两个电阻就搞定,买码盘的时候顺便买了十来个红外对管,图片上看比较小,卖家也给了尺寸表,可我没有大小的立体感,买回来比相机上拆下来的体积大了一圈,不太贵,就没有退货,留着以后用吧。
电源只设计了充电电路,充电电路参考了圆点博士的小四轴,还是用国产的芯片,TI的没敢用,担心后期不好购买,不得不说国产在某方面是非常实用的。
至此平衡小车的硬件部分全部完成,进入软件设计。
只是因为TI的一句“让工程师专注与算法实现,而不是使用单片机”,用了TI的一个新软件Grace,全英文界面,网上有简单的使用方法,照猫画虎后还是不会用,就一个接一个的翻译,在经历多次失败后终于顺利使用上该软件,国际大厂就是有远见,对于我这种学生党,基础差,无经验,Grace就是万能钥匙,需要什么功能,勾勾选选就可实现,比较坑的是不知道如何在生成的代码中添加自己的代码,只好复制出来,粘贴到IAR中编译。通过Grace的帮助,很快对MSP430G2553的硬件有了了解,便开始编写测速的代码。
由于暑假写过一次T法测速,当时没有上位机支持,只能将测得的结果和示波器进行比较,无法得到精确度,算是一次失败的尝试,当时的电机转速输出脉冲频率比较高,测速码盘100个齿,又是直接接在电机上的,用T法是错误的选择,稍次的方式是用M法,并且测速精度比较高,就算误差在±10以内,那相对与电机只转过3.6°,精度是比较高的。平衡小车的硬件决定本次使用T法比较合适,工作时输出频率在200HZ~3KHZ之间,可是MSP430G2553的封装有20脚与28脚两种,20脚的timer0与timer1不能同时使用,由于引脚共用的原因,如果timer1用于产生两路PWM信号,那么timer0只能使用一半的功能,另外一半由于没有引脚可用导致无法使用。我手上有这两种片子,SOP封装,TI的东西大家都知道,封装小是其普遍特点,所以没办法手工制板。因此只能放弃T法测速,在最终制板的时候使用28脚的封装。M法测速由遇到了难点,测速周期是多少,在多长时间内测脉冲个数?试探性的将测速时间定为50ms,效果还不错,可测速时间过长,影响系统的实时性,逐渐缩短测速时间,最终定在10ms,速度输出范围在0~30之间,符合小车需求。
完成了测速,进入MPU6050传感器的通信方面。
比较懒吧,百度了下,果然找到驱动程序,简单修改了下就可使用,输出角度输出范围在-6000~6000之间,陀螺仪的输出未测。
再是电机控制,PID对我来说是一片空白,也想会使用PID,在看了很多资料之后对PID有了简单的认识,如果系统输入与设定值之间差值过大,P将产生快速反应,提高系统灵敏度,可是存在一个问题是无法达到设定值,那么I将起到作用,I对未达到设定值之前的所有误差产生作用,又存在一个问题是很长时间才能达到设定值,那么D将起到作用,D对前后两次误差的变化率起到作用,变化率越大,D的作用就月明显,故可快速达到设定值。
在调节PID参数的时候犯了一个错误,就是用手阻止电机旋转,即外界干扰不稳定,导致速度输出周期性变化。还有是PID各个参数类型的定义,累计误差开始使用了INT类型,计数范围比较小,频繁溢出,溢出后PID计算结果立即变成负最大,导致电机立即反向高速旋转,将INT改为LONG后改善了这个问题,但又存在如果电机抱死一段时间后,恢复电机自由,电机在一段时间内高速旋转,等待后才达到稳定,至今未解,由于实际不会存在这种问题,故跳过,留作以后研究。
电机控制搞定,传感器搞定,进行最后的工程整合。
在初期的时候,各个模块工作的非常和谐,可是不知道更改了那里,系统上电后,串口只能输出一段时间,一段时间后就不在输出,其他模块正常工作,分析问题,系统中存在三个中断,测速用的IO口中断,MPU6050的IIC中断,还有就是串口发送完成中断,IO口中断影响串口的几率比较小,IO中断频率较低,那么就是IIC中断,可是,IIC中断不能禁止,问题未解。
这是一个小问题,更严重的问题是我自己的问题,长时间的无解,开始烦躁,仿佛整个世界都是灰暗的,因此提醒到自己,生活中不能只有单片机,还必须有别的东西,**蛋不能放在一个篮子中。
写到这里没有什么可以在写下去的了,仅希望大神们能给我一些指点,让我突破这侧障碍。谢谢。 |