搜索
bottom↓
回复: 16

做电调遇到问题,反复调试问题依旧,请高手指点

[复制链接]

出0入0汤圆

发表于 2011-4-17 23:28:22 | 显示全部楼层 |阅读模式
自己做电调,发现许多 问题
些问题是做好覆铜板以后才发现的


我用的是夏风的电路图和MK的电路图和组合
主要是上下臂全N沟的MOS和自举升压。
电源滤波用的是MK的

但我用的AVR的168-20单片机外接的16M晶振。

夏风用的是51开机默认是1而AVR单片机开机默认是0,是低电平,而夏风的电路图,上臂是低电平导通的。
但我想这应该不是什么问题。


现在我用的是USB口的电源做调试。
不接任何负载

在主程序里运行 Manuell()函数的循环中间延时1S

现在的状态是,在10%PWM时运行大约20S就会输出三项中的一项的上下臂时就会导通。如果加大PWM当快达到100%时,基本是接上电源三项中的一项的上下臂立刻就会导通。


出问题时,上臂的状态是全开,下臂无法测量,我一用万用量测量,测量到出问题的下臂时,单片机就会重起


不知道是怎么回事。请高手指点。以下是我的电路图一实验板
板子上我有点改动,原来的上臂和下臂和现在是相反的,有几个电容我没焊,那个1000UF的一开始我焊上了,后来又拿下来了,可是问题依旧。



(原文件名:未命名.jpg)


(原文件名:未命名1.jpg)


