0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

无刷电机小车开发记录04——互补PWM驱动移植

RTThread物联网操作系统 来源:未知 2023-09-19 11:20 次阅读

前言


  上篇文章记录了为GD32的BSP添加了PWM信号输入捕获的驱动,并实现了对SC60228DC磁编码器数据的读取(PWM接口),最后还做了一点简单的测试。今天过来继续修轮子,适配一下PWM驱动。这里不得不提一下,造轮子或者修轮子可能是比较枯燥的,如果有也想搞一搞这个小车但懒得造轮子的小伙伴可以等我都弄完了直接用完适配好的程序,可能大多数同学都更喜欢玩上层实现具体功能的部分。不过对于我来说,在这之前还有很多轮子要修。

相关硬件电路


  介于上篇文章有小伙伴产生了一些疑问,所以后面的文章我尽量把相关的一些东西提前罗列一下,比如今天要调试的是驱动无刷电机的PWM信号。那下面就是其中一路电机驱动电路原理图,无刷电机的三项引线分别由三个NCE6005AS的双N沟道MOS管驱动。其中G2拉高,G1拉低时,高侧MOS管导通,该项被接入VDD,相反则低测MOS导通,该项被接入GND。而Mos管由EG2134的三半桥栅极驱动器驱动,最初的介绍视频里面也提过,我这里用的是全国产化的方案,所以相对国外的一些集成IC来说,器件要零散一些,但主要功能一致。而栅极驱动器的驱动信号则是三路互补PWM,其中HINx和LINx为一组。

wKgaomULQ4qAaH0nAAEYXAsLgN4102.jpg

如下是EG2134的输入输出逻辑真值表:

wKgaomULQ4qAJcN5AABfMb2plgI572.png

想了解更多器件信息,可参阅其芯片手册:EG2134芯片手册

PWM驱动移植


源文件适配

  目前我用的这块GD32E503器件还没有适配PWM驱动,所以还是有两个选择,如果能找到一个类似的驱动移植就会简单一点,否则就要走第二条路,完全自己适配,就要麻烦很多。首先对于RTT的PWM驱动有现成的,只要打开“RT_USING_PWM”宏即可把“rt_drv_pwm.c”添加到工程里。

wKgaomULQ4qAPIk2AAATqbC4mjo766.png

而对于BSP的底层驱动,我用的这块器件并没有适配,但好在RTT对于arm内核的GD32器件的适配度还是挺高的,可以在arm内核的BSP内找到相关驱动,那闲话少说,先拷贝过来再说。

wKgaomULQ4uAfsVfAADWThPw7gs897.jpg

  接下来的工作就是要看一下驱动是否匹配,把不匹配的地方适配一下就可以了。首先来说,RTT层的PWM功能还是比较完善的,已经支持了互补PWM模式的配置,也有配置死区的接口。但看了一下GD32的BSP层的驱动,只适配了普通的PWM功能,没有互补模式。所以着重的工作就是适配互补模式的PWM。首先看”drv_pwm.c”下的第一个结构体TIMER_PORT_CHANNEL_MAP_S,用来定义PWM用到的timer以及输出通道和输出引脚。原本的定义首先没有互补通道的IO配置,其次直接用GD32固件库的Port和pin定义的,所以配置只能固化到代码里。


		

