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

        GTIM_OC4ModeCfg(CW_GTIM3, &GTIM_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);

}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