TA的每日心情 | 难过 2018-9-25 15:55 |
---|
签到天数: 16 天 连续签到: 1 天 [LV.4]偶尔看看III
|
本帖最后由 叫我小杜可好 于 2016-8-20 19:34 编辑
原理
控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;
代码 - `timescale 1ns / 1ps
- //////////////////////////////////////////////////////////////////////////////////
- // Company: UJS
- // Engineer: Doby
- //
- // Create Date: 14:07:42 08/20/2016
- // Design Name: SMG
- // Module Name: SMG
- // Project Name: SMG
- // Target Devices: ?EP4CE10F17C8
- // Tool versions:
- // Description:
- //
- // Dependencies:
- //
- // Revision:
- // Revision 0.01 - File Created
- // Additional Comments:
- //
- //////////////////////////////////////////////////////////////////////////////////
- module servo_one(
- input wire sclk,
- input wire rst,
- // input wire[7:0] angle_one,
- // input wire[2:0] Option_Key,
- output wire servo_one_pwm
- );
-
- reg [19:0]System_Seg;//产生 20ms的方波
-
- always @ ( posedge sclk or negedge rst )
- if( !rst )
- System_Seg <= 20'd0;
- else if( System_Seg == 20'd999999 )
- System_Seg <= 8'd0;
- else
- System_Seg <= System_Seg + 1'b1;
-
- //------控制舵机来回转动-------------------
- wire[19:0]Option_Seg;
- reg[7:0] data;
- reg[24:0] cnt;
- reg plus;
- always@(posedge sclk or negedge rst)
- if(!rst)
- data<=8'b0;
- else if(cnt==25'd250000)
- begin
- if(plus)
- data<=data+8'b1;
- else
- data<=data-8'b1;
- end
-
- always@(posedge sclk or negedge rst)
- if(!rst)
- plus<=1'b1;
- else if(data==8'b0)
- plus<=1'b1;
- else if(data==8'd150)
- plus<=1'b0;
-
- always@(posedge sclk or negedge rst)
- if(!rst)
- cnt<=25'd0;
- else if(cnt==25'd250000)
- cnt<=25'd0;
- else
- cnt<=cnt+1'b1;
- //----------------------对舵机的初始角度和转动的步进进行调整
- assign Option_Seg=19'd30000+data*340;
- //---------------------产生20MS的PWM波
- assign servo_one_pwm = ( System_Seg < Option_Seg ) ? 1'b1 : 1'b0;
-
-
-
- endmodule
复制代码效果
机械手
|
|