MSPM0G3507(二十)——PWM驱动舵机,模块化

舵机PWM在配置时,一定要选择50HZ,否则舵机不能转到相应的角度

main函数


#include "ti_msp_dl_config.h"
#include "OLED.h"
#include "stdio.h"
#include "Servo.h"



volatile unsigned int delay_times = 0;
 


//搭配滴答定时器实现的精确ms延时
void delay_ms(unsigned int ms) 
{
    delay_times = ms;
    while( delay_times != 0 );
}      




int a=0;
volatile uint8_t gEchoData = 0;


int main(void)
{

    uint8_t str[64];


    SYSCFG_DL_init();
    //NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);
   // DL_TimerA_startCounter(TIMER_0_INST);

     delay_ms(500) ;
    OLED_Init();
	OLED_Fill(0x00);



    DL_TimerG_startCounter(PWM_Servo_INST );                                //初始化舵机




    NVIC_ClearPendingIRQ(UART_2_INST_INT_IRQN);                                //串口中断 先清除中断,防止直接进中断
    NVIC_EnableIRQ(UART_2_INST_INT_IRQN);   






    while (1)
     {
        sprintf((char *)str, "%d", a);
        OLED_ShowStr(0,4, str,2);

       delay_ms(1000) ;
        Servo_SetAngle(180);
           a++;
   
        delay_ms(1000) ;
        Servo_SetAngle(90);
            a++;
     
     delay_ms(1000) ;
        Servo_SetAngle(0);
            a++;
    }
}


void UART_2_INST_IRQHandler(void)                           //蓝牙串口
{
    switch (DL_UART_Main_getPendingInterrupt(UART_2_INST)) {
        case DL_UART_MAIN_IIDX_RX:
            gEchoData = DL_UART_Main_receiveData(UART_2_INST);
            if (gEchoData==0x00)
            {
                    a=0;

            }

             if (gEchoData==0x01)
            {
                    a=1;

            }


             if (gEchoData==0x05)
            {
                    a=2;

            }

             if (gEchoData==0x07)
            {
                    a=3;

            }

             if (gEchoData==0x03)
            {
                    a=4;

            }


           
            break;
        default:
            break;
    }
}



void SysTick_Handler(void)
{
    if( delay_times != 0 )
    {
        delay_times--;
    }
}




舵机.c


#include "ti_msp_dl_config.h"
#include "Servo.h"



float b=0;
void Servo_SetAngle(float Angle)
{
     b=2000-(Angle / 180 * 200 + 50);
    

	DL_TimerG_setCaptureCompareValue(PWM_Servo_INST, b, DL_TIMER_CC_0_INDEX);
}

舵机.h


#ifndef __Servo_H
#define	__Servo_H




#include "ti_msp_dl_config.h"

void Servo_SetAngle(float Angle);
#endif

相关配置:

 OLED和串口部分在之前已经发过

  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值