#include "Motor.h"
#include "ti/driverlib/dl_gpio.h"
#include "ti/driverlib/dl_timer.h"
#include "ti/driverlib/dl_timera.h"

//电机启动
void Motor_On(void)
{
    DL_GPIO_setPins(DIR_STBY_PORT, DIR_STBY_PIN );
}
//电机关闭
void Motor_off(void)
{
    DL_GPIO_clearPins(DIR_STBY_PORT, DIR_STBY_PIN );

    DL_GPIO_clearPins(DIR_AIN1_PORT, DIR_AIN1_PIN);
    DL_GPIO_clearPins(DIR_AIN2_PORT, DIR_AIN2_PIN);
    DL_GPIO_clearPins(DIR_BIN1_PORT, DIR_BIN1_PIN);
    DL_GPIO_clearPins(DIR_BIN2_PORT, DIR_BIN2_PIN);
}
//电机速度
void set_speed(uint8_t side,int8_t duty)
{
    uint32_t compareValue =0;
    if(side == 0)//左轮
    {
        if(duty<0)//反转
        {
            compareValue = 3199-3199*(-duty/100.0);
            DL_TimerA_setCaptureCompareValue(PWM_0_INST,compareValue,GPIO_PWM_0_C0_IDX );
            DL_GPIO_setPins(DIR_AIN1_PORT ,DIR_AIN1_PIN  );
            DL_GPIO_clearPins(DIR_AIN2_PORT , DIR_AIN2_PIN);
        }
        else if(duty>0)//正转
        {
            compareValue = 3199-3199*(duty/100.0);
            DL_TimerA_setCaptureCompareValue(PWM_0_INST,compareValue,GPIO_PWM_0_C0_IDX );
            DL_GPIO_setPins(DIR_AIN2_PORT , DIR_AIN2_PIN);
            DL_GPIO_clearPins(DIR_AIN1_PORT ,DIR_AIN1_PIN  );
        }
        else 
        {
            DL_GPIO_clearPins(DIR_AIN2_PORT , DIR_AIN2_PIN);
            DL_GPIO_clearPins(DIR_AIN1_PORT ,DIR_AIN1_PIN  );
        }
    }
    else //右轮
    {
        if(duty<0)
        {
            compareValue = 3199-3199*(-duty/100.0);
            DL_TimerA_setCaptureCompareValue(PWM_0_INST,compareValue,GPIO_PWM_0_C1_IDX);
            DL_GPIO_setPins(DIR_BIN1_PORT ,DIR_BIN1_PIN  );
            DL_GPIO_clearPins(DIR_BIN2_PORT , DIR_BIN2_PIN);
        }
        else if(duty>0)
        {
            compareValue = 3199-3199*(duty/100.0);
            DL_TimerA_setCaptureCompareValue(PWM_0_INST,compareValue,GPIO_PWM_0_C1_IDX);
            DL_GPIO_setPins(DIR_BIN2_PORT , DIR_BIN2_PIN);
            DL_GPIO_clearPins(DIR_BIN1_PORT ,DIR_BIN1_PIN  );
        }
        else 
        {
            DL_GPIO_clearPins(DIR_BIN2_PORT , DIR_BIN2_PIN);
            DL_GPIO_clearPins(DIR_BIN1_PORT ,DIR_BIN1_PIN  );
        }
    }
}

void Init()
{
    //关闭所有输出
    Motor_off();
    //使能pwm输出
    DL_Timer_startCounter(PWM_0_INST);
}

用的是tb6612稳压版驱动电机,软件是用ccs。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