想法2 电调程序问题十分严重...

2019-04-13 13:41发布

  运转的程序总算是写出来了.几个月的时间过去了.   问题肯定是有的.通常也不容易找到原因.   这次他的问题表现在:不能运转.我的意思就是完全不能动.   仿真了一下.发现程序一直在 模拟比较器A 那里跑来跑去.    void PhaseA_ACD_INIT()
{
  cli();
  SFIOR |= (1<   ACSR = 0B00001010;                   //打开ACD中断 比较器下降沿产生中断
  ADCSRA &= ~(1<   ADMUX = 0B00000001;                  //MUX2:0 = 001 ADC1作输入
  DDRA &= ~(1<   //DDRB &= ~(1<   NONCE_PHASE = 1;
  sei();
}
//     本来原文中, ADMUX = 0B00000001;  是定义为 MUX2:0=000 后来改成了001,为什么呢?   如果是000的话,那么在定义 PhaseA 的模拟比较器的时候,只打开了 PhaseA 的模拟比较器端口,但是,当A比较完毕的时候,我们应当进入B比较才是..所以后面改成了 001 .意思就是从 PhaseB 端比较.     但是问题又来了..   ISR(ANA_COMP_vect)
{
  cli();
  if(NONCE_PHASE > 3)
    {NONCE_PHASE = 1;}
   
  switch(NONCE_PHASE)
  {
    case 1:                              // 1 = PHASE_A  打开定时器计延迟时间  
      {
        TCCR2 = 0B00000110;                 //普通定时方式,256分频,总定时4毫秒
        PhaseB_ACD_INIT();
      }break;
    case 2:                              // 2 = PHASE_B  关闭定时器,读出定时器数值
      {
        MITTLE_DELAY = TCNT2;               //读出计时
        PhaseC_ACD_INIT();
      }break;
    case 3:                              // 3 = PHASE_C  重定义 TIMER2 作PWM输出
      {
        TIMER2_PWM_INIT();
        PhaseA_ACD_INIT();
      }break;
   
    NONCE_PHASE = NONCE_PHASE+1;
  }
  sei();
}
//     如上文,我在模拟比较器的 ISR 里面做了设置,计划是:每次进入中断,都将其换到下一相位.所以按照这个想法,模拟比较器的设定应该是正确的.但是为什么在 MUX2:0=000 的时候他完全没反应,而在 MUX2:0=001 的时候他又出现了一些轻微的跳动呢? 这么说来,就是 MUX2:0=001 的时候,他启动了 PWM 那一部分.但是没有完整地走下去.可能是只有一个相位出现了 PWM.     其次还有问题就是,电机的反向电动势很大..几伏是很正常的..显然,我接在ADC0:2上的三个小LED烧了.那个单片机能承受吗?虽然说是模拟比较器,但是有些时候还是没有定义的..某群有人说安全承受为VCC...而且,在管脚和LED连接上一定要加电阻..还说起码 1K ,因为LED只要10mA..说不单只是影响LED,还会影响单片机..这话必须得信啊..   这次留下的貌似全部都是疑问啊..看来只能有待解决来结尾了..