5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 50351|回复: 111
打印 上一主题 下一主题

空心杯电机寿命

  [复制链接]
跳转到指定楼层
楼主
发表于 2014-4-18 18:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
迷你四轴的空心杯电机寿命,网上到处找都没有可靠的参考数据,从各种帖子里似乎感觉到空心杯电机的寿命比碳刷电机长了不少。寿命长的主要原因,可能是因为换向器直径更小,电刷的摩擦距离变短。究竟能飞几个电,看来要测试一下才能知道。这个帖子用Arduino模拟四轴飞行状态,测试订制的8520空心杯电机的使用寿命。电路很简单,用PIN9输出PWM信号驱动一个IRF630的NMOS来驱动电机,用中断1来计数测速
飞行模拟一次的循环总共50秒:

21750转 30秒 悬停
23100转 2秒 上升
18150转 3秒 下降
24000转 2秒 全油门上升
21750转 10秒 悬停
18150转 3秒 下降


循环6次总共5分钟,然后停止1分钟,然后开始新的循环。在运行过程中用光电传感器测速,如果电机报废就自动停止















欢迎继续阅读楼主其他信息

沙发
发表于 2014-4-18 20:35 | 只看该作者
!!楼主赤裸裸的技术宅!顶起
3
发表于 2014-4-18 21:49 | 只看该作者
静候结果
4
 楼主| 发表于 2014-4-18 22:04 | 只看该作者
#include <EEPROM.h>

int PWM_Pin = 9;
int Speed_Pin = 3;
int count;
char failed;

volatile unsigned int rotate_count;

void rotate()
{
  rotate_count++;
}

void setup()
{
  pinMode(Speed_Pin, INPUT);
  pinMode(PWM_Pin, OUTPUT);
  digitalWrite(PWM_Pin, LOW);

  failed = 0;
  
  Serial.begin(9600);
  
  count = EEPROM.read(2);
  int value = EEPROM.read(1);
  count = count*256 + value;
}

void run_a_speed(unsigned char pwm, int second, char print_speed)
{
  analogWrite(PWM_Pin, pwm);
  delay(500);
  
  rotate_count = 0;
  attachInterrupt(1, rotate, FALLING);
  delay(200);
  detachInterrupt(1);
  
  if(rotate_count<5)
  {
    failed = 1;
    return;
  }
  
  if(print_speed)
  {
    Serial.print(150*rotate_count, DEC);
    Serial.print(" ");
  }
  
  delay(300);
  
  if(second==1) return;
  
  for(int c=0;c<(second-1)*5;c++)
  {
    rotate_count = 0;
    attachInterrupt(1, rotate, FALLING);
    delay(200);
    detachInterrupt(1);
  
    if(rotate_count<5)
    {
      failed = 1;
      return;
    }
  }
}

void loop()
{
  Serial.print(count, DEC);
  Serial.print(" ");

  for(char c=0;c<6;c++)
  {
    run_a_speed(130, 30, 1); if(failed) break; // 21750 RPM
    run_a_speed(150, 2, 0); if(failed) break; // 23100 RPM
    run_a_speed(90, 3, 0); if(failed) break; // 18150 RPM
    run_a_speed(160, 2, 0); if(failed) break; // 24000 RPM
    run_a_speed(130, 10, 0); if(failed) break; // 21750 RPM
    run_a_speed(90, 3, 0); if(failed) break; // 18150 RPM
  }
  
  Serial.println();
  
  if(failed)
  {
    analogWrite(PWM_Pin, 0);
    Serial.println("failed");
    for(;;);
  }
  
  count++;

  EEPROM.write(2, count/256);
  EEPROM.write(1, count & 0xFF);

  analogWrite(PWM_Pin, 0);
  
  delay(60000);
}

5
发表于 2014-4-18 22:30 | 只看该作者
等待结果
6
 楼主| 发表于 2014-4-18 22:32 | 只看该作者
现在模拟了60个电,太吵了,明天继续
7
发表于 2014-4-18 22:44 | 只看该作者
60个电是什么意思?电池冲放60次吗
8
 楼主| 发表于 2014-4-18 22:53 | 只看该作者
luyonghui 发表于 2014-4-18 22:44
60个电是什么意思?电池冲放60次吗

运行一次5分钟,休息1分钟,运行了60次,小四轴飞一个电大概是5分钟