1typedefstruct 2{ 3rt_int8_tTimerIndex;//timerindex:0~13 4rt_uint32_tPort;//gpioport:GPIOA/GPIOB/GPIOC/... 5rt_uint32_tpin;//gpiopin:GPIO_PIN_0~GPIO_PIN_15 6rt_uint16_tchannel;//timerchannel 7char*name; 8}TIMER_PORT_CHANNEL_MAP_S;

这里我想实现更多的使用配置文件配置,而配置文件配置如果也采用uint32类型的Port的寄存器地址去定义是很不直观的。所以添加了互补通道的同时,也修改了一下定义方式,具体怎么用且往后看。


		

1typedefstruct 2{ 3rt_int8_tTimerIndex;//timerindex:0~13 4char*OP_Port;//A,B,C,D... 5rt_uint16_tOP_pin;//GPIO_pin:0~15 6char*ON_Port;//A,B,C,D... 7rt_base_tON_pin;//GPIO_pin:0~15 8rt_uint16_tchannel;//timerchannel 9char*name; 10}TIMER_PORT_CHANNEL_MAP_S;

再往下看就是原本驱动里面对PWM引脚等信息的固化配置,比如PWM配置的是Timer3的ch2,输出引脚是GPIOB_8:


		

1staticstructgd32_pwmgd32_pwm_obj[]={ 2#ifdefRT_USING_PWM1 3{.tim_handle={3,GPIOB,GPIO_PIN_8,2,"pwm1"}}, 4#endif 5#ifdefRT_USING_PWM2 6{.tim_handle={3,GPIOB,GPIO_PIN_8,2,"pwm2"}}, 7#endif 8... 9... 10};

修改后的代码如下,其中所以配置都由宏定义实现,而具体的宏定义后面可以用Kconfig实现图形化配置:


		

1staticstructgd32_pwmgd32_pwm_obj[]={ 2#ifdefRT_USING_PWM1 3{.tim_handle={RT_USING_PWM1_TIMER_INDEX,RT_USING_PWM1_OP_PORT,RT_USING_PWM1_OP_PIN,RT_USING_PWM1_ON_PORT,RT_USING_PWM1_ON_PIN,RT_USING_PWM1_CH,RT_USING_PWM1_NAME}}, 4#endif 5#ifdefRT_USING_PWM2 6{.tim_handle={RT_USING_PWM2_TIMER_INDEX,RT_USING_PWM2_OP_PORT,RT_USING_PWM2_OP_PIN,RT_USING_PWM2_ON_PORT,RT_USING_PWM2_ON_PIN,RT_USING_PWM2_CH,RT_USING_PWM2_NAME}}, 7#endif 8... 9... 10};

上面提到过为了配置的时候更直观,没有直接使用寄存器地址值,而是用的字符’A’,’B’等去代表GPIOA,GPIOB。对于PIN的定义也类似,所以这里需要添加一个配置参数到具体的Port和pin的转换接口:


		

1staticrt_uint32_tget_gpio_periph_port(charpot) 2{ 3rt_uint32_tPort=0; 4switch(pot) 5{ 6case'A': 7Port=GPIOA; 8break; 9case'B': 10Port=GPIOB; 11break; 12case'C': 13Port=GPIOC; 14break; 15case'D': 16Port=GPIOD; 17break; 18case'E': 19Port=GPIOE; 20break; 21case'F': 22Port=GPIOF; 23break; 24case'G': 25Port=GPIOG; 26break; 27default: 28Port=0; 29break; 30} 31returnPort; 32} 33staticrt_uint32_tget_gpio_periph_pin(rt_uint16_tpn) 34{ 35rt_uint32_tPin=0; 36if(pn< 16) 37{ 38Pin=GPIO_PIN_0<< (pn); 39} 40else{ 41LOG_E("Unsportgpiopin! "); 42} 43returnPin; 44}

有了上面的对应接口,原驱动里的一些配置代码跟随做一下调整即可。我下面只给出改动稍大的一些地方,比如对于gpio的初始化代码,要添加一路互补IO的初始化,如果不适用互补PWM,配置文件里面不进行配置即可,这里就会跳过互补IO的初始化:


		

1staticvoidgpio_config(void) 2{ 3rt_int16_ti; 4rt_uint32_tport; 5rt_uint32_tpin; 6/*configtheGPIOasanalogmode*/ 7for(i=0;i< sizeof(gd32_pwm_obj)/sizeof(gd32_pwm_obj[0]);++i) 8{ 9port=get_gpio_periph_port(*(gd32_pwm_obj[i].tim_handle.OP_Port)); 10pin=get_gpio_periph_pin(gd32_pwm_obj[i].tim_handle.OP_pin); 11if(port) 12gpio_init(port,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,pin); 13port=get_gpio_periph_port(*(gd32_pwm_obj[i].tim_handle.ON_Port)); 14pin=get_gpio_periph_pin(gd32_pwm_obj[i].tim_handle.ON_pin); 15if(port) 16gpio_init(port,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,pin); 17} 18}

源文件方面最后一个要修改的地方就是enable接口,主要是看configuration内的complementary互补模式是否被开启,如果开启则同时使能互补通道即可。


		

1staticrt_err_tdrv_pwm_enable(TIMER_PORT_CHANNEL_MAP_S*pstTimerMap,structrt_pwm_configuration*configuration, 2rt_bool_tenable) 3{ 4intchannel; 5if(configuration->channel==0||configuration->channel>4) 6returnRT_ERROR; 7channel=configuration->channel-1; 8if(!enable) 9{ 10timer_channel_output_state_config(index_to_timer(pstTimerMap->TimerIndex),channel, 11TIMER_CCX_DISABLE); 12if(configuration->complementary==RT_TRUE) 13{ 14timer_channel_complementary_output_state_config(index_to_timer(pstTimerMap->TimerIndex),channel, 15TIMER_CCXN_DISABLE); 16} 17} 18else 19{ 20timer_channel_output_state_config(index_to_timer(pstTimerMap->TimerIndex),channel, 21TIMER_CCX_ENABLE); 22if(configuration->complementary==RT_TRUE) 23{ 24timer_channel_complementary_output_state_config(index_to_timer(pstTimerMap->TimerIndex),channel, 25TIMER_CCXN_ENABLE); 26} 27} 28LOG_I("pwm[%d][%d]enable:%d!",pstTimerMap->TimerIndex,channel,enable); 29returnRT_EOK; 30}

构建管理文件适配

接下来修改对应的SConscript文件和Kconfig文件。先在”librariesgd32_drivers”下的SConscript文件内添加如下代码,即开启RT_USING_PWM宏后,就把上面移植过来的“drv_pwm.c”添加到工程内。


		

1#addpwmdrivers. 2ifGetDepend('RT_USING_PWM'): 3src+=['drv_pwm.c']

最后在“board”目录下的Kconfig文件内,添加如下代码。利用select语句联动了RT_USING_PWM定义,我这里开启了6路PWM的配置:


		

1menuconfigBSP_USING_PWM 2bool"EnablePWM" 3defaultn 4selectRT_USING_PWM 5ifBSP_USING_PWM 6configRT_USING_PWM1 7bool"EnablePWM1" 8defaultn 9ifRT_USING_PWM1 10configRT_USING_PWM1_NAME 11string"PWMDEVNAME" 12defaultPWM1 13configRT_USING_PWM1_TIMER_INDEX 14int"TimerIndex" 15default0 16configRT_USING_PWM1_OP_PORT 17string"PWMoutput_PPort(A,B,C...)" 18defaultA 19configRT_USING_PWM1_OP_PIN 20int"PWMoutput_Ppin(0~15)" 21default0 22configRT_USING_PWM1_ON_PORT 23string"PWMoutput_NPort(A,B,C...)" 24defaultA 25configRT_USING_PWM1_ON_PIN 26int"PWMoutput_Npin(0~15)" 27default0 28configRT_USING_PWM1_CH 29int"PWMoutputchannel" 30default0 31endif 32configRT_USING_PWM2 33bool"EnablePWM2" 34defaultn 35ifRT_USING_PWM2 36configRT_USING_PWM2_NAME 37string"PWMDEVNAME" 38defaultPWM2 39configRT_USING_PWM2_TIMER_INDEX 40int"TimerIndex" 41default0 42configRT_USING_PWM2_OP_PORT 43string"PWMoutput_PPort(A,B,C...)" 44defaultA 45configRT_USING_PWM2_OP_PIN 46int"PWMoutput_Ppin(0~15)" 47default0 48configRT_USING_PWM2_ON_PORT 49string"PWMoutput_NPort(A,B,C...)" 50defaultA 51configRT_USING_PWM2_ON_PIN 52int"PWMoutput_Npin(0~15)" 53default0 54configRT_USING_PWM2_CH 55int"PWMoutputchannel" 56default0 57endif 58configRT_USING_PWM3 59bool"EnablePWM3" 60defaultn 61ifRT_USING_PWM3 62configRT_USING_PWM3_NAME 63string"PWMDEVNAME" 64defaultPWM3 65configRT_USING_PWM3_TIMER_INDEX 66int"TimerIndex" 67default0 68configRT_USING_PWM3_OP_PORT 69string"PWMoutput_PPort(A,B,C...)" 70defaultA 71configRT_USING_PWM3_OP_PIN 72int"PWMoutput_Ppin(0~15)" 73default0 74configRT_USING_PWM3_ON_PORT 75string"PWMoutput_NPort(A,B,C...)" 76defaultA 77configRT_USING_PWM3_ON_PIN 78int"PWMoutput_Npin(0~15)" 79default0 80configRT_USING_PWM3_CH 81int"PWMoutputchannel" 82default0 83endif 84configRT_USING_PWM4 85bool"EnablePWM4" 86defaultn 87ifRT_USING_PWM4 88configRT_USING_PWM4_NAME 89string"PWMDEVNAME" 90defaultPWM4 91configRT_USING_PWM4_TIMER_INDEX 92int"TimerIndex" 93default0 94configRT_USING_PWM4_OP_PORT 95string"PWMoutput_PPort(A,B,C...)" 96defaultA 97configRT_USING_PWM4_OP_PIN 98int"PWMoutput_Ppin(0~15)" 99default0 100configRT_USING_PWM4_ON_PORT 101string"PWMoutput_NPort(A,B,C...)" 102defaultA 103configRT_USING_PWM4_ON_PIN 104int"PWMoutput_Npin(0~15)" 105default0 106configRT_USING_PWM4_CH 107int"PWMoutputchannel" 108default0 109endif 110configRT_USING_PWM5 111bool"EnablePWM5" 112defaultn 113ifRT_USING_PWM5 114configRT_USING_PWM5_NAME 115string"PWMDEVNAME" 116defaultPWM5 117configRT_USING_PWM5_TIMER_INDEX 118int"TimerIndex" 119default0 120configRT_USING_PWM5_OP_PORT 121string"PWMoutput_PPort(A,B,C...)" 122defaultA 123configRT_USING_PWM5_OP_PIN 124int"PWMoutput_Ppin(0~15)" 125default0 126configRT_USING_PWM5_ON_PORT 127string"PWMoutput_NPort(A,B,C...)" 128defaultA 129configRT_USING_PWM5_ON_PIN 130int"PWMoutput_Npin(0~15)" 131default0 132configRT_USING_PWM5_CH 133int"PWMoutputchannel" 134default0 135endif 136configRT_USING_PWM6 137bool"EnablePWM6" 138defaultn 139ifRT_USING_PWM6 140configRT_USING_PWM6_NAME 141string"PWMDEVNAME" 142defaultPWM6 143configRT_USING_PWM6_TIMER_INDEX 144int"TimerIndex" 145default0 146configRT_USING_PWM6_OP_PORT 147string"PWMoutput_PPort(A,B,C...)" 148defaultA 149configRT_USING_PWM6_OP_PIN 150int"PWMoutput_Ppin(0~15)" 151default0 152configRT_USING_PWM6_ON_PORT 153string"PWMoutput_NPort(A,B,C...)" 154defaultA 155configRT_USING_PWM6_ON_PIN 156int"PWMoutput_Npin(0~15)" 157default0 158configRT_USING_PWM6_CH 159int"PWMoutputchannel" 160default0 161endif 162endif

到此,就可以利用menuconfig或者IDE的图形界面进行配置了:

wKgaomULQ4uAdy7mAAFPhRDREIE930.jpg

实现效果


为了测试效果,我这里在main函数内对6路PWM进行了初始化:


		

1rt_device_tpwm1_LA=RT_NULL,pwm2_LB=RT_NULL,pwm3_LC=RT_NULL,pwm4_RA=RT_NULL,pwm5_RB=RT_NULL,pwm6_RC=RT_NULL; 2intmain(void) 3{ 4... 5... 6pwm1_LA=rt_device_find(RT_USING_PWM1_NAME); 7if(pwm1_LA!=RT_NULL) 8{ 9structrt_device_pwm*pwm_dev=(structrt_device_pwm*)pwm1_LA; 10rt_pwm_set(pwm_dev,RT_USING_PWM1_CH+1,10000,5000); 11rt_pwm_enable(pwm_dev,-(RT_USING_PWM1_CH+1)); 12rt_kprintf("%sinitOK! ",pwm_dev->parent.parent.name); 13} 14pwm2_LB=rt_device_find(RT_USING_PWM2_NAME); 15if(pwm2_LB!=RT_NULL) 16{ 17structrt_device_pwm*pwm_dev=(structrt_device_pwm*)pwm2_LB; 18rt_pwm_set(pwm_dev,RT_USING_PWM2_CH+1,10000,1000); 19rt_pwm_enable(pwm_dev,-(RT_USING_PWM2_CH+1)); 20rt_kprintf("%sinitOK! ",pwm_dev->parent.parent.name); 21} 22pwm3_LC=rt_device_find(RT_USING_PWM3_NAME); 23if(pwm3_LC!=RT_NULL) 24{ 25structrt_device_pwm*pwm_dev=(structrt_device_pwm*)pwm3_LC; 26rt_pwm_set(pwm_dev,RT_USING_PWM3_CH+1,10000,8000); 27rt_pwm_enable(pwm_dev,-(RT_USING_PWM3_CH+1)); 28rt_kprintf("%sinitOK! ",pwm_dev->parent.parent.name); 29} 30pwm4_RA=rt_device_find(RT_USING_PWM4_NAME); 31if(pwm4_RA!=RT_NULL) 32{ 33structrt_device_pwm*pwm_dev=(structrt_device_pwm*)pwm4_RA; 34rt_pwm_set(pwm_dev,RT_USING_PWM4_CH+1,10000,5000); 35rt_pwm_enable(pwm_dev,-(RT_USING_PWM4_CH+1)); 36rt_kprintf("%sinitOK! ",pwm_dev->parent.parent.name); 37} 38pwm5_RB=rt_device_find(RT_USING_PWM5_NAME); 39if(pwm5_RB!=RT_NULL) 40{ 41structrt_device_pwm*pwm_dev=(structrt_device_pwm*)pwm5_RB; 42rt_pwm_set(pwm_dev,RT_USING_PWM5_CH+1,10000,1000); 43rt_pwm_enable(pwm_dev,-(RT_USING_PWM5_CH+1)); 44rt_kprintf("%sinitOK! ",pwm_dev->parent.parent.name); 45} 46pwm6_RC=rt_device_find(RT_USING_PWM6_NAME); 47if(pwm6_RC!=RT_NULL) 48{ 49structrt_device_pwm*pwm_dev=(structrt_device_pwm*)pwm6_RC; 50rt_pwm_set(pwm_dev,RT_USING_PWM6_CH+1,10000,8000); 51rt_pwm_enable(pwm_dev,-(RT_USING_PWM6_CH+1)); 52rt_kprintf("%sinitOK! ",pwm_dev->parent.parent.name); 53} 54... 55... 56}

还实现了一个如下的测试命令,这样除了可以使用驱动里实现的PWM命令外,也可以使用自己的测试命令测试,更方便一些:


		

1staticintmotorLA_pwm(intargc,char**argv) 2{ 3rt_err_tresult=RT_EOK; 4rt_uint32_tperiod,pulse; 5structrt_device_pwm*pwm_dev=(structrt_device_pwm*)pwm1_LA; 6if(argc>=3) 7{ 8period=atoi(argv[1]); 9pulse=atoi(argv[2]); 10rt_pwm_set(pwm_dev,RT_USING_PWM1_CH+1,period,pulse); 11rt_kprintf("set%s:[period]%d-[pulse]%d! ",pwm_dev->parent.parent.name,period,pulse); 12} 13else{ 14rt_kprintf("Usage: "); 15rt_kprintf("motorXN_pwm-setthepwm'speriodandpulse "); 16rt_kprintf("eg:motorLA_pwm100005000issetmotorLApwm'speriodto10us,pulseto5us "); 17result=-RT_ERROR; 18} 19returnRT_EOK; 20} 21MSH_CMD_EXPORT(motorLA_pwm,motorLA_pwm);

下图是开机上电终端打印的信息,由于我开启了PWM驱动的调试,所以打印了很多相关的调试信息:

wKgaomULQ4uANDJQAAL2ifgyy_c159.jpg

如下是测试的PWM1的波形输出,黄色的通道一测试的正向PWM信号,蓝色的通道二测试的是互补的反向PWM信号:

wKgaomULQ4uAS27MAAE7fPqxnlw980.jpg

下图是设置PWM1的占空比为1/10后的效果:

wKgaomULQ4uAKevKAAE_JETvkok422.jpg

相关链接


本系列首篇文章连接:

https://club.rt-thread.org/ask/article/5c0c4ba7eb4ab1ad.html

———————End——————

点击阅读原文进入官网


原文标题:无刷电机小车开发记录04——互补PWM驱动移植

文章出处:【微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。


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

    关注

    114

    文章

    5056

    浏览量

    212170
  • RT-Thread
    +关注

    关注

    31

    文章

    1239

    浏览量

    39425

原文标题:无刷电机小车开发记录04——互补PWM驱动移植

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    其利天下技术·低速无刷电机如何更好的控制?无刷电机驱动方案开发

    需要低速运转的无刷电机经常运用在电动车、机器人关节、医疗设备等场景。最近有客户找到我们开发无刷电机驱动方案,他的需求是低转速,而且需要精准控制电流。经常
    的头像 发表于 09-09 11:50 135次阅读
    其利天下技术·低速<b class='flag-5'>无刷电机</b>如何更好的控制?<b class='flag-5'>无刷电机</b><b class='flag-5'>驱动</b>方案<b class='flag-5'>开发</b>

    无刷电机驱动芯片方案的选择至关重要

    在当今科技飞速发展的时代,无刷电机因其高效、低噪、长寿命等显著优势,在众多领域得到了广泛应用,从工业自动化到智能家居,从电动汽车到航空航天。而在无刷电机系统中,驱动芯片方案的选择至关重要,它直接影响
    的头像 发表于 09-05 17:28 199次阅读

    其利天下技术开发·无刷电机常见的5种启动方式·无刷电机驱动方案

    作为经常跟无刷电机打交道的驱动方案商,能够根据不同的无刷电机选择匹配的启动方式,是基本的技术要求。今天分享一下,无刷电机常见的启动方式有哪些?分别又有什么优缺点呢?
    的头像 发表于 08-21 10:59 262次阅读
    其利天下技术<b class='flag-5'>开发</b>·<b class='flag-5'>无刷电机</b>常见的5种启动方式·<b class='flag-5'>无刷电机</b><b class='flag-5'>驱动</b>方案

    PWM驱动电机发热的原因

    一、PWM驱动电机的基本原理 1.1 PWM的概念 PWM(Pulse Width Modulation,脉冲宽度调制)是一种数字信号处理技
    的头像 发表于 08-08 15:25 392次阅读

    其利天下技术·无刷电机常见的5种启动方式及优缺点·无刷电机驱动方案设计开发

    作为经常跟无刷电机打交道的驱动方案商,能够根据不同的无刷电机选择匹配的启动方式,是基本的技术要求。今天分享一下,无刷电机常见的启动方式有哪些?分别又有什么优缺点呢?   其利天下·
    的头像 发表于 08-07 10:26 385次阅读
    其利天下技术·<b class='flag-5'>无刷电机</b>常见的5种启动方式及优缺点·<b class='flag-5'>无刷电机</b><b class='flag-5'>驱动</b>方案设计<b class='flag-5'>开发</b>

    无刷电机驱动原理 直流有刷电机无刷电机的差异

    在上期芝识课堂中,我们一起认识了东芝无刷电机的基本知识,对于生活中无处不在的无刷电机,了解它的更多知识才能上手开发哦~今天芝子就带你一起来学习无刷电机
    的头像 发表于 07-19 14:29 893次阅读
    <b class='flag-5'>无刷电机</b>的<b class='flag-5'>驱动</b>原理 直流有刷<b class='flag-5'>电机</b>和<b class='flag-5'>无刷电机</b>的差异

    无刷电机驱动器的工作原理和结构组成

    无刷电机驱动器,也被称为无刷电调或无刷电机电子调速器,是一种能有效控制电机转速、扭矩和位置的新型电机驱动
    的头像 发表于 06-12 16:54 1462次阅读

    其利天下技术·无刷电机弱磁控制是什么?有什么好处·BLDC驱动方案

    作为一个无刷电机驱动方案开发商,我们在开发产品的时候就会用到“弱磁控制技术”。比如,我们开发的吸尘器方案时就会用到。什么是弱磁控制技术,它又
    的头像 发表于 06-07 18:42 585次阅读
    其利天下技术·<b class='flag-5'>无刷电机</b>弱磁控制是什么?有什么好处·BLDC<b class='flag-5'>驱动</b>方案

    CS32F03X生成多路PWM控制无刷电机换相

    本技术文档旨在帮助用户快速配置 MCU CS32F03X 输出多路经过调制的 PWM 波,用于控制直流无刷电机(BLDC)换相。HPWM-LON 是直流无刷电机较为常用的 PWM 调制
    发表于 05-16 10:41

    无刷电机是什么意思 无刷电机是交流还是直流

    无刷电机(Brushless Motor)是一种将电能转换为机械能的驱动装置,也被称为无刷直流电机(BLDC Motor)。与传统的有刷电机相比,
    的头像 发表于 02-01 13:57 1.1w次阅读

    无刷电机驱动板怎么接线

    无刷电机驱动板是现代电子设备中常用的一种驱动模块,主要用于驱动无刷电机无刷电机具有高效、低噪音
    的头像 发表于 12-14 11:22 3855次阅读

    pwm是怎么驱动电机的?

    pwm是怎么驱动电机的? 本文将详尽探讨脉宽调制(PWM)技术及其在电机驱动中的应用。首先,我们
    的头像 发表于 12-07 15:48 1494次阅读

    无刷电机小车开发记录03——PWM信号输入捕获驱动

    前言   好吧,转眼一看,距离上一篇文章已经过去了两个月了。只能说工作和家庭的各种事情确实太多了,人到中年属于自己的时间确实越来越少了,再不过来调一下这个小车估计都要生锈了。所以今天过来接着做下一步
    的头像 发表于 10-20 02:00 715次阅读
    <b class='flag-5'>无刷电机</b><b class='flag-5'>小车</b><b class='flag-5'>开发</b><b class='flag-5'>记录</b>03——<b class='flag-5'>PWM</b>信号输入捕获<b class='flag-5'>驱动</b>

    无刷电机必须要驱动器才能转吗?

    ,例如汽车、工业、医疗、家电等。 然而,无刷电机需要特殊的驱动器才能转动。这是因为无刷电机的控制信号是脉冲宽度调制(PWM)信号,电机
    的头像 发表于 09-28 17:25 3251次阅读

    3相无感无刷电机51驱动程序

    本程序调试通过。由STC51单片机1T系列运行,通过检测外部3路比较器的换相信号完成换相,硬件驱动设计好,理论可以驱动任何没有霍尔元件的无感无刷电机,比如硬盘,航模的无刷电机等,通过程
    发表于 09-21 08:16