/******************************************************//**
 * @brief  Start the step clock by using the given frequency
 * @param[in] newFreq in Hz of the step clock
 * @retval None
 * @note The frequency is directly the current speed of the device
 **********************************************************/
void BSP_MotorControlBoard_StartStepClock(uint16_t newFreq)
{
  uint32_t sysFreq = HAL_RCC_GetSysClockFreq();
  uint32_t period = (sysFreq/ (TIMER_PRESCALER * newFreq)) - 1;
  
  __HAL_TIM_SetAutoreload(&hTimStepClock, period);
  __HAL_TIM_SetCompare(&hTimStepClock, BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_STEP_CLOCK, period >> 1);
  HAL_TIM_PWM_Start_IT(&hTimStepClock, BSP_MOTOR_CONTROL_BOARD_CHAN_TIMER_STEP_CLOCK);  
}
Пример #2
0
void HAL_PWM_Set_Rate(int channel, uint32_t frequency_us, uint32_t duty_cycle_us)
{
#ifdef ENABLE_PWM_GENERATION
	uint32_t frequency = frequency_us * TIMER_TICKS_PER_MICROSECOND;
	uint32_t duty_cycle = duty_cycle_us * TIMER_TICKS_PER_MICROSECOND;
	if ( channel < sizeof(pwm_timer_channels)/sizeof(pwm_timer_channels[0])) {
		__HAL_TIM_SetAutoreload(pwm_timer_channels[channel].p_tim_handle, duty_cycle);
		__HAL_TIM_SetCompare(pwm_timer_channels[channel].p_tim_handle,
				pwm_timer_channels[channel].tim_channel_number, frequency);
	}
#endif
}
Пример #3
0
void ultrasound_generator( uint32_t chanel ){
/* ##-1- Configure the TIM peripheral ****************************************************************************
  TIM2 Configuration: generate 4 PWM signals with 4 different duty cycles.

    In this example TIM2 input clock (TIM2CLK) is set to APB1 clock (PCLK1),
    since APB1 prescaler is equal to 1.
      TIM2CLK = PCLK1
      PCLK1 = HCLK
      => TIM2CLK = HCLK = SystemCoreClock

    To get TIM2 counter clock at 16 MHz, the prescaler is computed as follows:
       Prescaler = (TIM2CLK / TIM2 counter clock) - 1
       Prescaler = ((SystemCoreClock) /16 MHz) - 1

    To get TIM2 output clock at 24 KHz, the period (ARR)) is computed as follows:
       ARR = (TIM2 counter clock / TIM2 output clock) - 1
           = 665

    TIM2 Channel1 duty cycle = (TIM2_CCR1/ TIM2_ARR + 1)* 100 = 50%
**************************
	20KHz-> Prescaler = ( (48MHz) / 20KHz) - 1=799
	30KHz->	Prescaler = ( (48MHz) / 30KHz) - 1=399
	*/
		SystemClock_Config_48MHz();
		MX_TIM3_Init();
		HAL_TIM_PWM_Init(&htim3);
		sConfigOC.Pulse=0;
	HAL_GPIO_WritePin( DCDC_EN_GPIO_Port , DCDC_EN_Pin , 1 );													///DCDC konverter engedélyezése (+15V)


			HAL_TIM_PWM_ConfigChannel( &htim3 , &sConfigOC , TIM_CHANNEL_1);
			HAL_TIM_PWM_ConfigChannel( &htim3 , &sConfigOC , TIM_CHANNEL_2);
			HAL_TIM_PWM_ConfigChannel( &htim3 , &sConfigOC , TIM_CHANNEL_3);
			HAL_TIM_PWM_ConfigChannel( &htim3 , &sConfigOC , TIM_CHANNEL_4);
			HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
			HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
			HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
			HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);

for(int i=400; i < 700; i++){
	//HAL_TIM_PWM_Stop(&htim3,chanel);


	__HAL_TIM_SetAutoreload(&htim3,i*2);
	__HAL_TIM_SetCompare(&htim3,chanel, i);
//HAL_TIM_OC_Init(&htim3);
//TIM_OC2_SetConfig( TIM3, &sConfigOC);
	//HAL_TIM_PWM_Start( &htim3 , chanel );
HAL_Delay(30);
}
	__HAL_TIM_SetCompare(&htim3,chanel, 0);
	HAL_TIM_PWM_Stop( &htim3 , chanel );
	HAL_TIM_PWM_DeInit( &htim3 );
	HAL_TIM_Base_DeInit(&htim3);

		GPIO_TIM3_OFF();
	
		

	HAL_GPIO_WritePin( DCDC_EN_GPIO_Port , DCDC_EN_Pin , 0);
	SystemClock_Config_8MHz();
	}
