30 lines
1.0 KiB
C
30 lines
1.0 KiB
C
|
|
#include "driver/ledc.h"
|
||
|
|
#include "defines.h"
|
||
|
|
|
||
|
|
void init_servo_PWM(void) {
|
||
|
|
ledc_timer_config_t ledc_timer = {
|
||
|
|
.speed_mode = LEDC_LOW_SPEED_MODE,
|
||
|
|
.timer_num = LEDC_TIMER_0,
|
||
|
|
.duty_resolution = LEDC_TIMER_16_BIT,
|
||
|
|
.freq_hz = 50,
|
||
|
|
.clk_cfg = LEDC_AUTO_CLK
|
||
|
|
};
|
||
|
|
ESP_ERROR_CHECK(ledc_timer_config(&ledc_timer));
|
||
|
|
|
||
|
|
ledc_channel_config_t ledc_channel = {
|
||
|
|
.speed_mode = LEDC_LOW_SPEED_MODE,
|
||
|
|
.channel = LEDC_CHANNEL_0,
|
||
|
|
.timer_sel = LEDC_TIMER_0,
|
||
|
|
.intr_type = LEDC_INTR_DISABLE,
|
||
|
|
.gpio_num = 0, // Using pin D0 for servo.
|
||
|
|
.duty = offSpeed, // Start off
|
||
|
|
.hpoint = 0
|
||
|
|
};
|
||
|
|
ESP_ERROR_CHECK(ledc_channel_config(&ledc_channel));
|
||
|
|
}
|
||
|
|
|
||
|
|
void set_servo_speed(int channel, uint32_t duty) {
|
||
|
|
// duty input should be between 0 and 65535
|
||
|
|
ledc_set_duty(LEDC_LOW_SPEED_MODE, (ledc_channel_t)channel, duty);
|
||
|
|
ledc_update_duty(LEDC_LOW_SPEED_MODE, (ledc_channel_t)channel);
|
||
|
|
}
|