搜索
bottom↓
回复: 3

求助那么多次,来两次前辈的援助吧……关于电调,真心不懂了……

[复制链接]

出0入0汤圆

发表于 2011-11-18 13:03:23 | 显示全部楼层 |阅读模式
情况说明:
         电路:       德国人的1.2版电路图
     编译环境:       avr studio 5
          MCU:       ATmega8L
         电机:       新西达2212 1000KV 电机   
         问题:       通电后,电机哧哧的响,不转。
已查明的情况:       M8供电,VCC接12V电源时:查A+,B+,C+上臂(三极管的基极处),无PWM波。
                       M8供电,VCC接5V电源时:查A+,B+,C+上臂(三极管的基极处),无PWM波。
                       M8供电,VCC不接电源时:查A+,B+,C+上臂(三极管的基极处),有PWM波。
                       三极管使用S9013,不使用芯片,手动检查时:基极接5V,VCC接12V,上臂均能导通。
     芯片情况:       因为使用的编程器,无法读出校准字,所以采用内部8M,无效准时钟。产生的PWM波,经过测试,为24KHZ左右。
       附程序:
#define  CHAU_ON    {TCCR2=0x41;TCCR1A=0x81;}           //OC1A通道选通
#define  CHBU_ON    {TCCR2=0x41;TCCR1A=0x21;}           //OC1B通道选通
#define  CHCU_ON    {TCCR1A=0x01;TCCR2=0x61;}           //OC2通道选通
#define  CHAD_ON    {PORTD=0x00;PORTD|=0x01;}          //A下臂通道打开pd0
#define  CHBD_ON    {PORTD=0x00;PORTD|=0x02;}          //B下臂通道打开pd1
#define  CHCD_ON    {PORTD=0x00;PORTD|=0x04;}          //C下臂通道打开pd2
                                   void Tpwm_init(void)
                                   {
                                   // T/C1 初始化
                                   TCCR1A=0x01;    //暂时不给通道输出,但是已经产生了PWM波,选用快速PWM模式。  
                                   TCCR1B=0x01;    //匹配时清零,TOP:255
                                   OCR1A=0;      
                                   OCR1B=0;     
                                   // T/C2 初始化
                                   TCCR2=0x41;    //暂时不给通道输出,TOP:255,
                                   OCR2=0;      //占空比:用rate调节
                                   }
                                   void PWMC(void)             //PWM使能;
                                   {
                                    OCR1A=50;      
                                    OCR1B=50;
                                    OCR2=50;        
                                   }                
                                   void Slave(void)                    //从机全初始化
                                   {
                                    
                                     OSCCAL=0xFF;
                                     DDRB=0x0F;
                                     DDRC=0x00;
                                     DDRD=0x87;
                                     PORTB=0x00;
                                     PORTC=0x00;
                                     PORTD=0x00;
                                   }
                                   void Origin(void)      //转动程序
                                   {
                                   switch (State)
                                     {
                                   case 0:
                                                      CHBD_ON
                                                    CHAU_ON
                                                    State=1;
                                                    break;   
                                   case 1:
                                                     CHCD_ON
                                                   CHAU_ON                                   
                                                   State=2;
                                           break;
                                   case 2:
                                                      CHCD_ON                                   
                                                    CHBU_ON
                                                    State=3;
                                            break;
                                   case 3:
                                                      CHAD_ON
                                                    CHBU_ON
                                                    State=4;
                                            break;   
                                   case 4:
                                                      CHAD_ON
                                                    CHCU_ON
                                                    State=5;
                                            break;
                                   case 5:
                                                     CHBD_ON
                                                   CHCU_ON
                                                   State=0;
                                                   break;
                                        }
                                   }
                                   void delay_us(double us)  //微秒级定时
                                   {
                                    TCNT0=0x00;
                                    while(TCNT0<us);       
                                   }
                                   void delay_ms(double ms) //毫秒级定时
                                   {
                                    uint j;
                                    while(ms--)
                                     {
                                      delay_us(99);
                                      delay_us(99);
                                      delay_us(99);
                                      delay_us(99);
                                      delay_us(99);
                                      delay_us(99);
                                      delay_us(99);
                                      delay_us(99);
                                      delay_us(99);
                                      delay_us(99);
                                    
                                     }
                                           
                                   }
                                   void time_Init(void)       //定时器0初始化
                                   {
                                           TCCR0=0x02;                   //系统八分频          
                                   }
                                   /*void int1_init(void)
                                   {
                                   MCUCR|=0x08;
                                   GICR |=0x80;
                                   } */
                                   /*SIGNAL(SIG_INTERRUPT1)
                                   {   
                                       flag=255;
                                   RL_ON;
                                      while(flag--) ;
                                   State++;
                                   State%=6;
                                   RL_OFF;
                                   } */
                                   int main(void)
                                   {  
                                   //sei();
                                   Slave();
                                   time_Init();
                                   Tpwm_init();
                                   PWMC();
                                   //int1_init();
                                       while(1)
                                       { for (flag=0;flag<200;flag++)
                                       {
                                                   delay_ms(1);
                                       }
                                             RL_ON;
                                         Origin();  
                                             RL_OFF;
                                       }
                                   }
*************************************************************************************************************************************
请前辈们帮帮我,谢谢啦……

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

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

出0入0汤圆

发表于 2011-11-18 13:09:23 | 显示全部楼层
原理、方向性的东西可以问问,你贴一堆乱七八糟的代码,谁有工夫看?更何况这种问题能靠别人么?

出0入0汤圆

 楼主| 发表于 2011-11-18 13:15:03 | 显示全部楼层
回复【1楼】Clinging 哆拉C梦
-----------------------------------------------------------------------

其实,程序就是让这个电机一步一步慢慢动动……但是不清楚为什么PWM为什么会消失……昨天还遇到过更奇怪的问题,就是单查上臂的P管,给接地,能导通……三极管接5V,能拉低到0……但是两个连起来,给三极管基极接5V……结果管子是通了,但是电压只有1.2V,而且5秒左右就烧了……

出0入0汤圆

 楼主| 发表于 2011-11-18 23:44:03 | 显示全部楼层
问题解决……
解释原因,供后来人参考:
洞洞板质量问题,部分洞口是通路……
今天重新制作,PWM波无误……
因为编译器编译后的延时函数有问题,所以启动算法,还在尝试中……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-24 06:25

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

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