PWM配置智能小车电机-让小车动起来


一、硬件电路

PC6为左前电机的PWM输入,为电机提供动力。
PG7、PG8控制左前电机的方向。
在这里插入图片描述
在这里插入图片描述

二、MOTOR初始化

给电机提供周期为1000000ns的PWM波形

static int MotorInit(struct Motor *ptdev){
	if(NULL == ptdev){
		LogDebug("MotorStart EINVAL\r\n");
		return -EINVAL;
	}

    Pwm_s MotorPwm;
	switch(ptdev->channel){
        case 1:
            MotorPwm = LFMotorPwm;
            break;  
        case 2:
            MotorPwm = RFMotorPwm;
            break;
        case 3:
            MotorPwm = LBMotorPwm;
            break;
        case 4:
            MotorPwm = RBMotorPwm;
            break; 
        default:
            return -EINVAL;
    }
    
	int ret = MotorPwm.Config(&MotorPwm,SET_PERIOD_VALUE,1000000);
	if(ret != ESUCCESS){
		LogDebug("MotorPwm.Config failed\r\n");
		return -EIO;
	}

	
	ret = MotorPwm.Start(&MotorPwm);

	if(ret != ESUCCESS){
		LogDebug("MotorPwm.Start failed\r\n");
		return -EIO;
	}
	
	ret = MotorStop(ptdev);
	if(ret != ESUCCESS){
		LogDebug("MotorStop failed\r\n");
		return -EIO;
	}
	
	ret = MotorSetDir(ptdev,Motor_CR);
	if(ret != ESUCCESS){
		LogDebug("MotorSetDir failed\r\n");
		return -EIO;
	}
	
	return ESUCCESS;
}

三、MOTOR的开始与停止

通过方向控制来开始和停止电机

static int MotorStart(struct Motor *ptdev){
	if(NULL == ptdev){
		LogDebug("MotorStart EINVAL\r\n");
		return -EINVAL;
	}
    
	Gpio_s MotorCR,MotorCCR;
    switch(ptdev->channel){
        case 1:
            MotorCR = LFMotorCR;
            MotorCCR = LFMotorCCR;
            break;  
        case 2:
            MotorCR = RFMotorCR;
            MotorCCR = RFMotorCCR;
            break;
        case 3:
			MotorCR = LBMotorCR;
            MotorCCR = LBMotorCCR;
            break;
        case 4:
            MotorCR = RBMotorCR;
            MotorCCR = RBMotorCCR;
            break; 
    }

	MotorCR.Write(&MotorCR,ptdev->dir);
	MotorCCR.Write(&MotorCCR,!ptdev->dir);
	ptdev->status = Motor_Start;
	return ESUCCESS;
}

static int MotorStop(struct Motor *ptdev){
	if(NULL == ptdev){
		LogDebug("MotorStart EINVAL\r\n");
		return -EINVAL;
	}
	
	Gpio_s MotorCR,MotorCCR;
    switch(ptdev->channel){
        case 1:
            MotorCR = LFMotorCR;
            MotorCCR = LFMotorCCR;
            break;  
        case 2:
            MotorCR = RFMotorCR;
            MotorCCR = RFMotorCCR;
            break;
        case 3:
			MotorCR = LBMotorCR;
            MotorCCR = LBMotorCCR;
            break;
        case 4:
            MotorCR = RBMotorCR;
            MotorCCR = RBMotorCCR;
            break; 
    }

	MotorCR.Write(&MotorCR,ptdev->dir);
	MotorCCR.Write(&MotorCCR,ptdev->dir);
	
	ptdev->status = Motor_Stop;
	return ESUCCESS;
}

四、MOTOR设置速度

static int MotorSetSpeed(struct Motor *ptdev,uint8_t speed){
	if(NULL == ptdev){
		LogDebug("MotorStart EINVAL\r\n");
		return -EINVAL;
	}
	if(0 == speed){
		return MotorStop(ptdev);
		}

	int pulse = speed * 1000000 / 100;
	
	Pwm_s MotorPwm;
    switch(ptdev->channel){
        case 1:
            MotorPwm = LFMotorPwm;
            break;  
        case 2:
            MotorPwm = RFMotorPwm;
            break;
        case 3:
            MotorPwm = LBMotorPwm;
            break;
        case 4:
            MotorPwm = RBMotorPwm;
            break; 
        default:
            return -EINVAL;
    }
	
	int ret = MotorPwm.Config(&MotorPwm,SET_COMPARE_VALUE,pulse);
	if(ret != ESUCCESS){
		LogDebug("MotorPwm.Config failed\r\n");
		return -EIO;
	}

	if(ptdev->status != Motor_Start){
		return MotorStart(ptdev);
		}
	return ESUCCESS;
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-12 02:08:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-12 02:08:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-12 02:08:02       82 阅读
  4. Python语言-面向对象

    2024-03-12 02:08:02       91 阅读

热门阅读

  1. 【SQL实用技巧】-- 连续N天登陆问题

    2024-03-12 02:08:02       43 阅读
  2. 蓝桥集训之日期问题

    2024-03-12 02:08:02       47 阅读
  3. Docker使用之Docker Compose【入门篇】

    2024-03-12 02:08:02       47 阅读
  4. linux系统docker历史以及对虚拟机的区别

    2024-03-12 02:08:02       36 阅读
  5. MongoDB聚合运算符:$denseRank

    2024-03-12 02:08:02       42 阅读
  6. MySQL—数据页的结构和原理

    2024-03-12 02:08:02       39 阅读
  7. HTML二识

    2024-03-12 02:08:02       42 阅读
  8. VUE3+X6流程图实现数据双向绑定的方案

    2024-03-12 02:08:02       43 阅读
  9. 如何远程SSH连接在家的服务器主机

    2024-03-12 02:08:02       44 阅读