• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

4msp430f5529东拼西凑的开环垃圾小车舵机,电机,红外对管的应用

武飞扬头像
菜鸡,呜呜呜》
帮助1

一.pwm波的产生

驱动电机,舵机的运动,肯定要用到pwm波,所以我们先来分享一下如何来产生pwm波,产生pwm波的话一定是要用到单片机里带的定时器。msp430f5529这款芯片有TIME A, TIME B定时器。首先我们先查阅数据手册,查看可以使用定时器的管脚。

 学新通

 我们看到P1.2 P1.3 P1.4 P1.5可以使用timeA定时器,在翻看翻看官方给的定时器例程,我们就能写出pwm波的程序了

void initpwm()
{
     P1DIR |=BIT2 BIT3 BIT4 BIT5; //设置P1.2,3,4,5口为输出
     P1SEL |=BIT2 BIT3 BIT4 BIT5; //开启1.2,3,4,5口的io口的第二功能,即启用定时器
     TA0CCR0 =3000;               //设置PWM波的周期
     TA0CTL=TASSEL_2 MC_1;        //设置定时器A0采用TASSEL时钟源和增计数模式
     TA0CCTL1 = OUTMOD_7;         //设置TA0CCR1,2,34,的PWM的输出模式为7模式
     TA0CCTL2 = OUTMOD_7;
     TA0CCTL3 = OUTMOD_7;
     TA0CCTL4 = OUTMOD_7;
}

此时P1.2和P1.5控制一个电机,P1.3和P1.4控制一个电机,然后在主程序中只需要给TA0CCR1,TA0CCR2,TA0CCR3,TA0CCR4分别对应P1.2,P1.3,P1.4,P1.5赋值即可.记得赋值时控制一个电机的一组定时器一个给0,另一个给的值除以TA0CCR0的值即为pwm波的占空比。如:TA0CCTL1=0;TA0CCTL4=1000;其占空比就为1000/3000。

二.舵机的运用,舵机这个玩意很神奇,控制它的话是采用pwm波控制。基本原理什么的就不仔细讲了,想要详细了解的,大家可以在csdn上查看一下。首先在百度上搜了一张舵机的图

学新通

 差不多就是这样,那我们的pwm波就是通过占空比来控制舵机的相对转动的角度和方向。具体关系的话可以到买舵机的商家问一问。然后我们上代码。

int umotor(void)
{
    P2DIR |=BIT0 ;                //设置P2.0口为输出
    P2SEL |=BIT0;                 //开启2.0口的第二功能,因为要用来输出pwm
    TA1CCR0 =10000;               //设置PWM周期(此周期要根据舵机的频率计算,舵机频率转换为此周期)
    TA1CTL=TASSEL_2 MC_1;         //设置定时器A1采用TASSEL时钟源和增计数模式
    TA1CCTL1 =OUTMOD_7;           //设置TA0CCR1的PWM的输出模式为7模式
}

同样的给TA1CCTL1赋值 ,TA1CCTL1/TA1CCR0即为舵机的占空比,通过控制舵机的占空比即可以控制舵机的转向。

三.电机的运用,电机就直接上驱动板,驱动板上接上pwm波,把电机接在驱动板上即可,如果发现正反转不一,可以把接一组pwm波的线交换一下,也可以把电机接驱动板的正负极交换一下。

四.红外对管的应用

红外对管呢,是通过发射红外光和接受红外光的设备,所以可以用来循迹和避障,那么一般红外管在接收障碍物反射的信号后就会给一个高电平(低电平),接收不到会给已给低电平(高电平),所以就要用到单片机判断输入信号的高低电平。   

P6SEL|=0x00; 
    P6DIR|=0x00;//设置P6.0 P6.1 P6.2 P6.3 P6.4红外管脚输入定义

while(1)
{    
        switch(P6IN&0x0f)
                    {
                        case 0x0f:TA1CCTL1=1550;break;//1550为我使用舵机所的中值
                        case 0x01:TA1CCTL1=1550;break;
                        case 0x03:TA1CCTL1=1350;break;
                        case 0x02:TA1CCTL1=1750;break;
                        case 0x04:TA1CCTL1=1650;break;

                        default:TA1CCTL1=1550; break;
                    };        //舵机转向控制
}

这里的0x0f是P6.1.2.3.4管口转换为十六进制,通过输入的口高低电平和0x0f做与运算,再用switch语句来执行转向操作。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcjeec
系列文章
更多 icon
同类精品
更多 icon
继续加载