完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
1个回答
|
|
好盈无刷电调驱动-stm32与arduino控制电调
电调驱动原理以及注意事项 原理: 电调每次上电(电调由板子供电),即板子每次启动,都要给电调设置油门行程:最高油门与最低油门,方式是:调制一个占空比高一点pwn波设置最高油门与调制一个占空比低一点pwn波设置最低油门,这里的占空比是指一个pwn周期内高电平持续的时间,即高电平脉宽。 电调图为: 6V/5A:电调输出电压是6v,即电调的vcc与gen之间为6v,5A不知道啥意思 2-6S Lipo是指2到6个锂电池(大概3.7V,具体百度) P:pwn输入 R:6V输出 G:地线 电路图如下: 一个12V的铅酸蓄电池+一个arduino MEGA 2560(stm32)+电调+电机,接线的时候注意电调输出的三相不要接触(图中用红色胶布绝缘),电调的三个引脚中只有P与G接板子引脚,不要搞错了!!! 操作方式与现象: 1、打开电调电源开关,使得电路导通; 2、打开单片机开关 3、电调与电机发出两声短的“”滴”~“”滴”,在发出一声长的滴,油门行程设置完成; 4、单片机给一个油门控制信号(代码中写好的),电机转动。 注意事项: 1、设置油门行程与操控油门时,pwn波频率为50HZ,即周期为20ms; 2、设置油门行程与操控油门时,不是调制pwn波输出电压,而是调制pwn一个周期内(这里为20ms)中高电平持续的时间,这里一定要切记,作者在这里被坑了; 3、油门行程一旦设置好了,只要电调的控制线,即P与G之间信号一直有,电调的电源通与不通都没有影响,比如说:先设置好了油门行程、然后把电调电源线断开,此时如果单片机不掉电的话,重新给电调接上电源线,此时单片机不需要再设置油门行程,直接给一个油门控制信号就可以让推进器转动; 4、推进器速度大小控制:给定一个在油门行程中的脉宽,脉宽越大,速度越快,脉宽越小,速度越小,如何使得控制推进器速度更加平滑,需要多次测试。 arduino控制电调 我用的是arduino MEGA 2560 这里参考了Mr.forgetful的博客:https://blog.csdn.net/weixin_43426470/article/details/89415726,感谢大佬! 代码如下: void setup(){ pinMode(9,OUTPUT);//选取9号引脚接电调信号线 /*油门行程校准(i<=1000时,整个循环用时3-4秒)*/ //该循环运行时会伴有“哔-哔-”油门最高点确认音 for(int i=0;i<=1000;i++){ digitalWrite(9,HIGH); delayMicroseconds(2000);//高电平持续2000微秒(油门最高点,脉宽为2毫秒) digitalWrite(9,LOW); delayMicroseconds(18000);} //该循环运行时会伴有N声短鸣声(表示锂电池节数)和“哔-”油门最低点确认音 for(int i=0;i<=1000;i++){ digitalWrite(9,HIGH); delayMicroseconds(1000);//高电平持续1000微秒(油门最低点,脉宽为1毫秒) digitalWrite(9,LOW); delayMicroseconds(19000); } /*现在可以加大高电平持续时间,即加大油门,实现电机的启动 */ //该循环运行的时间即电机低速转动的时间,进一步证明了i<=1000时,整个循环用时3-4秒 for(int i=0;i<=1000;i++){ digitalWrite(9,HIGH); delayMicroseconds(1100);//油门1100 digitalWrite(9,LOW); delayMicroseconds(18900); } } //loop()函数使油门保持在1600 void loop(){ for(int i=0;i<=1000;i++){ digitalWrite(9,HIGH); delayMicroseconds(1600); digitalWrite(9,LOW); delayMicroseconds(18400); } } 这里的for循环内部就是一个周期了,可以看到这里电调的频率是50HZ,周期是20ms,最大油门2ms,最小油门1ms,下面是我测得的高电平脉宽-输出电压-速度表: 高电平持续时间 pwn输出电压 速度 1100 1.50 慢 1150 1.57 1200 1.60 1250 1.65 1300 1.70 1350 1.78 较快 1400 1.84 1450 1.91 1500 2.04 快 ≥1500 没测试 估计很快 stm32控制电调 代码如下: int main(void) { delay_init(); //延时函数初始化 TIM4_PWM_Init(); //定时器初始化 周期为20ms delay_ms(2000); //延时2s TIM_SetCompare1(TIM4, 320); //设置最高油门 脉宽3.2 ms delay_ms(20000); //延时2s delay_ms(20000); //延时2s TIM_SetCompare1(TIM4, 90); //设置最低油门 脉宽0.9 ms delay_ms(20000); //延时2s delay_ms(20000); //延时2s while(1) { TIM_SetCompare1(TIM4, 140);//设置油门 脉宽1.4 ms,此时推进器按照一定速度转动 } } 源代码链接下载: 链接:https://pan.baidu.com/s/1syOTvJleUZ-gDtnlHwW-Sg 提取码:gg*** 电调的P与G分别接stm的Pin_12与Pin_13,电调驱动放在真实的项目中的话,需要将上述设置油门代码写成一个函数,在main函数GPIOinit之后就马上调用,之后不在设置油门行程,就可以直接设置推进器速度。 |
|
|
|
只有小组成员才能发言,加入小组>>
2371 浏览 0 评论
8683 浏览 4 评论
36409 浏览 18 评论
4967 浏览 0 评论
24179 浏览 34 评论
1335浏览 2评论
1584浏览 1评论
1952浏览 1评论
1398浏览 0评论
1833浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 11:24 , Processed in 0.887772 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号