admin 管理员组文章数量: 887006
msp430f5529标准库学习之SG90舵机使用
SG90舵机一般分为180度和360度,他们的控制方法虽然有些不一样,但是实质也是控制pwm占空比来控制转向。
一般蓝色的是180度,另一个就是360度。
引脚说明:
棕色线 GND
红色线 VCC(5V)
黄色线 PWM输入线
180度舵机控制方法
pwm周期设置为20ms
高电平0.5ms 0 °
高电平1.0ms 45°
高电平1.5ms 90°
高电平2.0ms 135°
高电平2.5ms 180°
但是角度都是固定的,不能同一个方向转动超过180度
360度舵机控制方法
pwm周期设置为20ms
高电平0.5ms 顺时针最大转速;
高电平1.5ms 速度为0;
高电平2.5ms 逆时针最大转速;
相关代码
void tima0_init(uint32_t arr)
{//gpio初始化GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P1,GPIO_PIN2);//功能输出引脚//定时器输出pwm初始化Timer_A_outputPWMParam tima0_pwm={0};tima0_pwm.clockSource=TIMER_A_CLOCKSOURCE_SMCLK;//时钟源16*1048576hztima0_pwm.clockSourceDivider=TIMER_A_CLOCKSOURCE_DIVIDER_16;tima0_pwmpareOutputMode=TIMER_A_OUTPUTMODE_RESET_SET;//复位模式tima0_pwmpareRegister=TIMER_A_CAPTURECOMPARE_REGISTER_1;//通道1tima0_pwm.dutyCycle=0;//比较值tima0_pwm.timerPeriod=arr;//重装载值Timer_A_outputPWM(TIMER_A0_BASE,&tima0_pwm);
}
//设置系统时钟
void sys_clock_conf(uint16_t dco)
{uint16_t dco_val=0;dco_val=dco*30.5-1;UCSCTL3 = SELREF_2; //设置 DCO FLL 引用 = REFOUCSCTL4 |= SELA_2; // 设置 ACLK = REFOUCSCTL0 = 0x0000; //设置尽可能低的DCOx,MODxdo{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// 清除 XT2、XT1、DCO 故障标志SFRIFG1 &= ~OFIFG; // 清除故障标志}while (SFRIFG1&OFIFG); // 测试振荡器故障标志__bis_SR_register(SCG0); //禁用 FLL 控制环路UCSCTL1 = DCORSEL_5; // 选择 DCO 范围 4-16MHz 操作。DCORSEL_7 范围8-23MHZUCSCTL2 |=dco_val; // 将 DCO 乘法器设置为 8MHz// (249 + 1) * 32768 = 8MHz 公式:fDCOCLKDIV= (N + 1) × (fFLLREFCLK÷ n)__bic_SR_register(SCG0); //启动FLL 控制环路__delay_cycles(250000);
}//按键初始化
void key_init(void)
{GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1,GPIO_PIN1);GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2,GPIO_PIN1);
}//按键扫描
void key_scan(void)
{if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1)){delay_ms(10);if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1)){while(!GPIO_getInputPinValue(GPIO_PORT_P1,GPIO_PIN1));//180度舵机
// Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,1049);//45度
// delay_ms(100);
// Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,1573);//90度
// delay_ms(100);
// Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,2097);//135度
// delay_ms(100);
// Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,2570);180度
// delay_ms(100);
// Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,524);//524.275 0度
// delay_ms(100);//360度舵机//Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,524);//正转Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,2621);//反转}}else if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P2,GPIO_PIN1)){delay_ms(10);if(GPIO_INPUT_PIN_LOW==GPIO_getInputPinValue(GPIO_PORT_P2,GPIO_PIN1)){while(!GPIO_getInputPinValue(GPIO_PORT_P2,GPIO_PIN1));Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,1573);//360度舵机 速度0}}
}int main(void)
{WDTCTL = WDTPW | WDTHOLD; // stop watchdog timersys_clock_conf(16);usart0_init();usart1_init();key_init();tima0_init(20971);//Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,524);//180度舵机 0度位置Timer_A_setCompareValue(TIMER_A0_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,1573);//360度舵机 速度0__bis_SR_register(GIE);//中断使能while(1){key_scan();}
}
本文标签: msp430f5529标准库学习之SG90舵机使用
版权声明:本文标题:msp430f5529标准库学习之SG90舵机使用 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1732360012h1534949.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论