由于项目需要,老大叫我这几天用STC12C5616AD这个增强型51单片机来调试舵机。 1、第一天: 我直接看了官方datasheet后就做了个最小系统,把所有引脚都引出来了,就开始写程序。期间发生一个小波折,我把复位引脚按照以前做单片机系统的习惯,直接接电容到地,然后接上拉电阻到电源;后来发现程序下不进去,确定串口没问题后,检查原理图。好几分钟后,发现这款单片机的复位引脚居然是高电平复位的!好吧,我错啦。把电阻电容位置调换后,单片机正常了。由于好久没写程序了,特别是51的,有些陌生。于是,硬是用了一天,初步把程序写出来了,能够产生PWM波,并且占空比是可调的。虽然用了一天,但是,感觉还是不错的。 2、第二天 初步了解了舵机的控制原理:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。 也就是说控制舵机转动0度到180度,只需给2.5%~12.5% 的占空比的PWM波即可。由于单片机内部有PWM模块,所以很方便地设置寄存器就可以改变占空比。程序下到单片机后,舵机动起来了。但是很疑惑的是它并没有按照我设定的角度去转动,是胡乱转动的。我首先检查程序有没有问题,用一个多小时重现审阅资料和程序,还是没发现程序有什么不妥。然后检查硬件,一个单纯的最小系统,没有问题。然后我突然看到资料上说IO口用作强推挽输出时要加个限流电阻,因为整个单片机芯片全部电流不得超过55mA,范围在1k~10k之间。于是我急着解决问题,想都没想就加了个10k的电阻。重新上电,舵机还是存在问题。断开舵机,用示波器观测输出波形,波形是对的,完完全全就是要求的占空比的PWM波。我很不明白。我都按控制原理去写出要求的波形了,为什么舵机还是不受控制?最终纠结了一天。。 3、第三天 我上网查阅资料,希望可以找到类似的问题,遗憾的是,并没有找到。没办法,我只能继续寻找。一上午未果,我只好把超声波的程序给写了,很顺利,马上就出来结果了。下午,我请旁边同学帮我分析,他用CPLD控制舵机是没有问题的。他首先一行行地检查我程序,然后没找出问题;用示波器观测,波形是对的。但是,他发现舵机转动的时候,波形出现了严重的干扰,接着,单片机奇怪地复位了。这不是正常现象。一看我的供电(我用直流稳压电流给单片机和舵机供电),就意识到,应该是供电的问题。他说,舵机运动产生的噪声蛮大,必须做好电容滤波和单独供电的工作。我释然! 4、第四天 上午,老大画的板子到了,然后我跟他说,舵机和单片机必须单独供电,尽可能地降低来自舵机的噪声。他说,你怎么不早说,我板子都打样回来了。。。是的,又是我的错,我应该早点检查出问题所在的。老大又问:能不能加个电容解决这问题?我当时就固执地认为必须单独供电才可减小干扰,所以就口快的回答“不行”,老大问我试过没,我说没有。然后他就批评我了,“没有试过你就回答我说不行,什么样的态度啊”。。。我当时那个傻啊。。。接着,老大加上了一个100uF电解电容,问题依旧。然后再加上一个大电容、一个电感和一个小容量独石电容后,问题解决了。 是的,之前我还以为必须改变板子,单独供电才行。然而,老大用事实告诉我,什么事情要真正验证过方可下结论,切勿浮躁!
|