Вс фев 06, 2022 15:03:26
void init_servo_PWM(void) {
__HAL_RCC_TIM10_CLK_ENABLE();
/* f = 50 Гц. Время периода 20 мс */
TIM10->ARR = (20000 - 1); // период в микросекундах
TIM10->PSC = (120 - 1); // предделитель
TIM10->CCMR1 |= TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; // режим ШИМ1
TIM10->CCMR1 |= TIM_CCMR1_OC1PE; // буферизируем CCR1. необходимо в шиме. Подгрузка осуществляется только после события обновления
TIM10->CCMR1 &= ~TIM_CCMR1_CC1S; //канал на выход
TIM10->CCR1 = TIM10->ARR/2; // коэффициент заполнения 50%
TIM10->CCER &= ~TIM_CCER_CC1P; // активный сигнал высокий
TIM10->CCER |= TIM_CCER_CC1E; // активировать выход OC1
TIM10->EGR = TIM_EGR_UG; //необходимо установить для установки всех коэффициентов
TIM10->CR1|= TIM_CR1_CEN; // Запуск таймера
}
while (1) {
set_servo_rot_angle(0);
HAL_Delay(1000);
set_servo_rot_angle(30);
HAL_Delay(1000);
set_servo_rot_angle(60);
HAL_Delay(1000);
set_servo_rot_angle(90);
HAL_Delay(1000);
set_servo_rot_angle(120);
HAL_Delay(1000);
set_servo_rot_angle(150);
HAL_Delay(1000);
set_servo_rot_angle(180);
HAL_Delay(1000);
set_servo_rot_angle(150);
HAL_Delay(1000);
set_servo_rot_angle(120);
HAL_Delay(1000);
set_servo_rot_angle(90);
HAL_Delay(1000);
set_servo_rot_angle(60);
HAL_Delay(1000);
set_servo_rot_angle(30);
HAL_Delay(1000);
}
Вс фев 06, 2022 15:19:59
TIM10->CCR1 = TIM10->ARR/2; // коэффициент заполнения 50%
Вс фев 06, 2022 15:30:00
void set_servo_rot_angle(uint8_t deg) {
TIM10->CCR1 = 500 + (2000/180 * deg); // коэффициент заполнения
}
Вс фев 06, 2022 15:35:54
(2000/180 * deg)
Вс фев 06, 2022 16:01:52
Вс фев 06, 2022 16:26:29
Вс фев 06, 2022 16:38:27
Вс фев 06, 2022 16:56:36
Чт фев 24, 2022 16:00:26