(原文件名:未命名2.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2011-4-17 23:30:54 | 显示全部楼层
int main(void){
  DDRC=0x00; // 0b0000 0000
  PORTC=0x30;// 0b0011 0000
  DDRB=0x0E; // 0b0000 1110
  PORTB=0x31;// 0b0011 0001
  DDRD=0x3A ; //0b0011 1010
  PORTD=0x31; //0b0011 1000
  sei();  
  Timer_Init();
  PWM_Init();
  PWM=50;
  SetPWM();
  //  Manuell();
  //  Anwerfen(10);

  while(1){

   
   
//Anwerfen(100);
//Delay_ms(5000);
for(int i=0;i<6;i++){
  Phase=i;
  Manuell();
  Delay_ms(1000);
}



主程序只有一些初始化和一个Manuell();
的调试不断调用。

下面是Manuell();函数
void Manuell(void)
//############################################################################
{
  switch(Phase)
  {
  case 0:  
   
    STEUER_A_H;
STEUER_B_L;
//   SENSE_C;
//   SENSE_RISING_INT;
    break;
  case 1:  
   
    STEUER_A_H;
STEUER_C_L;
//   SENSE_B;
//   SENSE_FALLING_INT;
    break;
  case 2:  

    STEUER_B_H;
   STEUER_C_L;
//   SENSE_A;
//   SENSE_RISING_INT;
    break;
  case 3:  
  
    STEUER_B_H;
  STEUER_A_L;
//   SENSE_C;
  //  SENSE_FALLING_INT;
    break;
  case 4:  
   
    STEUER_C_H;
STEUER_A_L;
//   SENSE_B;
  //  SENSE_RISING_INT;
    break;
  case 5:  

    STEUER_C_H;
   STEUER_B_L;
  //  SENSE_A;
  //  SENSE_FALLING_INT;
    break;
  }
}


下面是一些预定义
#define PWM_A_ON  {TCCR1A = 0xA1; TCCR2A=0x81;    DDRB = 0x08;}
#define PWM_B_ON  {TCCR1A = 0xA1; TCCR2A=0x81;    DDRB = 0x04;}
#define PWM_C_ON  {TCCR1A = 0xA1; TCCR2A=0x81;    DDRB = 0x02;}
#define PWM_OFF   {OCR1A = 0; OCR1B = 0;  TCCR1A = 0x01; OCR2A=0;TCCR2A=0x01; DDRB = 0x0E; PORTB &= ~0x0E;}
//OCR2B   TCCR2A=0x21;


#define  STEUER_A_L {PWM_A_ON}
#define  STEUER_B_L {PWM_B_ON}
#define  STEUER_C_L {PWM_C_ON}

#define  STEUER_A_H {PORTD |=0x30;PORTD &= ~0x08;}  //对B和C项清零,对A项置1  ,以下同理
#define  STEUER_B_H {PORTD |=0x28;PORTD &= ~0x10;}
#define  STEUER_C_H {PORTD |=0x18;PORTD &= ~0x20;}

出0入0汤圆

 楼主| 发表于 2011-4-18 22:43:17 | 显示全部楼层
没人能帮帮心吗?

出0入0汤圆

发表于 2011-4-18 23:58:26 | 显示全部楼层
PWM频率多少,我当是这么弄的时候每相的delay大概在30ms,1s太长了,本来开环就很容易烧MOS管,你把时间调这么大,应该会增大烧管的概率吧,你把间隔时间调小,PWM频率增大试试看呗

出0入0汤圆

 楼主| 发表于 2011-4-19 00:43:50 | 显示全部楼层
PWM频率越加大,上下管导通的越快

其实如果我不加Delay延时,反而不会出现上下管同时导通(无论多少PWM)
但我用大PWM就是Delay延时1MS都不行,马上就不行,一接上电源上下管立刻同时导通

我现在不明白,为什么开环加延时时容易引起上下管同时导通呢?让我很困扰

理论上我那样的程序是不存在同时导通的情况的

出0入0汤圆

 楼主| 发表于 2011-4-19 01:26:44 | 显示全部楼层
还有个问题,是不是上下管一蛋导通过,MOS管就肯定会被击穿啊?

我用5V的USB电源做实验,现在老是上下管导通。不过,感觉好象还没击穿啊

出0入0汤圆

发表于 2011-4-20 00:30:39 | 显示全部楼层
MK的程序里不是用SetPWM(5)启动的吗,你现在试试PWM(5)启动,我之前实验在开环中启动电机,MOS管很容易发热,而且只要堵转,就会迅速产生高温,我之前在开环是也是想人工给相位,但发现这样很容易烧MOS管,你说的上下管导通的情况,是怎么判断出来的,电机接入后状况是什么样的,原地抖动还是反转什么的

出0入0汤圆

 楼主| 发表于 2011-4-20 00:40:28 | 显示全部楼层
今天我把上臂用做开关的9013换成了PNP型的9012
这样就变成了1导通0断开,和AVR的初始值相同。

然后我调试程序
  for(int z=0;z<1;z++){
  for(int i=0;i<6;i++){
  Phase=i;
  Manuell();
  Delay_ms(10);
}
  }

用上面的一段,在WHILE(1)以外


现在的情况是在低PWM下
PWM=10   时可以运行32个周期
PWM越高可以运行的周期越短
当我调高到PWM=200时Manuell();
函数连一个周期都运行不了。

看来与Delay_ms延时函数没什么关系,问题好象还是出在电路上。
现在我认为上臂的开关管已经没什么问题了。虽然由于电阻的位置不对,造成PNP型的上拉电压只有不到5V,但低电平基本在0.65V以下应该可以满足应用。

现在我怀疑是下臂的PWM干扰引起的问题。因为我在实验PWM时,如果三路输出PWM,如果只输出其中一路另两路关闭的话,关闭的两路不能完全关闭。不知道是由于什么原因,现在还没找到原因。

明天给下臂的PWM加上下拉电阻,看能不能解决问题。
现在我怀疑PWM上两个问题。
1.PWM相互干扰,由其在大PWM时更为严重。        (这个如果加下拉电阻应该可以解决吧)
2.由于我布线的原因,把PWM的控制输出线布在了5V电源线的边上,不知道这个会不会有问题。(这个不知道怎么解决,只能重新画板)


先写这么多吧,没人帮自己搞,而且我电路是从零开始的,真的挺难的。
睡了。。。。。。。。。。。。

出0入0汤圆

 楼主| 发表于 2011-4-20 00:48:47 | 显示全部楼层
回复【6楼】kkking
mk的程序里不是用setpwm(5)启动的吗,你现在试试pwm(5)启动,我之前实验在开环中启动电机,mos管很容易发热,而且只要堵转,就会迅速产生高温,我之前在开环是也是想人工给相位,但发现这样很容易烧mos管,你说的上下管导通的情况,是怎么判断出来的,电机接入后状况是什么样的,原地抖动还是反转什么的
-----------------------------------------------------------------------

你看我的回复吧,我昨天把B项的下臂段开了。刚才忘说了。
我用10的PWM在断开B项下臂的情况下可以运行32个Manuell();函数。

而且一运行到33个Manuell();函数必然会出现上下管同时导通。

上下管同时导通时,我的上臂是全开状态。下臂只开导通的那个管。
而且在上下臂同时导通时,我一量下臂导通的那个管,单片机就会重起。

还有我至今不明白,为什么不能长时间的开环运行。理论上说不存在同时导通的情况。


我现在还没接负载,什么都没接。
用的5V的USB供电在做实验。
上下同时导通应该相当于电源和地直接连接。会输出最大电流。
我现在用5V的USB供电,就是上下同时导通也不会击穿MOS。但会严重发热,我现在接了一个电流表,一导通,我就断电。

我的QQ:1204373580   希望一起交流

出0入0汤圆

发表于 2011-4-20 09:01:55 | 显示全部楼层
现在我用的是USB口的电源做调试?
能提供那么大电流吗?

出0入0汤圆

发表于 2011-4-20 21:08:40 | 显示全部楼层
回复【9楼】okARM  
现在我用的是usb口的电源做调试?
能提供那么大电流吗?

-----------------------------------------------------------------------
我没接负载,只是开环测试,如果上下管不同时导通就不会形成回路,基本没有电流,实测只有20毫安

出0入0汤圆

发表于 2011-4-20 23:21:30 | 显示全部楼层
什么叫PWM不能完全关闭,其他两路波形是什么样的,我之前试过关掉PWM的使能寄存器,也是关不掉其他两路波形,最后将其他两路PWM直接占空比设为0,就没什么影响了

出0入0汤圆

发表于 2011-4-20 23:30:39 | 显示全部楼层
回复【9楼】okARM
-----------------------------------------------------------------------
就是,买个旧的电脑开关电源嘛,就十几块钱

出0入0汤圆

 楼主| 发表于 2011-4-21 00:18:20 | 显示全部楼层
回复【11楼】kkking
什么叫pwm不能完全关闭,其他两路波形是什么样的,我之前试过关掉pwm的使能寄存器,也是关不掉其他两路波形,最后将其他两路pwm直接占空比设为0,就没什么影响了
-----------------------------------------------------------------------

哥们,我好象改电路改成功了

呵呵。
我在PWM的下臂上加了10K的下拉电阻
问题好象全部解决了。
你也可以试试。
我现在用250的PWM,运行1000个周期都没问题每个Manuell();延时10MS,现在B项是断开的。
一共运行50S呢,我想问题应该是解决人了。
你也试试吧。

出0入0汤圆

 楼主| 发表于 2011-4-21 01:22:15 | 显示全部楼层
问题应该是解决了。
一个下臂的PWM下拉电阻,解决了好几周的难题。
这个电阻源自哪个贴里的一个大侠的一句话,忘了谁说的了。不过先感谢一下。

现在的电路应该很建康了。
用AVR的,如果用夏风的电路,上臂的NPN管,应该改成PNP管更合适AVR 的默认电平,电路也要做下小改动,不改只改成9012的PNP也可以正常运行(等有时间我再试试改一下电路)


问题,总结。
应该是PWM的信号不干净造成的,或是引脚在关闭时,不能完全关闭总是受到其它引脚的干扰。
加了下拉以后,低电平更干净了,在PWM低边时MOS管关断更干净。
这样不会造成上下管同时导通,烧MOS管的惨况了。
幸好我做测试用的是5V的USB电源,不然我看现在我也烧了N个MOS管了。现在一个都没烧,看来我当初的决定还是对的。


总算可以接着做下去了,下一步是调试模拟比较器和过流检测。一步一步来吧。
做到步步为赢,也通过做这个电调,对AVR单片机有一个更深的认识,
为接下来做飞控打下坚实的基础。

这贴不想关了,做个日志吧,我会把进度和一些没解决和解决的都尽量写下来。

今天解决个难题还是挺兴奋的。又前进了一步啊!高兴中。。。

出0入0汤圆

 楼主| 发表于 2011-4-23 01:32:44 | 显示全部楼层
今天调试ADC部分的代码。
发现个很大的错误,我的电调板上把AREF悬空了。既没有上拉电阻也没有滤波电容。而且
我看了一下板子,连改动的空间都没有。

现在只有用内部的标准电压了,不知道没有滤波电容会不会产生大问题。

出0入0汤圆

 楼主| 发表于 2011-5-2 22:46:28 | 显示全部楼层
工夫没有白费啊!
刚刚闭环手动起动成功了。
相当的兴奋了。
说明电路都没有问题。
但现在的PWM比较大,而且采用的MK的直接换向。

现在用万用表测不到自举升压。
我想可能是PWM太大了,现在是(250)

因为我现在用的是USB的5V起动的
现在是5V电源,电流是140MA
测试用的是硬盘电机,上面有一片盘片。

硬件电路没问题就好办了。
接下来,就是完善程序,还有起动算法等等了。
现在还在兴奋中。。。。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-4 14:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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