[嵌入式] 【求助帖】无刷电机的控制

  [复制链接]
正式队员geansDZ
2016-1-18 16:46:49 显示全部楼层

马上注册,玩转Robomaster!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一般大家都是用STM32控制无刷电机,要是用ardhuino 控制的话,代码怎么写?
跳转到指定楼层

[嵌入式] 【求助帖】无刷电机的控制

  [复制链接]
基地Robo-OCM
2016-1-20 15:34:03 显示全部楼层
本帖最后由 Robo-OCM 于 2016-1-20 15:41 编辑

想法用arduino的pwm脚,通过analogWrite 输出pwm信号就可以驱动电调的。写了个程序一试,不行,电机就是B-B的叫,一些朋友用Servo库以控制舵机的方式来驱动电调。说arduino的analogWrite输出跟Servo的不是一个,后来我用Servo库试了一下,电机是可以动起来了,但是只动了一下,又停了 为什么用Servo就可以,而用analogWrite 输出的PWM信号就不行了呢。书上说analogWrite 产生的是一个大约490Hz的占空比可变的脉冲序列,控制无刷电调要使用20ms的PWM信号应该就是这个原因吧。

不用Servo来驱动舵。我尝试用它来控制我的无刷电调,但是一开始是失败的。后来我看到电调的说明书, 原来这电调可高级了,还可以进入编程模式啥的。而且电调首次使用,没调制好油门行程,也是不能驱动电机的。但是我手头上并没有遥控器,于是改了一下代码,模拟设置油门行程。设置好了之后,电机终于转起来了!

int sp1=9;//定义舵机接口数字接口7
int pulsewidth;//定义脉宽变量
int val;
int val1;
int myangle1;
//下面是servopulse函数部分(此函数意思:也就是說每次都是0.5ms高電平 1.98ms低電平 然後再0.52ms低電平 17ms延時也是低電平)
void servopulse(int sp1,int val1)//定义一个脉冲函数
{
  myangle1=map(val1,0,180,500,2480);
  digitalWrite(sp1,HIGH);//将舵机接口电平至高
  delayMicroseconds(myangle1);//延时脉宽值的微秒数
  digitalWrite(sp1,LOW);//将舵机接口电平至低
  delay(20-val1/1000);
}
//servopulse函数部分到此结束
void setup()
{
  pinMode(sp1,OUTPUT);//设定舵机接口为输出接口
  //设置两组串口波特率
  Serial.begin(9600);
  
  Serial.println("servu=o_seral_simple ready" ) ;
  
  //看电调说明书,设置油门行程时,一开始需要把遥控器打到最高点。i<=110大概是2杪多
  for(int i=0;i<=110;i++)
    {
      servopulse(sp1,150);//引用脉冲函数
    }
   
//等电机发出B-B两声后(就是两秒后,大概就是这里了)把油门打到最低点
    for(int i=0;i<=55;i++)
    {
      servopulse(sp1,20);//引用脉冲函数
    }
   
//后面提示后,就可以控制电机转动了
    for(int i=0;i<=150;i++)
    {
      servopulse(sp1,150);//引用脉冲函数
    }
   
    Serial.println("hello world" ) ;
  
}

void loop()//将0到9的数转化为0到180角度,并让LED闪烁相应数的次数
{
  val='8';

  if(val>'0'&& val<='9')
  {
    val1=val-'0';//将特征量转化为数值变量
    val1=map(val1,0,9,0,180);//将角度转化为500-2480的脉宽值
    Serial.print("moving servo to ");
    Serial.print(val1,DEC);
    Serial.println();
    for(int i=0;i<=50;i++)//给予舵机足够的时间让它转到指定角度
    {
      servopulse(sp1,val1);//引用脉冲函数
    }
  }

}





望采纳,(*^__^*) 嘻嘻……




[嵌入式] 【求助帖】无刷电机的控制

  [复制链接]
英雄eva1244
2016-1-20 16:21:09 显示全部楼层
首先,如果想省事,无刷电机还是用无刷电调驱动,上面的同学已经说过了,油门行程要设置,启动时候要给到最低的油门点的PWM占空比(1ms高电平/20ms周期),否则电机就哔哔叫,这也是为了安全考虑,另外某些电调除了开机要在最低油门的PWM占空比以外,还要设置在最高油门点(2ms高电平/20ms周期)
然后如果想做一些直接用控制器驱动MOS管驱动无刷电机的工作,建议直接看github上各个开源项目,https://github.com/bitdump/BLHeli  这是一个无刷电子调速器的项目用于四轴/电直的无刷电调

[嵌入式] 【求助帖】无刷电机的控制

  [复制链接]
补给站robomasters
2016-1-19 23:27:44 显示全部楼层
悬赏:哪位小伙伴能提供优秀答案,并被楼主采纳,小R打赏20金币。
积少成多啦~ 累计回答满30个被采纳问题会获得论坛特别勋章。

[嵌入式] 【求助帖】无刷电机的控制

  [复制链接]
英雄Faulker
2016-1-20 01:19:10 显示全部楼层
淘宝搜索arduino can-bus shield,这基本是唯一的选择虽然它并不那么好用。can对于常见的arduino板子比如mega,uno一类来说略有些高端了,本身芯片没有硬件支持用起来就很不舒服,软件模拟又没法达到那么高频率,所以实在是不太容易

[嵌入式] 【求助帖】无刷电机的控制

  [复制链接]
工程Bonbon
2016-1-20 15:22:20 来自手机 显示全部楼层
网上有开源的,arduino写的

[嵌入式] 【求助帖】无刷电机的控制

  [复制链接]
基地Robo-OCM
2016-1-20 17:40:14 显示全部楼层
robomasters 发表于 2016-1-19 23:27
悬赏:哪位小伙伴能提供优秀答案,并被楼主采纳,小R打赏20金币。
积少成多啦~ 累计回答满30个被采纳问 ...

我已经回答,布吉岛能不能采纳,(*^__^*) 嘻嘻……

[嵌入式] 【求助帖】无刷电机的控制

  [复制链接]
英雄Faulker
2016-1-21 13:47:56 显示全部楼层
咦,原来是控制2312啊,我还以为是指的ec60之类的的

[嵌入式] 【求助帖】无刷电机的控制

  [复制链接]
补给站robomasters
2016-1-22 17:11:07 显示全部楼层
小伙伴看到那个对你最有用的答案请翻牌噢~

[嵌入式] 【求助帖】无刷电机的控制

  [复制链接]
正式队员geansDZ
 楼主| 2016-1-31 12:32:34 显示全部楼层
Robo-OCM 发表于 2016-1-20 15:34
想法用arduino的pwm脚,通过analogWrite 输出pwm信号就可以驱动电调的。写了个程序一试,不行,电机就是B-B ...

好棒!我去试一下你的方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

触屏版 | 电脑版

Copyright © 2024 RoboMasters 版权所有 备案号 粤ICP备2022092332号

快速回复 返回顶部 返回列表