哈尔滨理工大学综合课程设计
舵机控制器以80C51单片机为核心,该控制器中单片机可以产生8个通道的PWM信号,分别由80C51的P1.0~Pl.7端口输出。输出的8路PWM信号通过光耦隔离传送到下一级电路中。方波信号经过光耦传输后,前沿和后沿会发生畸变,因此反相器采用40106反相器对光耦传输过来的信号进行整形,产生标准的PWM方波信号。
根据经验舵机在运行过程中要从电源吸纳较大的电流,若舵机与单片机控制器共用一个电源,则舵机会对单片机产生较大的干扰。因此,舵机与单片机控制器采用两个电源供电,两者不共地,通过光耦来隔离,并且给舵机供电的电源最好采用输出功率较大的开关电源。该舵机控制器占用单片机的个SCI串口。串口用于接收上位机传送过来的控制命令,以调节每一个通道输出信号的脉冲宽度。MAX232为电平转换器,将上位机的RS232电平转换成TTL电平。
-11-
哈尔滨理工大学综合课程设计
第4章 系统软件编程与仿真
舵机的控制信号为周期20ms 的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180 度,呈线性变化。
也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。
舵机输出转角与输入信号脉冲宽度的关系如图4-1所示:
图4-1 舵机输出转角与输入信号脉冲宽度的关系
-12-
哈尔滨理工大学综合课程设计
测试编程如下(实现45°,135°的脉冲信号) #include
#define uint unsigned int #define uchar unsigned char uchar a; uint b;
sbit pw1=P0^0; sbit pw2=P0^1;
void angle(float S1_angle,float S2_angle,uint action_time ) {
uint S1_pw,S2_pw;
uchar S1_loop_num,S2_loop_num; uchar flag=0;
S1_pw=(uint)(500+100*S1_angle/9); S2_pw=(uint)(500+100*S2_angle/9);
S1_loop_num=S1_pw/20; S2_loop_num=S2_pw/20;
TR0=1;
while(!flag) { pw1=1; while(a!=S1_loop_num); pw1=0; while(!(a==126));
a=0; pw2=1; while(a!=S2_loop_num); pw2=0; while(!(a==12));
a=0; b++; if(b==action_time) { TR0=0;
-13-
哈尔滨理工大学综合课程设计
flag=1; b=0; }
} }
void main() {
P0=0x00; TMOD=0x02; TH0=236; TL0=236; EA=1; ET0=1;
angle(0,0,50); angle(45,135,50); }
void Time0()interrupt 1 {
a++; }
-14-
哈尔滨理工大学综合课程设计
图4-2 45°和135°转角时候的示波器波形
图4-2 45°和135° 波形图
-15-