9
 楼主| 发表于 2014-4-18 22:56 | 只看该作者
运行过程中,电脑串口有时会收不到数据,在电机的两极之间加了一个104消火花电容,现在串口正常了可以一直收到数据
10
发表于 2014-4-18 22:59 | 只看该作者
很无聊的去查了一下 for(char c=0;;)唉,c语言忘光了
来自安卓客户端
11
 楼主| 发表于 2014-4-18 23:02 | 只看该作者
luyonghui 发表于 2014-4-18 22:44
60个电是什么意思?电池冲放60次吗

这个测试是用一个5V的电源供电,比电池的3.7V高一些,通过调节PWM参数,使电机的转速和飞行时一样。驱动电机的是一个5V的方波,电机上的瞬间电压比用电池的3.7V高一些,所以这个测试对电机的损耗比实际飞行还高一点点

12
 楼主| 发表于 2014-4-18 23:03 | 只看该作者
lxvii 发表于 2014-4-18 22:59
很无聊的去查了一下 for(char c=0;;)唉,c语言忘光了
来自安卓客户端

无限循环的意思,单片机无法退出程序什么的,所以检测到电机停转后,就进入这个无限循环停止测试
13
发表于 2014-4-18 23:06 | 只看该作者
3dbuild 发表于 2014-4-18 23:03
无限循环的意思,单片机无法退出程序什么的,所以检测到电机停转后,就进入这个无限循环停止测试

不是,我看到char c=0;很不习惯,后来想起来,char不就是8位的int么?
来自安卓客户端
14
 楼主| 发表于 2014-4-18 23:09 | 只看该作者
lxvii 发表于 2014-4-18 23:06
不是,我看到char c=0;很不习惯,后来想起来,char不就是8位的int么?
来自安卓客户端

char是有符号的8位int,单片机程序要特别注意这个,如果变量范围超过了可用范围,出错了很难查,程序里根据需要,有些是用int,有些是char,有些是unsigned char;有时为了标准化,也写成这个样子:uint8_t uint16_t uint32_t

15
发表于 2014-4-18 23:11 | 只看该作者
3dbuild 发表于 2014-4-18 23:09
char是有符号的8位int,单片机程序要特别注意这个,如果变量范围超过了可用范围,出错了很难查,程序里根 ...

恩,写c++的,看到c还是不习惯
来自安卓客户端
16
发表于 2014-4-18 23:14 | 只看该作者
3dbuild 发表于 2014-4-18 23:02
这个测试是用一个5V的电源供电,比电池的3.7V高一些,通过调节PWM参数,使电机的转速和飞行时一样。驱动 ...

嗯,电池电压会降低
来自安卓客户端
17
 楼主| 发表于 2014-4-18 23:15 | 只看该作者
lxvii 发表于 2014-4-18 23:11
恩,写c++的,看到c还是不习惯
来自安卓客户端

Arduino是C和C++的混合,象这个语法,在C里不可以用的:for(char c=0;c<6;c++)


C要写成这个:
char c;
for(c=0;c<6;c++)

18
 楼主| 发表于 2014-4-18 23:18 | 只看该作者
本帖最后由 3dbuild 于 2014-4-18 23:19 编辑

单片机内存有限,能用8位的变量,就不要用16位的,这点和PC有些区别,PC一般用32位的,对CPU的CACHE对齐有好处,总的来说Arduino还是很有用的

19
发表于 2014-4-18 23:22 | 只看该作者
本帖最后由 xinren_2 于 2014-4-18 23:25 编辑

哈哈,我的试验一个月前就开始了,不是模拟的,是实测。每天飞四块不同的锂电,同时测试电机和电池的特性变化。空心杯电机的寿命早年询问德国冯哈伯空心杯电机制造公司的答案是2万小时,当然这里的产品不会这么优秀有很大的折扣。由于人家不是飞四轴的,所以自己实测才可信。


20
 楼主| 发表于 2014-4-18 23:27 | 只看该作者
xinren_2 发表于 2014-4-18 23:22
哈哈,我的试验一个月前就开始了,不是模拟的,是实测。每天飞四块不同的锂电,同时测试电机和电池的特性变 ...

你问的那个肯定不是航模用的微型空心杯,2万小时比无刷还厉害了,这个8520要是2万小时,估计轴承都磨没了
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

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