找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2033|回复: 0
打印 上一主题 下一主题
收起左侧

单片机9g舵机调试程序

[复制链接]
跳转到指定楼层
楼主
ID:582953 发表于 2020-8-30 11:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
*******************************************************************************
* 程序名称: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;
    }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表