Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Arduino.h>
- #include "driver/mcpwm.h"
- #include "soc/mcpwm_reg.h"
- #include "soc/mcpwm_struct.h"
- #include "wiring_private.h" // pinPeripheral() function
- // MCPWM Pins
- #define GPIO_PWM0A_OUT 12
- #define GPIO_PWM0B_OUT 13
- float pwm1 = 12; // 100 = more voltage, 0 = less
- static void setup_mcpwm_pins() {
- Serial.println("initializing mcpwm control gpio...n");
- mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0A, GPIO_PWM0A_OUT);
- mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0B, GPIO_PWM0B_OUT);
- } // setup_pins()
- static void setup_mcpwm() {
- setup_mcpwm_pins();
- mcpwm_config_t pwm_config;
- pwm_config.frequency = 50000; // frequency = 20000Hz
- pwm_config.cmpr_a = 95.0; // duty cycle of PWMxA = 50.0%
- pwm_config.cmpr_b = 95.0; // duty cycle of PWMxB = 50.0%
- pwm_config.counter_mode =
- MCPWM_UP_DOWN_COUNTER; // MCPWM_UP_DOWN_COUNTER; // Up-down counter (triangle
- // wave)
- pwm_config.duty_mode = MCPWM_DUTY_MODE_0; // Active HIGH
- mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config); // Configure PWM0A & PWM0B with above settings
- mcpwm_deadtime_enable(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_ACTIVE_HIGH_COMPLIMENT_MODE, 1, 1);
- mcpwm_timer_set_resolution(MCPWM_UNIT_0, MCPWM_TIMER_0, 8);
- mcpwm_set_timer_sync_output(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_SWSYNC_SOURCE_SYNCIN);
- delayMicroseconds(1000);
- } // setup_mcpwm
- void set_duty(int mode, float duty) {
- mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_A, duty);
- mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_B, duty);
- }
- void setup() {
- setup_mcpwm();
- set_duty(1, 50);
- }
- void loop() {
- // put your main code here, to run repeatedly:
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement