【小白入门】新西达、好盈电调PWM控制直流无刷电机,以N5065为例

news/2025/1/7 11:02:03/

写在开头,本文为我本人在2023 ROBOCON期间为队伍设计直流无刷电机控制期间的初步所学。希望本文能帮到所有第一次入坑直流无刷电机的小白朋友们,文章纰漏星数,还望各位大佬多多包涵。

一、你可能已有或者可以用到的硬件:


  1. PWM输出器(某些平台五六块钱的舵机测试仪):
    如图,一般可以输出3路控制信号,还不错
  2. 一个普通的直流无刷电机
    还有它的三根控制线
  3. 好盈(或者新西达)直流无刷电机电调
    一端为香蕉头,一端为XT60头

注意事项:

①电调不可少。一般来说买的时候要注意电池规格和最大电流,容我赘述:1s电池大致为3.6V-4.2V,所以3s电池大致就是适配12V航模电池。我之前买的新西达电调,只能2-3s,但电机可以承受24V-36V的电压,所以完全转不到满速。不过,换了好盈电调以后,就可以承受3-6s电池了,也就是能用到robocon常用的24V电池,转速简直起飞了。

电流的话,一般来说对于3s电池(12v)的话30A够用了。

24V的话,最好还是60A或者80A吧(没有确切验证)。

②买电调的时候,如果你没有电路基础,还是让店家焊好香蕉头(很关键!可以直接与电机三根控制线相连,方便很多)和XT30头或者T字头吧。


 二、我买好东西了,也供上电了,该怎么接线才能让它动起来呢?:

        首先强调,我们不去细致了解无刷电机的转速、正反的原理,只需要知道他们都是通过改变PWM控制信号(可以理解成一个高、低电平时长可控的方波)的占空比、频率来实现的。

        如上述所述,我们用舵机测试仪或者配置了PWM引脚输出的单片机,再加上一个电调,是很容易实现通过PWM信号对电机的控制的。

如果你使用的是舵机测试仪,那直接插上就行,唯一要注意的是S是信号线,即图中白线。

一般来说,黑色都是GND,也就是图中的‘-’,直接插上就ok了。

插反了的话,一般也不会烧,不用担心。

如图,给电调供电的两根线 中间的是一组信号线

 如果你使用的是板子,那也简单

如上例,白线是信号线,接到输出信号的引脚,红线是供电线(经个人测试不接也没事),黑线是地线!重要,这根线必须接上!

如图,我配置了PWM信号从PB1输出,然后电调与板子共GND

 好了,接下来接上电池,我们可以尝试让它转起来了!


三、初始化电调,输出PWM信号,驱动电机:

首先上图:

顺便解释一下,电调在第一次使用时,需要适配电机,调整油门。

大概就是告诉电调,告诉他PWM的占空比区间。

以上是好盈电调,由图我们知道要先调最大油门,确认后给出一个最低油门
只要电调​​响了与你电池节数相同的声音,就代表设定完毕!
Ps:对于新西达电调,一般是响一声表示确认低电平,响两声表示确认完毕,可以启动。

因此,对于舵机测试仪来说,只要将电调连上电机,然后上电,应该就会有反应了。

记得提前将舵机测试仪转到你想要的最大油门处。听到‘哔——哔’后,就可以将油门推到你想要的最低处了。

根据我的经验,一般来说,最低油门可以设置为最左端的5处,而最大油门设置在轮盘右端的3处就差不多了。

对于用板子控制来说,则要复杂一点。

首先,让我们来配置一下PWM的输出。

首先查看你板子的硬件配置,我用的是STM32F429,有八个时钟,我选择的是时钟3的通道4来输出PWM波。所以在timer.c中,我先配置了两个句柄。

TIM_HandleTypeDef TIM3_Handler;         //定时器3PWM句柄 
TIM_OC_InitTypeDef TIM3_CH4Handler;	    //定时器3通道4句柄

然后就是TIM3的PWM输出初始化:

//TIM3 PWM部分初始化 
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM3_PWM_Init(u16 arr,u16 psc)
{ TIM3_Handler.Instance=TIM3;            //定时器3TIM3_Handler.Init.Prescaler=psc;       //定时器分频TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//向上计数模式TIM3_Handler.Init.Period=arr;          //自动重装载值TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;HAL_TIM_PWM_Init(&TIM3_Handler);       //初始化PWMTIM3_CH4Handler.OCMode=TIM_OCMODE_PWM1; //模式选择PWM1TIM3_CH4Handler.Pulse=arr/2;            //设置比较值,此值用来确定占空比,默认比较值为自动重装载值的一半,即占空比为50%TIM3_CH4Handler.OCPolarity=TIM_OCPOLARITY_HIGH; //输出比较极性为低 ============变为‘高’HAL_TIM_PWM_ConfigChannel(&TIM3_Handler,&TIM3_CH4Handler,TIM_CHANNEL_4);//配置TIM3通道4HAL_TIM_PWM_Start(&TIM3_Handler,TIM_CHANNEL_4);//开启PWM通道4
}

好了,输出通道也配置好了,接下来只要初始化引脚,使能相应时钟,配置中断优先级就OK了。

void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{if(htim->Instance==TIM3){GPIO_InitTypeDef GPIO_Initure;__HAL_RCC_TIM3_CLK_ENABLE();			//使能定时器3__HAL_RCC_GPIOB_CLK_ENABLE();			//开启GPIOB时钟GPIO_Initure.Pin=GPIO_PIN_1;           	//PB1GPIO_Initure.Mode=GPIO_MODE_AF_PP;  	//复用推挽输出GPIO_Initure.Pull=GPIO_PULLUP;          //上拉GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速GPIO_Initure.Alternate= GPIO_AF2_TIM3;	//PB1复用为TIM3_CH4HAL_GPIO_Init(GPIOB,&GPIO_Initure);HAL_NVIC_SetPriority(TIM3_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级3HAL_NVIC_EnableIRQ(TIM3_IRQn);          //开启ITM3中断 }
}

好了,接下来还有一些常用的函数,也别忘了在.h文件里配置:

void TIM3_IRQHandler(void)
{HAL_TIM_IRQHandler(&TIM3_Handler);
}void TIM_SetTIM3Compare4(u32 compare)
{TIM3->CCR4=compare; 
}

以上,我们就把板子配置完了。

接下来,我们进入与舵机控制仪一样的设置油门环节。

首先我们由说明书知道,要先给最大油门。

但是板子该怎么给呢? 这又不是控制仪,拿手拧来拧去就完事了。

别慌,我们先了解一个常识:

一般来说,对于50hz,20ms的PWM波,5%的占空比是最低油门,10%的占空比是最大油门。

那么,我们就让它输出50hz,20ms的PWM波吧!

话不多说,我们就在main函数里配置初始化吧

u8 keyval=0;Stm32_Clock_Init(360,25,2,8);//设置时钟,180Mhzdelay_init(180);		//初始化延时函数 uart_init(115200);		//初始化串口波特率为115200 LED_Init();		  		//初始化与LED连接的硬件接口KEY_Init();				//按键初始化TIM3_PWM_Init(200-1,9000-1);//20ms,10KHz//TIM4_PWM_Init(800-1,2250-1); //90M/4500=20000的计数频率,自动重装载为200,那么PWM频率为20000/400=50hz,20msMotorPwm_Init();

对于以上,我需要解释的是,定时器是这样运行的。

我们已知STM32F429的时钟是180Mhz,具体原理我没有很搞懂,但是从同学那里问到,TIM要以90M作为主频。朋友们在移植的时候可以查看自己板子的频率进行设置。

那么时钟的计数频率每秒就是:90M / [ (9000-1) + 1 ] = 10000次

而前头的( 200 - 1 ) ,则是计数值。

每次计数时长为: [ ( 200 - 1 )+ 1 ] / 10000 = 1/50  再乘以1000ms也就是一秒,就是1000ms * 1/50 = 20ms,也就是50hz。

 好了,我们配置好了定时器,接下来可以让它输出最大油门了,以下对于油门的操作,需要大家先行学习PWM波的基础知识,如果不想了解的话,也可以直接按照我的简单方法来:

我们知道PWM是通过比较CCR(计数值)和ARR(自动重装载值)来实现的,ARR也就是在TIM3_PWM_Init(200-1,9000-1)中提到的200这个敏感的数字。

鉴于此,我们已知设置好了ARR,那么只要已知操作CCR就可以操作油门了。

void MotorPwm_Init(void)
{TIM3->CCR4 = 20;//油门拉满TIM4->CCR1 = 20;//油门拉满delay_ms(3000);TIM3->CCR4 = 10;//油门拉低TIM4->CCR1 = 10;//油门拉低delay_ms(3000);
}

以上就是我们初始化油门的函数,按道理,在给电机通电后,再运行板子,你应该就能听到“哔——哔”,然后响起三声(12v电池)或者六声(24v电池)短鸣,最后一声“哔”就初始化完了。

按理说,这就可以动啦,不过,我们还需要一点语句,让它动起来。

while(1){keyval=KEY_Scan(0);if(keyval == KEY0_PRES){TIM3->CCR4 += 1; //调大油门,转速逐渐增大。TIM4->CCR1 += 1; }if(keyval == KEY1_PRES){TIM3->CCR4 -= 1; TIM4->CCR1 -= 1; }if(keyval == KEY2_PRES){TIM3->CCR4 = 10; //回到最小油门,急停TIM4->CCR1 = 10; }if(keyval == WKUP_PRES){MotorPwm_Init();}}

OK了,只要按KEY1,转速就会逐渐增加。记得要先开电调的电,再开板子的电,否则最开始的初始化代码可能不会得到完整运行。如果没有初始化成功,可以按一下wkup试试。


http://www.ppmy.cn/news/441404.html

相关文章

FS2956A 输入8-120V 用于液晶仪表5V-USB 充电口方案

FS2956A 内置MOS 100V开关降压型DC-DC转换器,FS2956A 8-100V用于电动车 滑板车 液晶仪表 5V-USB充电IC方案2A 概述: FS2956A 是一款支持宽电压输入的开关降压型DC-DC,芯片内置100V/5A功率MOS,最高输入电压90V。FS2956A 具有低…

美国Midtronics MDX-600AP系列蓄电池电导及电路系统分析仪|MDX-631|密特MDX-641P|MDX-651P

美国Midtronics MDX-600AP系列蓄电池电导及电路系统分析仪|MDX-631|密特MDX-641P|MDX-651P 美国Midtronics—全球蓄电池和电路系统诊断的领导者 MDX-600 AP 系列,来自于Midtronics–全球蓄电池和电路系统诊断的领导者。该系列产品线结合了 Midtronics公司20多年的…

【产品推荐】安科瑞AMC200多回路智能电量采集监控装置

【摘要】介绍了安科瑞两款多回路无线智能电量采集监控装置,可应用于基站的交直流配电监控、低压出线开关柜集中监控、末端配电箱等集成电力参数监测、电能计量、环境温湿度监测以及无线传输的各类应用场景。 【关键词】无线监控;多回路监控;…

行车记录仪里面的移动侦测(运动检测、Motion Detection )什么

科技的进步总是能够给人们带来前所未有的惊喜,今天我们讲到的行车记录仪中运动检测也叫移动侦测,英文名叫Motion Detection,相信很多买过行车记录仪的人都听说过这个功能,但很多人以为行车记录仪的开机录像就是移动侦测&#xff0…

汽车can网络分析仪汽车CAN

促销码:GC-CBK-J-006-0711 沈阳广成科技有限公司提供相关技术文档下载,用于参考和学习,如需更多资料,请向客服人员索要。 优惠活动开始啦! 凡在本公司购买产品,提供【促销码】给客服,100%享受5重…

如何防止暗电流引起的电瓶过度放电

汽车漏电现象是指汽车停驶中蓄电池逐渐放电以致影响汽车启动困难或电器工作不正常的现象.导致汽车漏电的原因大体有3类: 第一类是停车时电器开关未关等导致的蓄电池亏电, 第二类是蓄电池极板短路或氧化脱落导致自放电而亏电, 第三类是由于汽车电器、线束、传感器、控制器、执行…

智能座舱自动化测试解决方案的硬件构成

小身体里也有大智慧,一旦拥有别无所惧!!!! 在汽车研发与测试过程中,常常要模拟很多实车场景,但是很多场景构建起来非常困难,比如一些毫秒级别延迟,极限工况和故障工况等…

艾德克斯充电测试软件_艾德克斯车载充电机测试解决方案

引言本文引用地址:http://www.eepw.com.cn/article/201610/308633.htm 随着现代技术的发展和世界资源、环境难题的突出,电动汽车以其环保、节能、高效的优点已经成为汽车工业研究领域的热点主题。当然电动汽车在发展的同时,对应的电力供给系统…