Example #1
0
/**
 * @brief Main function
 * @return None
 */
int main(void) {

  COMM_Init(COMM_BAUD_RATE); // initialize communication with PC
  println("***********************************************");
  println("Starting program"); // Print a string to terminal

  TIMER_Init(SYSTICK_FREQ); // Initialize timer

  // Add a soft timer with callback running every 1000ms
  int8_t timerID = TIMER_AddSoftTimer(1000, softTimerCallback);
  TIMER_StartSoftTimer(timerID); // start the timer

  LED_Init(LED0); // Add an LED
  LED_Init(LED1); // Add an LED
  LED_Init(LED2); // Add an LED
  LED_Init(LED3); // Add an LED
  LED_Init(LED5); // Add nonexising LED for test
  LED_ChangeState(LED5, LED_ON);

  KEYS_Init(); // Initialize matrix keyboard

  uint8_t buf[255]; // buffer for receiving commands from PC
  uint8_t len;      // length of command

  // test another way of measuring time delays
  uint32_t softTimer = TIMER_GetTime(); // get start time for delay
  SD_Init();
//  FAT_Init(SD_Init, SD_ReadSectors, SD_WriteSectors);

  // Initialize USB device stack
  USBD_Init(&USB_OTG_dev,
            USB_OTG_FS_CORE_ID,
            &USR_desc,
            &USBD_MSC_cb,
            &USR_cb);

  while (1) {

    // test delay method
    if (TIMER_DelayTimer(1000, softTimer)) {
      LED_Toggle(LED3);
      softTimer = TIMER_GetTime(); // get start time for delay
    }

    // check for new frames from PC
    if (!COMM_GetFrame(buf, &len)) {
      println("Got frame of length %d: %s", (int)len, (char*)buf);

      // control LED0 from terminal
      if (!strcmp((char*)buf, ":LED0 ON")) {
        LED_ChangeState(LED0, LED_ON);
      }
      if (!strcmp((char*)buf, ":LED0 OFF")) {
        LED_ChangeState(LED0, LED_OFF);
      }
    }

    TIMER_SoftTimersUpdate(); // run timers
    key = KEYS_Update(); // run keyboard

  }
}
Example #2
0
/*******************************************************************************
* Function Name  : main
* Description    : Main program.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
int main(void)
{			
	SystemInit();
	
	/*速度反馈初始化*/	
	ENC_Init( );
	
	/*电流反馈初始化*/
	SVPWM_3ShuntInit();
	
	/*时基初始化,并启动TIM6计算速度,初始化PID*/
	TB_Init( );
	Tim6_Init( );
	PID_Init(&PID_Torque_InitStructure, &PID_Flux_InitStructure, &PID_Speed_InitStructure);	
	
	/*温度,电压数组初始化*/
	MCL_Init_Arrays();  

	/*交互界面初始化*/		
	KEYS_Init( );
	LCD_Display_init();
	/*-------------------*/
	Res_f=1; //上电完成

	//串口示波器初始化
	usart_init(115200);
	while(1)
	{ 
		
		/*UI显示,以及电源报警,用户管理*/
		Display_LCD( );
		MCL_ChkPowerStage( );    
		KEYS_process( );

		/*状态机开启运行*/
		switch (State)
		{
			case IDLE:    //通过sel按键进入INIT ,在WAIT和FAULT中进入IDEL
			break;

			case INIT:
				MCL_Init( );//初始化电机控制层
				TB_Set_StartUp_Timeout(3000);
				State = START; 
			break;

			case START:  
				//passage to state RUN is performed by startup functions; 
			break;

			case RUN:  //电机运行过程中,检测速度反馈是否存在问题      
				if(ENC_ErrorOnFeedback() == TRUE)
				{
					MCL_SetFault(SPEED_FEEDBACK);
				}

			break;  

			case STOP:  //关闭TIM1的输出,状态转为等待,停止电流检测,设置Valpha和Vbeta为0,计算三相占空比 
				TIM_CtrlPWMOutputs(TIM1, DISABLE);
				State = WAIT;								        
				SVPWM_3ShuntAdvCurrentReading(DISABLE);											
				Stat_Volt_alfa_beta.qV_Component1 = Stat_Volt_alfa_beta.qV_Component2 = 0;
				SVPWM_3ShuntCalcDutyCycles(Stat_Volt_alfa_beta);
				TB_Set_Delay_500us(2000); // 1 sec delay		
			break;

			case WAIT:    // 等待速度为零时,将状态转为IDEL
				if (TB_Delay_IsElapsed( ) == TRUE) 
				{
					if(ENC_Get_Mechanical_Speed( ) ==0)             
					{              
						State = IDLE;              
					}
				}
			break;

			case FAULT: //状态变为IDEL,全局变量设为第一次启动                  
				if (MCL_ClearFault( ) == TRUE)
				{
					if(wGlobal_Flags & SPEED_CONTROL == SPEED_CONTROL)
					{
						//速度控制模式
						bMenu_index = CONTROL_MODE_MENU_1;
					}
					else
					{
						//力矩控制模式
						bMenu_index = CONTROL_MODE_MENU_6;
					} 					
					State = IDLE;
					wGlobal_Flags |= FIRST_START;
					Hall_Start_flag=0;
				}
			break;

			default:        
			break;
		}	
		usart_watcher(Speed_Iq_Id_watch);
		/********End of Usart_watch**************/
	}
}