完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
最近在搞一个水下推进器,这东西的控制其实跟四旋翼的螺旋桨控制差不多。但我也是第一次用STM32板子来控制电调驱动桨叶旋转,因此踩了很多坑。网上找了很多资料,但是很多都写的不是很清楚,这边稍微记录一下怎么解决。大家买来的电调可能会有所不同,但是总体的控制思路是一样的,所以我相信你看完我这篇文章之后肯定能直接上手了。
电调基础 这是我这次买的ESC30电调(具体链接戳这里)。这图已经很清楚了,上面的红黑两条粗线就是用来接电池(3S和4S的均可)的,你可以买一个接线端子然后把电源盒这两根线接一块。然后黑白二线是信号线,白线接的是信号,黑线接的是地。下面的白绿蓝三线就是接到你电机上用来控制的三相线,关于无刷电机内容我这边就不展开讲了。 这里再稍微补充一点,常用的航模电调的信号线应该是三根线(红白黑)。对应的,白线仍然接PWM信号,黑线接地,红线接电。 在你买来开始调试控制之前,请务必仔细看一下这个电调的相关参数,这很重要!常用的航模电调一般都是单向的,也就是只能单方向旋转,但是以我这个为例,这是双向电调。 主要看信号这一栏,可以总结的内容如下: PWM波控制(一般来说电调都是在50Hz下的PWM波进行控制的,也就是20ms); 中位停止(这里一般指的都是高电平的占空比)1.5ms,实际在1.475ms到1.525ms之间都是出于中位停止; 控制范围在1ms至2ms,其中由于死区存在,因此实际控制范围为1.1ms到1.9ms之间; 1.5ms到1.9ms出于正转,1.1ms到1.5ms出于反转。 官方给出的控制程序是基于Arduino的,可以简单参考一下: #include byte servoPin = 9; Servo servo; void setup() { servo.attach(servoPin); servo.writeMicroseconds(1500); // send "stop" signal to ESC. delay(1000); // delay to allow the ESC to recognize the stopped signal } void loop() { int signal = 1700; // Set signal value, which should be between 1100 and 1900 servo.writeMicroseconds(signal); // Send signal to ESC. } 注意:电调使用之前是需要解锁的!你接上电源之后电调会响3声,然后解锁成功之后电调会再响2声,总共5声。解锁不成功是无法使用电调进行控制的。 因此我们参考上述代码(当然你可以问客服),可以得出结论,ESC30C的解锁方式就是在初始化之后先设定到中位信号,等待信号接收后(响两声)才能开始调速。 控制及调试方法 我是用STM32F7的开发板,使用HAL库进行编程调试的,实际上就是一个定时器输出PWM波的事(蛮简单的这里就只挑部分说)。但是这之中有很多需要注意的事项,很多细节不清楚真的很耽误时间和精力,这边简单说一下我调试的经验。 首先是在定时器中配置PWM波时,注意不要将其初始化为你的解锁信号,给他一个随机值,或者要么就不配置。因为电调解锁是在定时器以及PWM初始化之后才进行的,以我这个为例,1.5ms中位停止信号是它的解锁信号,那你就不能在配置PWM的时候一开始就将它配置为1.5ms,否则电调在开机三声之后只会在响一声,然后你的桨叶仍不会转。 //配置PWM波 TIM3_CH1Handler.OCMode = TIM_OCMODE_COMBINED_PWM1; //PWM模式1,CNT < CCRx值时为有效电平 TIM3_CH1Handler.OCPolarity = TIM_OCPOLARITY_HIGH; //高电平为有效电平 //TIM3_CH1Handler.Pulse = 15; //此处不配置,否则电调无法完成解锁 HAL_TIM_PWM_ConfigChannel(&TIM3_Handler, &TIM3_CH1Handler, TIM_CHANNEL_1); //TIM3通道1配置,即PA6 其次,注意使用延时。开始时我并没有采用延时,导致的结果就是电调只哔了一声之后就是没有反应,后面在用示波器观察PWM波的时候发现自己初始化的PWM就直接一闪而过了,再查阅资料发现需要给电调接收解锁信号的时间。但是这个时间也是有讲究的,一开始我是用的是 delay_us()进行配置,问题无法解决,后来改用 delay_ms(1000) 也就是配置1s的时间,仍然有问题,后面把时间再次调大之后才最终听到两声哔,然后电机就开始转动了。因此如何把握这个解锁信号的接收时间很重要。 //电调初始化,初始化脉宽随机 TIM3_PWM_Init(199, 10799); delay_ms(1000); //电调解锁:1.给电调发送中位信号;2.延时等待解锁完成,延时时间t≥1.5s TIM_SetTIM3Compare(15); delay_ms(1500); 还有在使用过程中注意学会配合示波器检查自己配置的信号是否有问题。下面是我一开始初始化的1.5ms占空比的PWM波,周期20ms,幅值3.3V。 总结起来,整个过程中要注意:
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 05:49 , Processed in 0.637338 second(s), Total 44, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号