话说试验用的电机和单片机买回来也快两个星期了,到现在才达到这个进度,真的是相当慢了。
试验过程中程序上倒没遇到什么问题,也就是for、while语句。主要还是在单片机和电机上,几乎是从头开始,以前上课压根就没好好学,又丢了这么长时间。
试验用的单片机是最简单的51单片机,80C52,一共有4个I/O口,每个口8个针脚,每个I/O口一次传输8位2进制数,每一位对应I/O口的一个针脚。电机是四相步进电机(工作方式有四拍、八拍,四拍可以简单理解为每项通电完成四分之一个工作周期,八拍即八分之一个工作周期),步进角度5.625度(一个工作周期走5.625度)。电机通过一个ULN驱动芯片与单片机的I/O口连接。
单片机的驱动程序主要是通过一个数组来驱动电机,如果是四拍工作方式,数组里需要4个数,八拍即8个数。我主要就是卡在这里。为什么呢?举例说明,{0x01,0x02,0x04,0x08},这是一个含有四个元素用16进制表示的数组,因为知识的贫乏,我始终闹不明白这个数组是通过怎样的方式来驱动电机。现在闹明白就简单了
{0x01,0x02,0x04,0x08}
写成8位二进制数就是
0000 0001
0000 0010
0000 0100
0000 1000
从右往左,每一位表示I/O口的一个针脚,而这里每一个针脚则对应电机的一相,四拍工作方式只要用到8位2进制数中4位就够了,0x01的2进制数右数第一位为1,就是第一个针脚输出高电平,第二位为0即输出低电平,依次类推,0x01作用在电机上的意思就是电机的第一相通电,电机运行四分之一周期(就是5.625度/4)。当程序读取第二个数组元素0x02时,则是电机的第二项通电,再运行四分之一周期。这样通过读取数组,就完成了对电机的控制,如果是采用八拍控制,可以精确到5.625度/8。
至此,想要实现其他控制,只要通过程序的变化就可以完成,电机控制的学习就此完结。目前计划,因电液伺服的学习才断续的开了个头,继续跟进学习,单片机学习再继续深入。 |