電機作為現代電子系統的核心執行部件,是實現 “電能 - 機械能” 轉換的關鍵載體,廣泛滲透于工業自動化、智能機器人、消費電子、交通工具等眾多領域。從精密設備的微小型驅動到工業生產線的大功率調速,電機的控制性能直接決定了系統的響應速度、運行精度、能耗效率與穩定性。這里分享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);
}
審核編輯 黃宇
-
機器人
+關注
關注
213文章
31071瀏覽量
222162 -
電機控制
+關注
關注
3600文章
2131瀏覽量
277667
發布評論請先 登錄
CW32L012與STM32G431的CORDIC三角函數運算性能對比
CW32L012與STM32F103的三角運算性能對比
Infineon移動機器人電機控制方案深度解析
CW32L012小型機器人控制評估板活動 四足機器人+智能小車 開箱評測
**CW32L012****開發評估板的第一個程序**
使用芯源CW32的CW32L012開發評估板做了spi屏幕驅動
堅持繼續布局32位MCU,進一步完善產品陣容,96Mhz主頻CW32L012新品發布!
CW32L012小機器人的電機控制
評論