Пример #4
0
void ultrasound (uint8_t bridge){				//ez a fv egyszerre csak egy hidat hajt meg!
		uint16_t i,old_i,temp_i,f;
	uint32_t CH1,CH2,CHx,CHy,tim,tim_now;

		//bridge1=0,bridge2=1-> hogy melyik hidat hajtsa meg 
	if(bridge){						//bridge1
		CH1=(uint32_t)TIM_CHANNEL_1;
		CH2=(uint32_t)TIM_CHANNEL_2;
		CHx=(uint32_t)TIM_CHANNEL_3;
		CHy=(uint32_t)TIM_CHANNEL_4;
	}else{								//bridge2
		CH1=(uint32_t)TIM_CHANNEL_3;
		CH2=(uint32_t)TIM_CHANNEL_4;
		CHx=(uint32_t)TIM_CHANNEL_1;
		CHy=(uint32_t)TIM_CHANNEL_2;
	}
			SystemClock_Config_48MHz();
	HAL_Delay(20);
	MX_TIM3_Init();

	HAL_TIM_PWM_Init(&htim3);

		
	sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 0;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

			HAL_TIM_PWM_ConfigChannel( &htim3 , &sConfigOC , CH1);
	  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
			HAL_TIM_PWM_ConfigChannel( &htim3 , &sConfigOC , CH2);
			HAL_TIM_PWM_ConfigChannel( &htim3 , &sConfigOC , CHx);
			HAL_TIM_PWM_ConfigChannel( &htim3 , &sConfigOC , CHy);

			HAL_TIM_PWM_Start(&htim3, CH1);
			HAL_TIM_PWM_Start(&htim3, CH2);
			HAL_TIM_PWM_Start(&htim3, CHx);
			HAL_TIM_PWM_Start(&htim3, CHy);


	//csattanás csökkentés, 19khz kiadás eloszor
			
			HAL_GPIO_WritePin( DCDC_EN_GPIO_Port , DCDC_EN_Pin , 0 );	
		//	HAL_GPIO_WritePin( DCDC_PWR_GPIO_Port , DCDC_PWR_Pin , 0 );									//open drain kimenet,pch fet,
//*****************************************	
	/*for( i=900 ; i >= 620 ; i-=3){
							
			__HAL_TIM_SetAutoreload(&htim3,i*2);				
			__HAL_TIM_SetCompare(&htim3,CH1, i);
			__HAL_TIM_SetCompare(&htim3,CH2, i);

							HAL_Delay(1);
						}*/
	/***********************************	
						HAL_Delay(100);						
			__HAL_TIM_SetAutoreload(&htim3,i*2);				
			__HAL_TIM_SetCompare(&htim3,CH1, i);
			__HAL_TIM_SetCompare(&htim3,CH2, i);
						HAL_Delay(1000);*/
			HAL_GPIO_WritePin( DCDC_EN_GPIO_Port , DCDC_EN_Pin , 1 );								
			HAL_Delay(100);

		//19KHz-620  // 27KHz-440
				old_i=i;
		for(uint8_t x=0; x < soundNum; x++){
			
		// a következo hanghoz kis lépésenként jutunk, ígty nincs csattanás
			
			srand(HAL_GetTick());
			i=(rand()%210)+440;		
			//i=210+440;
		/*
			if(	old_i	<	i){
										
					// ha az új hang kissebb frekvenciájó -> nagyobb i
				for(	temp_i=old_i	;	i	>=	temp_i;	temp_i++){
			
			__HAL_TIM_SetAutoreload(&htim3,temp_i*2);				
			__HAL_TIM_SetCompare(&htim3,CH1, temp_i);
			__HAL_TIM_SetCompare(&htim3,CH2, temp_i);
					HAL_Delay(1);
				}
					
			}else{
				//ha az uj hang nagypbb frekvenciáju-> kisebb i
				for(	temp_i=old_i	;	i	<=	temp_i;	temp_i--){
			
			__HAL_TIM_SetAutoreload(&htim3,temp_i*2);				
			__HAL_TIM_SetCompare(&htim3,CH1, temp_i);
			__HAL_TIM_SetCompare(&htim3,CH2, temp_i);
					HAL_Delay(1);
				}
			}
			*/
			
						__HAL_TIM_SetAutoreload(&htim3,i*2);				
						__HAL_TIM_SetCompare(&htim3,CH1, i);
						__HAL_TIM_SetCompare(&htim3,CH2, i);
						
			
			old_i=i;
			tim=HAL_GetTick();							//jelenlegi ido lekérdezés
			tim_now=HAL_GetTick();
			f=i%5;
			while(  sDelay >= (tim_now-tim) && tim <= tim_now ){				///késleltetés
			if(f==3){
			for(temp_i=0 ; temp_i < 10 ;temp_i++){					//itt nagyobb lesz a frekvencia
				i+=1;
			__HAL_TIM_SetAutoreload(&htim3,i*2);				
			__HAL_TIM_SetCompare(&htim3,CH1, i);
			__HAL_TIM_SetCompare(&htim3,CH2, i);
				HAL_Delay(1);
			}
			
			for(temp_i=0 ; temp_i < 10 ;temp_i++){					//itt kissebb lesz a frekvencia 
			i-=1;
			__HAL_TIM_SetAutoreload(&htim3,i*2);				
			__HAL_TIM_SetCompare(&htim3,CH1, i);
			__HAL_TIM_SetCompare(&htim3,CH2, i);
				HAL_Delay(1);
			}
			
		}
				tim_now=HAL_GetTick();
			}
			
		//	HAL_Delay(sDelay);
			randCount++;
		}

	
		//csattanás csökkentés, 19khz kiadás eloszor
		HAL_GPIO_WritePin( DCDC_EN_GPIO_Port , DCDC_EN_Pin , 0);						
		for( i=i ; i <= 900 ; i+=3){
							
			__HAL_TIM_SetAutoreload(&htim3,i*2);				
			__HAL_TIM_SetCompare(&htim3,CH1, i);
			__HAL_TIM_SetCompare(&htim3,CH2, i);

							HAL_Delay(1);
						}
	HAL_Delay(100);
	
		HAL_TIM_PWM_Stop( &htim3 , CH1 );
		HAL_TIM_PWM_Stop( &htim3 , CH2 );
		HAL_TIM_PWM_Stop( &htim3 , CHx );
		HAL_TIM_PWM_Stop( &htim3 , CHy );
		HAL_TIM_PWM_DeInit( &htim3 );


	//	HAL_GPIO_WritePin( DCDC_PWR_GPIO_Port , DCDC_PWR_Pin , 1);								//open drain kimenet,pch fet,
HAL_Delay(100);
	
	SystemClock_Config_8MHz();
			GPIO_TIM3_OFF();
	HAL_Delay(100);
}
Пример #5
0
void beeps (uint8_t num,uint8_t bridge){
			uint16_t temp1;
			uint32_t CH1,CH2,CHx,CHy;
	//	HAL_GPIO_WritePin( DCDC_PWR_GPIO_Port , DCDC_PWR_Pin , 0 );									//open drain kimenet,pch fet,
	HAL_Delay(100);
		HAL_GPIO_WritePin( DCDC_EN_GPIO_Port , DCDC_EN_Pin , 1 );									//open drain kimenet,pch fet,

		//bridge1=0,bridge2=1-> hogy melyik hidat hajtsa meg 
	if(bridge){						//bridge1
		CH1=(uint32_t)TIM_CHANNEL_1;
		CH2=(uint32_t)TIM_CHANNEL_2;
		CHx=(uint32_t)TIM_CHANNEL_3;
		CHy=(uint32_t)TIM_CHANNEL_4;
	}else{								//bridge2
		CH1=(uint32_t)TIM_CHANNEL_3;
		CH2=(uint32_t)TIM_CHANNEL_4;
		CHx=(uint32_t)TIM_CHANNEL_1;
		CHy=(uint32_t)TIM_CHANNEL_2;
	}

		//SystemClock_Config_48MHz();
			MX_TIM3_Init();
			HAL_TIM_PWM_Init(&htim3);
	
			sConfigOC.OCMode = TIM_OCMODE_PWM1;
			sConfigOC.Pulse = 0;
			sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
			sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
			HAL_TIM_PWM_ConfigChannel( &htim3 , &sConfigOC , CH1);
			sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
			HAL_TIM_PWM_ConfigChannel( &htim3 , &sConfigOC , CH2);
			HAL_TIM_PWM_ConfigChannel( &htim3 , &sConfigOC , CHx);
			HAL_TIM_PWM_ConfigChannel( &htim3 , &sConfigOC , CHy);
	
			HAL_TIM_PWM_Start(&htim3, CH1);
			HAL_TIM_PWM_Start(&htim3, CH2);
			HAL_TIM_PWM_Start(&htim3, CHx);
			HAL_TIM_PWM_Start(&htim3, CHy);
			__HAL_TIM_SetCompare(&htim3,CH2,0);

			
	for( uint8_t i=0 ; i<num ; i++){
		temp1=3500;
		
		for(uint8_t ii=0; ii<10 ; ii++){
				__HAL_TIM_SetAutoreload(&htim3,temp1*2);
				__HAL_TIM_SetCompare(&htim3,CH1, temp1);
			//__HAL_TIM_SetCompare(&htim3,CH2,temp1);
			
				temp1 -=6;
				HAL_Delay(18);
		}/*
		for(uint8_t ii=0; ii<10 ; ii++){
				__HAL_TIM_SetAutoreload(&htim3,temp1*2);
				__HAL_TIM_SetCompare(&htim3,CH1, temp1);
				//		__HAL_TIM_SetCompare(&htim3,CH2,temp1);
				temp1 +=15;
				HAL_Delay(9);
		}*/
		__HAL_TIM_SetCompare(&htim3,CH1, 0);
			//		__HAL_TIM_SetCompare(&htim3,CH2,0);
		HAL_Delay(340);
	}
	
		__HAL_TIM_SetCompare(&htim3,CH1, 0);
		HAL_TIM_PWM_Stop( &htim3 , CH1 );
		HAL_TIM_PWM_Stop( &htim3 , CH2 );
		HAL_TIM_PWM_Stop( &htim3 , CHx );
		HAL_TIM_PWM_Stop( &htim3 , CHy );
		HAL_TIM_PWM_DeInit( &htim3 );
		HAL_TIM_Base_DeInit(&htim3);
		GPIO_TIM3_OFF();
			HAL_GPIO_WritePin( DCDC_EN_GPIO_Port , DCDC_EN_Pin , 0 );									//open drain kimenet,pch fet,
		HAL_Delay(100);
	//		HAL_GPIO_WritePin( DCDC_PWR_GPIO_Port , DCDC_PWR_Pin , 0 );									
		HAL_Delay(1000);
}	
Пример #6
0
void uartTester(){
	//UART fogadás, teszteléshez ---------------------------------------------------------

		uint8_t pData;
		PutString("S");

		HAL_UART_Receive(&huart1,&pData,1,100);
		if(pData=='O'){
			HAL_GPIO_TogglePin(Kimenet_GPIO_Port,Kimenet_Pin);

			PutString("R");
			
			
				HAL_UART_Receive(&huart1,&pData,1,1000);
			while(pData != 'A')
							HAL_UART_Receive(&huart1,&pData,1,1000);
			
		HAL_GPIO_WritePin( DCDC_EN_GPIO_Port , DCDC_EN_Pin , 1 );	
			
		PutString("R");
			
				HAL_UART_Receive(&huart1,&pData,8,1000);
			while(pData != 'B')
							HAL_UART_Receive(&huart1,&pData,8,1000);
			
			
			soundNum=1;
			sounDelay=10;
									
	SystemClock_Config_48MHz();
	HAL_Delay(2);
	MX_TIM3_Init();

	HAL_TIM_PWM_Init(&htim3);

		
	sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 0;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

			HAL_TIM_PWM_ConfigChannel( &htim3 , &sConfigOC , TIM_CHANNEL_1);
	  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
			HAL_TIM_PWM_ConfigChannel( &htim3 , &sConfigOC , TIM_CHANNEL_2);
			HAL_GPIO_TogglePin(Kimenet_GPIO_Port,Kimenet_Pin);
					HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
			HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
			uint16_t i=630;
		__HAL_TIM_SetAutoreload(&htim3,i*2);				
			__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1, i);
			__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2, i);	
				HAL_Delay(500);
				
			PutString("R");
			
				HAL_UART_Receive(&huart1,&pData,8,1000);
			while(pData != 'C')
							HAL_UART_Receive(&huart1,&pData,8,1000);
		
		HAL_GPIO_WritePin( DCDC_EN_GPIO_Port , DCDC_EN_Pin , 0);				
		HAL_TIM_PWM_Stop( &htim3 , TIM_CHANNEL_1 );
		HAL_TIM_PWM_Stop( &htim3 , TIM_CHANNEL_2 );
		HAL_TIM_PWM_DeInit( &htim3 );
			SystemClock_Config_8MHz();
			
			HAL_ADC_MspDeInit(&hadc);
			HAL_UART_MspDeInit(&huart1);
			HAL_TIM_Base_DeInit(&htim3);
	
			

		
		while(1){
				HAL_GPIO_TogglePin(Kimenet_GPIO_Port,Kimenet_Pin);
				HAL_Delay(200);
		}
	}
}
int timer_set_period(hacs_timer_t tim, uint32_t us)
{
  __HAL_TIM_SetAutoreload(&tim_handles[tim], us);
  return HACS_NO_ERROR;
}
Пример #8
0
/**
  * @brief  SYSTICK callback.
  * @param  None
  * @retval None
  */
