工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

多路伺服电机控制器

作者:dolphin时间:2016-09-12

利用单片机控制伺服电机,可以使用集成了带有PWM功能定时/计数器。但这种方式有它固有的诸多缺点,在需要控制的伺服电机比较多,运动关系复杂的情况下,这种方式是不适用的。本系统利用了ATmega16单片机内部集成的定时/计数器,以及非易失性存储介质EEPROM和UART接口设计了多路伺服电机控制器。

控制器用串口与上位机电脑进行通信,通过电脑的串口调试软件发出指令,选择实时在线调试,批量发送动作指令并存储在单片机的EEPROM中,或单片机按照指令自动控制各路伺服电机运动。

系统选用ATmega16单片机的一个8位计数器Timer0和一个16位计数器Timer1协调工作,利用单片机的I/O接口产生出可以控制单片机的PWM信号。各伺服电机可以协调地运动。这种控制方法使得单片机有多少空余的I/0口,就能控制多少路伺服电机。控制电机的数量根据具体应用而定,其余的I/O接口可以用来连接传感器等器件,利于功能扩展。

硬件设计

电路主要包括电源、单片机最小系统、伺服电机接口、RS-232接口电路、其他器件接口等几个部分,见图。

系统采用两种电源模式:一种是伺服电机和单片机共用同一个电源。由于AVR系列单片机抗干扰能力强,功耗小,在伺服电机数量比较少的情况下,可以使用这种方式。另一种方式是伺服电机和单片机采用独立电源,分别由各自的电源系统供电。两种方式通过跳线选择。系统输入电压为6V,单片机的电源采用LM1117低压差稳压器获取5V电压。

ATmega16单片机有一路串口可以与外界通信。系统采用MAX232芯片将单片机的TTL电平转换为-10V~15V的RS-232电平。

最小系统包括单片机复位电路、时钟电路,以及在系统编程(ISP)接口。系统使用8MHz石英晶体作为外部时钟源。

软件部分由主程序、定时/计数器和I/O接口控制部分以及串口通信部分组成。采用C语言编写程序,流程图见图。程序在EEPROM中开辟一个30×16的二维数组,用来存放自动运行时,各伺服电机运动的相应值。各值存放在数组的第二维,可存放的动作序列有30组。


主程序主要完成单片机片上硬件的初始化以及应用控制程序部分。系统初始化内容包括:用于控制伺服电机的I/O接口设置为输出,低电平;其他I/0口设为输入。Timer0和Timer1使能,Timer0使用主系统时钟8分频,Tiner1使用主系统时钟不分频,定时器同I/O口不相连,溢出中断。UART接口使能,接收中断。

主程序还完成读取串口的值,确定用户需要实时调试还是批量输入指令,还是自动运行,并执行相应程序。 TimerO和,Timer1交替使用,在使用一个计数器时关闭另一个计数器。由于TimerO的时钟频率高,计数值小,因此,Timer0首先溢出中断。在中断中关闭,Tiner1,把代表各电机位置的变量值与一个用于控制各I/O接口电平时间的变量比较。如果超过它,就将该口电平设为低电平,否则为高电平。然后将这一用于比较的变量自加1。重新设置Timer0计数初值。这样Timer0就不断地中断,不断把代表各电机位置的变量同用于比较的变量比较,使各控制端口高电平时间根据需要在0.5ms~2.5ms之间,直到所有接口高电平时间都结束,禁能Timer0,使能Tliner1。利用Timer1控制低电平时间,使得方波周期为18ms~20ms。

自动状态下,系统按照EEPROM中存放的指令控制伺服电机运动。实时调试指令模式下,程序把串口读到的16个数据分别赋给代表伺服电机位置的16个变量,定时器会自动产生相应的控制信号。如果需要存放指令,只需要把串口读到的数据分别赋给在EEPROM中开辟二维数组的第二维。如果指令更多,可以采用外部扩展EEPROM的方法进行存储空间扩展。

总结

通过测试,该系统性能可靠。系统采用单片机两个定时器联合工作的方法,利用中断程序,产生了多路伺服电机控制信号。与一般所采用的直接使用定时器PWM功能的方法相比,本系统可控制电机路数多,控制简单,通过设置各变量的值就可以控制伺服电机运动到相应位置。



评论

技术专区