CW32L012小机器人的电机控制

电子说

1.4w人已加入

描述

      电机作为现代电子系统的核心执行部件,是实现 “电能 - 机械能” 转换的关键载体,广泛渗透于工业自动化、智能机器人、消费电子、交通工具等众多领域。从精密设备的微小型驱动到工业生产线的大功率调速,电机的控制性能直接决定了系统的响应速度、运行精度、能耗效率与稳定性。这里分享CW32L012小机器人的正反转、调速的电机控制

电机的正反转

电机控制

从配套的开发板资料介绍中可以知道,这是电机的驱动芯片RZ7899

从立创商城下载该芯片的数据手册https://item.szlcsc.com/93566.html

电机控制

打开手册看到引脚定义和真值表

电机控制

电机控制

在根据资料中主板的电路原理图:

电机控制

得到正反转的控制逻辑,需要两个IO口,通过拉高拉低两个IO口形成不同的逻辑,其输出也会有对应变化,就实现了电机的正反转控制

电机的调速

采用PWM调速,该方式是通过开关管不断的开关电源,形成周期固定,占空比可调的矩形波,具有成本低,稳定性高,简单高效等优点

下面是资料源码中的PWM和正反转IO口初始化代码:

void Motor_Init(void)

{

__SYSCTRL_GPIOB_CLK_ENABLE();

__SYSCTRL_GTIM3_CLK_ENABLE();

PB04_AFx_GTIM3CH3();

PB05_AFx_GTIM3CH4();

GPIO_InitTypeDef GPIO_Initstructure;

GPIO_Initstructure.IT=GPIO_IT_NONE;

GPIO_Initstructure.Mode=GPIO_MODE_OUTPUT_PP;

GPIO_Initstructure.Pins=GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_3 | GPIO_PIN_12;

GPIO_Init(CW_GPIOB,&GPIO_Initstructure);

GTIM_InitTypeDef GTIM_InitStruct = {0};

GTIM_InitStruct.AlignMode = GTIM_ALIGN_MODE_EDGE;

GTIM_InitStruct.ARRBuffState = GTIM_ARR_BUFF_EN;

GTIM_InitStruct.Direction = GTIM_DIRECTION_UP;

GTIM_InitStruct.EventOption = GTIM_EVENT_NORMAL;

GTIM_InitStruct.Prescaler = 0;

GTIM_InitStruct.PulseMode = GTIM_PULSE_MODE_DIS;

GTIM_InitStruct.ReloadValue = 1000 - 1;

GTIM_InitStruct.UpdateOption = GTIM_UPDATE_DIS;

GTIM_TimeBaseInit(CW_GTIM3, >IM_InitStruct);

GTIM_OCModeCfgTypeDef GTIM_OCModeCfgStruct = {DISABLE, DISABLE, 0};

GTIM_OCModeCfgStruct.FastMode = DISABLE;

GTIM_OCModeCfgStruct.OCMode = GTIM_OC_MODE_PWM1;

GTIM_OCModeCfgStruct.OCPolarity = GTIM_OC_POLAR_NONINVERT;

GTIM_OCModeCfgStruct.PreloadState = DISABLE;

GTIM_OC3ModeCfg(CW_GTIM3, >IM_OCModeCfgStruct);

GTIM_OC4ModeCfg(CW_GTIM3, >IM_OCModeCfgStruct);

GTIM_OC3Cmd(CW_GTIM3, ENABLE);

GTIM_OC4Cmd(CW_GTIM3, ENABLE);

GTIM_Cmd(CW_GTIM3, ENABLE);

GTIM_SetCompare3(CW_GTIM3, 0);

GTIM_SetCompare4(CW_GTIM3, 0);

Car_Stop();

}

配置GTIM3定时器为输出比较模式,后续通过调整CCR的值来更改占空比来实现调速,配合上面提到的驱动芯片,就实现了电机的正反转和调速功能

电机的正反转、调速源码

void GTIM1_SetCompare1(uint16_t value)

{

value=(value>=1000)? 1000:value;

GTIM_SetCompare3(CW_GTIM3,value);

}

void Motor_Left_Run(int16_t value)//左电机

{

int16_t compare;

if(value>0)//正转

{

PB03_SETLOW();

compare=750value/900+250;//将外部遥控更改的速度值100-900线性缩放到占空比250-1000

}

else if(value<0)//反转

{

compare=750value/900-250;//将外部遥控更改的速度值100-900线性缩放到占空比250-1000

compare=1000+compare;

PB03_SETHIGH();

}

else //停止

{

PB03_SETLOW();

compare=0;

}

GTIM1_SetCompare1(compare);

}


审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分