导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→请教摇控器控制小车主函数里的部分代码意思[tone]

 *第33398篇: 请教摇控器控制小车主函数里的部分代码意思

  
楼 主:tone 2005年7月25日16:31
 请教摇控器控制小车主函数里的部分代码意思
功能:
1、电机只在小车向前行的过程中带动小车前进,转向是通过人力实现;
2、小车速度的控制是通过调节电位器电阻实现;

保护:
1、总电流最大30A,超过30A进行限流,限流30秒后切断电源输出,小车恢复初邕状态。

2、初次启动保护:小车上电后,如果电位器处于打开高速状态,小车不会前进,必须将电位器关闭再开启方可调节速度。

3、欠压保护:上电启动时电池电压低于11V,立即进入欠压保护;运行期间电压低于10.5V,30秒切断输出。

程序所采用的单片机是cypress的。
下面是主函数:

void main()
{
     M8C_EnableGInt;
  DELSIG_Start(DELSIG_FULLRANGE);
     DELSIG_bCal(0x42,DELSIG_CAL_VBG );
      
  if(!(PRT1DR & 0x10))
   {
      GreenLedFlash3();
      GreenLedFlash3();
      StudyIn();  
      while(1);           
   }
 else
   {
      ReadOut();
      if((ReadOutBuffer[0] == 48)&&(ReadOutBuffer[1] == 48)&&(ReadOutBuffer[2] == 48))
        {
           ReadOutBuffer[0] = 207;
           ReadOutBuffer[1] = 198;
           ReadOutBuffer[2] = 189;          
        }
   }
  Init();
  
start:
  while(VehicleState == 0)
  {
   if (ADSample(CHANNEL_7)   < 25) //CHANNEL_7所采样的是电机速度;
    VehicleState = V_STOP;
       RedLedFlash();  
  }
     PWM_DisableInt();
     Timer_EnableInt();         
     WorkMode = 0;
     CurrentTime = 0;
     VoltageTime = 0;
     PWM = 0;
  SystemInit();  
  PWM_WritePulseWidth(0);
     while(1)
     {    
      WorkMode = ADSample(CHANNEL_7);
   if (WorkMode >  = 26)
   { 
    if (VehicleState == V_STOP)
    {
     PWM_Start();
     VehicleState = V_RUN;
    }
    if(WorkMode >   240)
     WPWM = 255;
    else
    {
        WPWM = WorkMode+10; 
    } 
   if (CurrentTime == 0)     
   {
    if (PWM   < WPWM)
     PWM++;
    if (PWM >   WPWM)
     PWM--;
   }
   else
   {
    if (WPWM   < 145)
     PWM = WPWM;
   }  
  
    Current = ADSample(CHANNEL_3); //电流采样;  
      
    if(Current >   43)
   {
    if (CurrentTime == 0)
    {
     CurrentTime = 1;
    }
   
   
    if (Current   <= 45)
     if(PWM   < 220)
      PWM ++;
    if (Current >   49)
     if(PWM >   68)
      PWM -= 3;      
   }
   else
    CurrentTime = 0; 
      
   PWM_WritePulseWidth(PWM); 
     
   if (CurrentTime >  = 30)
   {
    PWM_Stop();   
       CurrentTime = 0;
       VehicleState = 0;
        goto start;
   }
     }
     else  
     {
      VehicleState = V_STOP; 
      PWM_Stop();
      PWM = 0;
      WPWM = 0;
      VoltageTime = 0;  
      CurrentTime = 0;
     }
     
     Voltage = ADSample(CHANNEL_5);//电压采样; 
     if(PWM >   26)
     {
      LV = ReadOutBuffer[2] - 8;
     }
     else
     {
      LV = ReadOutBuffer[2] ;
     }
     
     if (Voltage   < LV)
     {
      if (VoltageTime == 0)
       VoltageTime = 1;
  }
  else
   VoltageTime = 0;
   
  LedLight(Voltage);
       
    if (VoltageTime >   30)
     {
      PWM_WritePulseWidth(0);
       PWM_Stop();
       Timer_Stop();
       DELSIG_Stop();
      while(1)
      RedLedFlash();
      }
    } 
 } 

if (ADSample(CHANNEL_7)   < 25)这里面的25具体是怎么得出的。
PWM与WPWM两个相互比较,代表什么意思。

希望有高手能够指点下,在此表示感谢。


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:有没有高人做过基于s3c2410的QT开发的?帮帮我可以吗?

[下一篇主题]:支持双LCD的abcARM!