void HAL_SYSTICK_Callback(void)
{
  uint8_t *buf;
  uint16_t Temp_X, Temp_Y = 0x00;
  uint16_t NewARR_X, NewARR_Y = 0x00;
  
 if (DemoEnterCondition != 0x00)
  {
    buf = USBD_HID_GetPos();
    if((buf[1] != 0) ||(buf[2] != 0))
    {
      USBD_HID_SendReport (&hUSBDDevice, 
                           buf,
                           4);
    } 
    Counter ++;
    if (Counter == 10)
    {
      /* Reset Buffer used to get accelerometer values */
      Buffer[0] = 0;
      Buffer[1] = 0;
      
      /* Disable All TIM4 Capture Compare Channels */
      HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1);
      HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_2);
      HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_3);
      HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_4);

      /* Read Acceleration*/
      BSP_ACCELERO_GetXYZ(Buffer);
      
      /* Set X and Y positions */
      X_Offset = Buffer[0];
      Y_Offset = Buffer[1];
      
      /* Update New autoreload value in case of X or Y acceleration*/
      /* Basic accelration X_Offset and Y_Offset are divide by 40 to fir with ARR range */
      NewARR_X = TIM_ARR - ABS(X_Offset/3);
      NewARR_Y = TIM_ARR - ABS(Y_Offset/3);
      
      /* Calculation of Max acceleration detected on X or Y axis */
      Temp_X = ABS(X_Offset/3);
      Temp_Y = ABS(Y_Offset/3);
      MaxAcceleration = MAX_AB(Temp_X, Temp_Y);

      if(MaxAcceleration != 0)
      {
        
        /* Reset CNT to a lowest value (equal to min CCRx of all Channels) */
        __HAL_TIM_SetCounter(&htim4,(TIM_ARR-MaxAcceleration)/2);
        
        if (X_Offset < ThreadholdAcceleroLow)
        {
          
          /* Sets the TIM4 Capture Compare for Channel1 Register value */
          /* Equal to NewARR_X/2 to have duty cycle equal to 50% */
          __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_1, NewARR_X/2);  
          
          /* Time base configuration */      
          __HAL_TIM_SetAutoreload(&htim4, NewARR_X);
          
          /* Enable TIM4 Capture Compare Channel1 */
          HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);  
          
        }
        else if (X_Offset > ThreadholdAcceleroHigh)
        {
          
          /* Sets the TIM4 Capture Compare for Channel3 Register value */
          /* Equal to NewARR_X/2 to have duty cycle equal to 50% */
          __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, NewARR_X/2);                  
          
          /* Time base configuration */      
          __HAL_TIM_SetAutoreload(&htim4, NewARR_X);
          
          /* Enable TIM4 Capture Compare Channel3 */
          HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);  
          
        }
        if (Y_Offset > ThreadholdAcceleroHigh)
        { 
          
          /* Sets the TIM4 Capture Compare for Channel2 Register value */
          /* Equal to NewARR_Y/2 to have duty cycle equal to 50% */
          __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_2,NewARR_Y/2);    
    
          /* Time base configuration */      
          __HAL_TIM_SetAutoreload(&htim4, NewARR_Y);

          /* Enable TIM4 Capture Compare Channel2 */
          HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);    
          
        }      
        else if (Y_Offset < ThreadholdAcceleroLow)
        { 
          
          /* Sets the TIM4 Capture Compare for Channel4 Register value */
          /* Equal to NewARR_Y/2 to have duty cycle equal to 50% */
          __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_4, NewARR_Y/2);   
          
          /* Time base configuration */      
          __HAL_TIM_SetAutoreload(&htim4, NewARR_Y);
          
          /* Enable TIM4 Capture Compare Channel4 */
          HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);    
          
        }
      }
      Counter = 0x00;
    }  
  }
}