1
电子说
产品尺寸40.7*19.7*42.9mm
产品重量55g
工作扭矩13KG/cm
反应转速:53-62R/M
使用温度:-30~+60°
死区设定:4微秒
插头类型:JR、FUTABA通用
转动角度:最大180度
舵机类型:模拟舵机
工作电流:100mA
使用电压:3-7.2V
结构材质:金属铜齿、空心杯电机、双滚珠轴承无负载
操作速度:0.17秒/60度(4.8V);0.13秒/60度(6.0V)
附件包含:舵盘、线长30CM、固定螺钉、减振胶套及铝套等附件
适用范围:1:10和1:8平跑车、越野车、卡车、大脚车、攀爬车、双足机器人、机械手、遥控船,适合50级-90级甲醇固定翼飞机以及26cc-50cc汽油固定翼飞机等模型。
舵机上有三根线,分别为VCC、GND、信号线。控制信号一般要求周期为20ms的PWM信号。VCC、GND需要另外接驱动给舵机供电,而且得和开发板共地。
中间的永远是电源正极。
舵机的控制一般需要一个20ms的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度舵机为例,那么对应的控制关系是这样的:
0.5ms————–0度;
1.0ms————45度;
1.5ms————90度;
2.0ms———–135度;
2.5ms———–180度;
#include “hw_memmap.h”
#include “hw_types.h”
#include “sysctl.h”
#include “gpio.h”
#include “pwm.h”
#include “hw_ints.h”
#include “delay.h”
#define PH0_PWM2 GPIO_PIN_0
#define PH1_PWM3 GPIO_PIN_1
#define LED GPIO_PIN_6
unsigned int jiaodu[]={12000,16000,12000,8000};
unsigned int jiaodu1[]={12000,20000,12000,4000};
//unsigned int jiaodu1[]={148000,140000,148000,156000};
void H_T();
void Q_J();
/*********************************************************************************************************
** Function name: main()
** Descriptions: 主函数
** input parameters: NONE
** output parameters: NONE
** Returned value: NONE
*********************************************************************************************************/
int main (void)
{
SysCtlClockSet(SYSCTL_SYSDIV_1 | /* 配置6MHz外部晶振作为主时钟 */
SYSCTL_USE_OSC |
SYSCTL_OSC_MAIN |
SYSCTL_XTAL_8MHZ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH|SYSCTL_PERIPH_GPIOC); /* 使能PWM2和PWM3输出所在GPIO */
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM); /* 使能PWM模块 */
SysCtlPWMClockSet(SYSCTL_PWMDIV_1); /* PWM时钟配置:不分频 */
GPIOPinTypePWM(GPIO_PORTH_BASE, GPIO_PIN_0); /* PH0配置为PWM功能 */
GPIOPinTypePWM(GPIO_PORTH_BASE, GPIO_PIN_1); /* PH1配置为PWM功能 */
PWMGenConfigure(PWM_BASE, PWM_GEN_1, /* 配置PWM发生器1:加减计数 */
PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);
PWMGenPeriodSet(PWM_BASE, PWM_GEN_1, 160000); /* 设置PWM发生器1的周期 */
PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, jiaodu[0]); /* 设置PWM2输出的脉冲宽度 */
PWMPulseWidthSet(PWM_BASE, PWM_OUT_3, jiaodu[0]); /* 设置PWM3输出的脉冲宽度 */
// PWMSyncUpdate(PWM_BASE,PWM_GEN_1_BIT);
PWMOutputState(PWM_BASE, (PWM_OUT_2_BIT | PWM_OUT_3_BIT), true); /* 使能PWM2和PWM3的输出 */
PWMGenEnable(PWM_BASE, PWM_GEN_1); /* 使能PWM发生器1, */
GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE,LED);
GPIOPinWrite(GPIO_PORTC_BASE,LED,0XFF);
/* 开始产生PWM方波 */
// PWMGenIntTrigEnable(PWM_BASE,PWM_GEN_1,PWM_INT_CNT_ZERO);
// PWMIntEnable(PWM_BASE,PWM_INT_GEN_1);
// IntEnable(INT_PWM1);
// IntMasterEnable();
while(1)
{
Q_J();
H_T();
}
}
void PWM_Generator_1_ISR (void)
{
const unsigned long ulTab[10] ={156000,148000,140000};
static unsigned long n = 0;
PWMGenIntClear(PWM_BASE,
PWM_GEN_1,
PWM_INT_CNT_ZERO);
PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, ulTab[n]); /* 设置PWM2输出的周期 */
PWMPulseWidthSet(PWM_BASE, PWM_OUT_3, ulTab[2-n]); /* 设置PWM3输出的周期 */
GPIOPinWrite(GPIO_PORTC_BASE,LED,0);
n++;
if ( n 》= 3 ) {
n = 0;
}
}
void Q_J()
{
unsigned char i=1,j=1;
PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, jiaodu[i++]); /* 设置PWM2输出的周期 */
//PWMPulseWidthSet(PWM_BASE, PWM_OUT_3, jiaodu); /* 设置PWM3输出的周期 */
GPIOPinWrite(GPIO_PORTC_BASE,LED,0);
delay_ms(220);
PWMPulseWidthSet(PWM_BASE,PWM_OUT_3,jiaodu1[j++]);
GPIOPinWrite(GPIO_PORTC_BASE,LED,0XFF);
delay_ms(220);
PWMPulseWidthSet(PWM_BASE,PWM_OUT_2,jiaodu);
delay_ms(230);
}
void H_T()
{
unsigned char i=1,j=2;
PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, jiaodu[i++]); /* 设置PWM2输出的周期 */
//PWMPulseWidthSet(PWM_BASE, PWM_OUT_3, jiaodu); /* 设置PWM3输出的周期 */
GPIOPinWrite(GPIO_PORTC_BASE,LED,0);
delay_ms(220);
PWMPulseWidthSet(PWM_BASE,PWM_OUT_3,jiaodu1[j++]);
GPIOPinWrite(GPIO_PORTC_BASE,LED,0XFF);
delay_ms(220);
PWMPulseWidthSet(PWM_BASE,PWM_OUT_2,jiaodu);
delay_ms(230);
}
}
全部0条评论
快来发表一下你的评论吧 !