From 8fe94ffbe3389ad42a2574f19b3968c97c6cb8d8 Mon Sep 17 00:00:00 2001 From: Rene Hopf Date: Tue, 11 Oct 2016 06:49:45 +0200 Subject: [PATCH] brake pwm --- src/comps/io.comp | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/src/comps/io.comp b/src/comps/io.comp index d0b50742..849500c2 100644 --- a/src/comps/io.comp +++ b/src/comps/io.comp @@ -23,8 +23,35 @@ INIT( GPIO_Init(LED_G_PORT, &GPIO_InitStructure); //brake - GPIO_InitStructure.GPIO_Pin = BRAKE_PIN; - GPIO_Init(BRAKE_PORT, &GPIO_InitStructure); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); + TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV4; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseStructure.TIM_Period = 8400; // 168e6 / 8400 = 20kHz + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; + TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); + TIM_ARRPreloadConfig(TIM8,ENABLE); + TIM_Cmd(TIM8, ENABLE); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOC, &GPIO_InitStructure); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_TIM8); + + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; + TIM_OCInitStructure.TIM_Pulse = 0; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; + TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; + + TIM_OC4Init(TIM8, &TIM_OCInitStructure); + TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable); + TIM_CtrlPWMOutputs(TIM8, ENABLE); + ); NRT( @@ -43,10 +70,8 @@ NRT( else GPIO_ResetBits(LED_G_PORT, LED_G_PIN); - if(PIN(brake) > 0) - GPIO_SetBits(BRAKE_PORT, BRAKE_PIN); - else - GPIO_ResetBits(BRAKE_PORT, BRAKE_PIN); + TIM8->CCR4 = (int)CLAMP(PIN(brake) * 8400, 0, TIM8->ARR - 1); + ); ENDCOMP;