标题: 单片机9g舵机调试程序 [打印本页]

作者: H..Y    时间: 2020-8-30 11:12
标题: 单片机9g舵机调试程序
*******************************************************************************
* 程序名称:9g舵机控制
* 硬件说明:VCC-----------------4-6V
*                 GND---------------- GND
*                 PWM----------------IO口
*软件说明:  舵机的转动需要时间的,因此,程序中值的变化不能太快,不然舵机跟不上程序。
*          该舵机属于模拟舵机(非数字),锁定某一角度需要持续给PWM信号
*
*编写时间:2020.07.12
*
*特别说明:在工作精度高和快速系统中,该舵机转向速度跟不上
******************************************************************************/
#include <msp430.h>
#define SERVO TA2CCR2    //P2.5

void servo_angle(int angle)
{
    //对应计数时钟为32768 Hz
    if(angle>90)   angle=90;      //输入限幅
    if(angle<(-90))  angle=(-90);
    SERVO =(int) (49.152+angle*0.364);        //(49为舵机0度基数)
    //SERVO = 82;                 //90
    //SERVO = 49;                 //0
    //SERVO = 16;                   //-90
}
/***舵机PWM输出初始化***/
void servo_init()
{
        //对应计数时钟为32768 Hz
        P2DIR |= BIT5;
        P2SEL |= BIT5 ;//PWM输出
        TA2CCR0 =655;  //PWM周期长度   必须20ms(50Hz)时钟不同,值不同
        TA2CCTL2 = OUTMOD_7;
        TA2CTL = TASSEL__ACLK + MC_1 +TACLR;
}

//void servo_angle(int angle)
//{
//    //计数时钟为1.048756 MHz 时
//    if(angle>90)      angle=90;      //输入限幅
//    if(angle<-90)     angle=-90;
//    SERVO =(int)(1573.134+angle*11.654);//( 计数值1573= 1048756*1.5ms)
//}
//
///***舵机PWM输出初始化***/
//void servo_init()
//{
//        //计数时钟为1.048756 MHz 时
//        P2DIR |= BIT5;
//        P2SEL |= BIT5 ;//PWM输出
//        TA2CCR0 =20975;//PWM周期长度   必须20ms     1.048756/50 Hz
//        TA2CCTL2 = OUTMOD_7;
//        TA2CTL = TASSEL__SMCLK + MC_1 +TACLR;
//}



//扇形扫描
int i=0,a=0;
int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer
    servo_init();
    servo_angle(0);
    _delay_cycles(5000000);
    while(1)
    {
            if(a)
            {
            i-=2;
            servo_angle(i);
            _delay_cycles(20000);
            }
            else
            {
             i+=2;
             servo_angle(i);
             _delay_cycles(20000);
            }
            if( i==90 || i==-90 )   a=!a;
    }
}







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1