好盈无刷电调驱动-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之后就马上调用,之后不在设置油门行程,就可以直接设置推进器速度。
好盈无刷电调驱动-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之后就马上调用,之后不在设置油门行程,就可以直接设置推进器速度。
举报