Настройка ШИМ в соответствии со схемой
Временно частота независимых каналов 100 кГц
This commit is contained in:
parent
88e05dea3d
commit
e00e3daaff
Binary file not shown.
@ -17,6 +17,11 @@ void GpioInit(void)
|
|||||||
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
|
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
|
||||||
GpioDataRegs.GPADAT.bit.GPIO0 = 0;
|
GpioDataRegs.GPADAT.bit.GPIO0 = 0;
|
||||||
GpioDataRegs.GPADAT.bit.GPIO1 = 0;
|
GpioDataRegs.GPADAT.bit.GPIO1 = 0;
|
||||||
|
|
||||||
|
GpioCtrlRegs.GPAGMUX2.bit.GPIO18 = 0;
|
||||||
|
GpioCtrlRegs.GPAGMUX2.bit.GPIO18 = 0;
|
||||||
|
GpioCtrlRegs.GPADIR.bit.GPIO18 = 0;
|
||||||
|
|
||||||
EDIS;
|
EDIS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
8
Projects/epwm_test/src/i2c_init.c
Normal file
8
Projects/epwm_test/src/i2c_init.c
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*
|
||||||
|
* i2c_init.c
|
||||||
|
*
|
||||||
|
* Created on: 5 ñåíò. 2023 ã.
|
||||||
|
* Author: seklyuts
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
13
Projects/epwm_test/src/i2c_init.h
Normal file
13
Projects/epwm_test/src/i2c_init.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/*
|
||||||
|
* i2c_init.h
|
||||||
|
*
|
||||||
|
* Created on: 5 ñåíò. 2023 ã.
|
||||||
|
* Author: seklyuts
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRC_I2C_INIT_H_
|
||||||
|
#define SRC_I2C_INIT_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* SRC_I2C_INIT_H_ */
|
||||||
@ -8,6 +8,7 @@
|
|||||||
#include "f28x_project.h"
|
#include "f28x_project.h"
|
||||||
#include "pwm_init.h"
|
#include "pwm_init.h"
|
||||||
#include "pwm_interrupts.h"
|
#include "pwm_interrupts.h"
|
||||||
|
#include "gpio_init.h"
|
||||||
|
|
||||||
#define COUNT_UP 1
|
#define COUNT_UP 1
|
||||||
#define COUNT_DOWN 0
|
#define COUNT_DOWN 0
|
||||||
@ -15,6 +16,8 @@
|
|||||||
volatile struct EPWM_REGS * EPwmRegs[17] = {NULL, &EPwm1Regs, &EPwm2Regs, &EPwm3Regs, &EPwm4Regs, &EPwm5Regs, &EPwm6Regs, &EPwm7Regs, &EPwm8Regs, &EPwm9Regs, &EPwm10Regs, &EPwm11Regs, &EPwm12Regs, &EPwm13Regs, &EPwm14Regs, &EPwm15Regs, &EPwm16Regs};
|
volatile struct EPWM_REGS * EPwmRegs[17] = {NULL, &EPwm1Regs, &EPwm2Regs, &EPwm3Regs, &EPwm4Regs, &EPwm5Regs, &EPwm6Regs, &EPwm7Regs, &EPwm8Regs, &EPwm9Regs, &EPwm10Regs, &EPwm11Regs, &EPwm12Regs, &EPwm13Regs, &EPwm14Regs, &EPwm15Regs, &EPwm16Regs};
|
||||||
Uint32 EPwmTimerIntCount[17];
|
Uint32 EPwmTimerIntCount[17];
|
||||||
Uint16 EPwm_DB_Direction[17];
|
Uint16 EPwm_DB_Direction[17];
|
||||||
|
volatile Uint16 PwmBrake100 = PERIOD_BRAKE;
|
||||||
|
volatile Uint16 PwmMotor100 = PERIOD_MOTOR;
|
||||||
|
|
||||||
|
|
||||||
void pwm_AutoChange(uint16_t Num)
|
void pwm_AutoChange(uint16_t Num)
|
||||||
@ -57,13 +60,16 @@ void PWMAllInit(void)
|
|||||||
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0;
|
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0;
|
||||||
EDIS;
|
EDIS;
|
||||||
|
|
||||||
uint16_t i;
|
|
||||||
|
|
||||||
for(i = 2; i<=6; i++)
|
PwmBrake100 = PERIOD_BRAKE;
|
||||||
{
|
PwmMotor100 = PERIOD_MOTOR;
|
||||||
PWMInit(i, PERIOD);
|
|
||||||
}
|
PWMInit(2, PERIOD_MOTOR, COMPLIMENTARY);
|
||||||
PWMInit(11, PERIOD);
|
PWMInit(3, PERIOD_MOTOR, COMPLIMENTARY);
|
||||||
|
PWMInit(4, PERIOD_MOTOR, COMPLIMENTARY);
|
||||||
|
PWMInit(5, PERIOD_BRAKE, INDEPENDED);
|
||||||
|
PWMInit(6, PERIOD_BRAKE, INDEPENDED);
|
||||||
|
// PWMInit(11, PERIOD, INDEPENDED);
|
||||||
|
|
||||||
EALLOW;
|
EALLOW;
|
||||||
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =1;
|
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =1;
|
||||||
@ -73,7 +79,7 @@ void PWMAllInit(void)
|
|||||||
|
|
||||||
void PWMInitGpio(void)
|
void PWMInitGpio(void)
|
||||||
{
|
{
|
||||||
InitEPwm1Gpio();
|
// InitEPwm1Gpio();
|
||||||
InitEPwm2Gpio();
|
InitEPwm2Gpio();
|
||||||
InitEPwm3Gpio();
|
InitEPwm3Gpio();
|
||||||
InitEPwm4Gpio();
|
InitEPwm4Gpio();
|
||||||
@ -119,11 +125,11 @@ void PWMInitInterruptEn(void)
|
|||||||
PieCtrlRegs.PIEIER3.bit.INTx3 = 1;
|
PieCtrlRegs.PIEIER3.bit.INTx3 = 1;
|
||||||
PieCtrlRegs.PIEIER3.bit.INTx4 = 1;
|
PieCtrlRegs.PIEIER3.bit.INTx4 = 1;
|
||||||
PieCtrlRegs.PIEIER3.bit.INTx5 = 1;
|
PieCtrlRegs.PIEIER3.bit.INTx5 = 1;
|
||||||
// PieCtrlRegs.PIEIER3.bit.INTx6 = 1;
|
PieCtrlRegs.PIEIER3.bit.INTx6 = 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PWMInit(uint16_t Num, uint16_t Period)
|
void PWMInit(uint16_t Num, uint16_t Period, uint16_t Independed)
|
||||||
{
|
{
|
||||||
|
|
||||||
EPwmRegs[Num]->TBPRD = Period; // Set timer period
|
EPwmRegs[Num]->TBPRD = Period; // Set timer period
|
||||||
@ -146,7 +152,7 @@ void PWMInit(uint16_t Num, uint16_t Period)
|
|||||||
//
|
//
|
||||||
// Setup compare
|
// Setup compare
|
||||||
//
|
//
|
||||||
EPwmRegs[Num]->CMPA.bit.CMPA = Period/2;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Set actions
|
// Set actions
|
||||||
@ -161,10 +167,22 @@ void PWMInit(uint16_t Num, uint16_t Period)
|
|||||||
// Active Low PWMs - Setup Deadband
|
// Active Low PWMs - Setup Deadband
|
||||||
//
|
//
|
||||||
EPwmRegs[Num]->DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
|
EPwmRegs[Num]->DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
|
||||||
EPwmRegs[Num]->DBCTL.bit.POLSEL = DB_ACTV_HIC; //DB_ACTV_HI - independ
|
if(Independed)
|
||||||
|
{
|
||||||
|
EPwmRegs[Num]->CMPA.bit.CMPA = Period;
|
||||||
|
EPwmRegs[Num]->DBCTL.bit.POLSEL = DB_ACTV_HI; //DB_ACTV_HI - independ
|
||||||
|
EPwmRegs[Num]->DBRED.bit.DBRED = 0;
|
||||||
|
EPwmRegs[Num]->DBFED.bit.DBFED = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
EPwmRegs[Num]->CMPA.bit.CMPA = Period/2;
|
||||||
|
EPwmRegs[Num]->DBCTL.bit.POLSEL = DB_ACTV_HIC;
|
||||||
|
EPwmRegs[Num]->DBRED.bit.DBRED = EPWM_DB;
|
||||||
|
EPwmRegs[Num]->DBFED.bit.DBFED = EPWM_DB;
|
||||||
|
}
|
||||||
EPwmRegs[Num]->DBCTL.bit.IN_MODE = DBA_ALL;
|
EPwmRegs[Num]->DBCTL.bit.IN_MODE = DBA_ALL;
|
||||||
EPwmRegs[Num]->DBRED.bit.DBRED = EPWM_DB;
|
|
||||||
EPwmRegs[Num]->DBFED.bit.DBFED = EPWM_DB;
|
|
||||||
// EPwm1_DB_Direction = COUNT_UP;
|
// EPwm1_DB_Direction = COUNT_UP;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@ -9,14 +9,17 @@
|
|||||||
#define SRC_PWM_INIT_H_
|
#define SRC_PWM_INIT_H_
|
||||||
|
|
||||||
|
|
||||||
#define PERIOD 5000
|
#define PERIOD_BRAKE 500
|
||||||
#define EPWM_DB 300
|
#define PERIOD_MOTOR 5000
|
||||||
#define PERIOD_2 PERIOD/2
|
#define EPWM_DB 150
|
||||||
#define PWM_MAX PERIOD - EPWM_DB
|
#define PERIOD_2 PERIOD_MOTOR/2
|
||||||
|
#define PWM_MAX PERIOD_MOTOR - EPWM_DB
|
||||||
#define PWM_MIN EPWM_DB
|
#define PWM_MIN EPWM_DB
|
||||||
|
#define INDEPENDED 1
|
||||||
|
#define COMPLIMENTARY 0
|
||||||
|
|
||||||
|
|
||||||
void PWMInit(uint16_t Num, uint16_t Period);
|
void PWMInit(uint16_t Num, uint16_t Period, uint16_t Independed);
|
||||||
void PWMInitGpio(void);
|
void PWMInitGpio(void);
|
||||||
void PWMInitEnable(void);
|
void PWMInitEnable(void);
|
||||||
void PWMInitInterruptEn(void);
|
void PWMInitInterruptEn(void);
|
||||||
|
|||||||
@ -8,10 +8,12 @@
|
|||||||
#include "f28x_project.h"
|
#include "f28x_project.h"
|
||||||
#include "pwm_init.h"
|
#include "pwm_init.h"
|
||||||
#include"frm_uart.h"
|
#include"frm_uart.h"
|
||||||
|
#include "gpio_init.h"
|
||||||
|
|
||||||
volatile Uint16 AutoChange = 0;
|
volatile Uint16 AutoChange = 0;
|
||||||
volatile Uint16 PWM_out = 0;
|
volatile Uint16 PWM_out = 0;
|
||||||
|
volatile Uint16 PWM_motor = PERIOD_2;
|
||||||
|
Uint16 Fault = 0, Fault_fix = 0;
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -19,8 +21,9 @@ volatile Uint16 PWM_out = 0;
|
|||||||
//
|
//
|
||||||
__interrupt void epwm1_isr(void)
|
__interrupt void epwm1_isr(void)
|
||||||
{
|
{
|
||||||
if(AutoChange) pwm_AutoChange(1);
|
// if(AutoChange) pwm_AutoChange(1);
|
||||||
else EPwm1Regs.CMPA.bit.CMPA = PWM_out;
|
// else
|
||||||
|
EPwm1Regs.CMPA.bit.CMPA = PWM_out;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Clear INT flag for this timer
|
// Clear INT flag for this timer
|
||||||
@ -38,8 +41,10 @@ __interrupt void epwm1_isr(void)
|
|||||||
//
|
//
|
||||||
__interrupt void epwm2_isr(void)
|
__interrupt void epwm2_isr(void)
|
||||||
{
|
{
|
||||||
if(AutoChange) pwm_AutoChange(2);
|
Gpio0out(1);
|
||||||
else EPwm2Regs.CMPA.bit.CMPA = PWM_out;
|
// if(AutoChange) pwm_AutoChange(2);
|
||||||
|
// else
|
||||||
|
EPwm2Regs.CMPA.bit.CMPA = PERIOD_MOTOR - PWM_motor;
|
||||||
// GpioDataRegs.GPADAT.bit.GPIO0 = 1;
|
// GpioDataRegs.GPADAT.bit.GPIO0 = 1;
|
||||||
FMSTR_enable_set();
|
FMSTR_enable_set();
|
||||||
//
|
//
|
||||||
@ -52,6 +57,7 @@ __interrupt void epwm2_isr(void)
|
|||||||
//
|
//
|
||||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
|
||||||
// GpioDataRegs.GPADAT.bit.GPIO0 = 0;
|
// GpioDataRegs.GPADAT.bit.GPIO0 = 0;
|
||||||
|
Gpio0out(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -59,8 +65,9 @@ __interrupt void epwm2_isr(void)
|
|||||||
//
|
//
|
||||||
__interrupt void epwm3_isr(void)
|
__interrupt void epwm3_isr(void)
|
||||||
{
|
{
|
||||||
if(AutoChange) pwm_AutoChange(3);
|
// if(AutoChange) pwm_AutoChange(3);
|
||||||
else EPwm3Regs.CMPA.bit.CMPA = PWM_out;
|
// else
|
||||||
|
EPwm3Regs.CMPA.bit.CMPA = PERIOD_MOTOR - PWM_motor;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Clear INT flag for this timer
|
// Clear INT flag for this timer
|
||||||
@ -76,8 +83,9 @@ __interrupt void epwm3_isr(void)
|
|||||||
|
|
||||||
__interrupt void epwm4_isr(void)
|
__interrupt void epwm4_isr(void)
|
||||||
{
|
{
|
||||||
if(AutoChange) pwm_AutoChange(4);
|
// if(AutoChange) pwm_AutoChange(4);
|
||||||
else EPwm4Regs.CMPA.bit.CMPA = PWM_out;
|
// else
|
||||||
|
EPwm4Regs.CMPA.bit.CMPA = PERIOD_MOTOR - PWM_motor;
|
||||||
//
|
//
|
||||||
// Clear INT flag for this timer
|
// Clear INT flag for this timer
|
||||||
//
|
//
|
||||||
@ -91,8 +99,20 @@ __interrupt void epwm4_isr(void)
|
|||||||
|
|
||||||
__interrupt void epwm5_isr(void)
|
__interrupt void epwm5_isr(void)
|
||||||
{
|
{
|
||||||
if(AutoChange) pwm_AutoChange(5);
|
Fault = !GpioDataRegs.GPADAT.bit.GPIO18;
|
||||||
else EPwm5Regs.CMPA.bit.CMPA = PWM_out;
|
if(Fault)
|
||||||
|
{
|
||||||
|
EPwm5Regs.CMPA.bit.CMPA = 0;
|
||||||
|
PWM_out = 0;
|
||||||
|
Fault_fix = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// if(AutoChange) pwm_AutoChange(5);
|
||||||
|
// else
|
||||||
|
EPwm5Regs.CMPA.bit.CMPA = PERIOD_BRAKE - PWM_out;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Clear INT flag for this timer
|
// Clear INT flag for this timer
|
||||||
//
|
//
|
||||||
@ -107,8 +127,9 @@ __interrupt void epwm5_isr(void)
|
|||||||
__interrupt void epwm6_isr(void)
|
__interrupt void epwm6_isr(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
if(AutoChange) pwm_AutoChange(6);
|
// if(AutoChange) pwm_AutoChange(6);
|
||||||
else EPwm6Regs.CMPA.bit.CMPA = PWM_out;
|
// else
|
||||||
|
EPwm6Regs.CMPA.bit.CMPA = PERIOD_BRAKE - PWM_out;
|
||||||
//
|
//
|
||||||
// Clear INT flag for this timer
|
// Clear INT flag for this timer
|
||||||
//
|
//
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include "f28x_project.h"
|
#include "f28x_project.h"
|
||||||
#include "f2838x_sdfm_drivers.h"
|
#include "f2838x_sdfm_drivers.h"
|
||||||
|
#include "gpio_init.h"
|
||||||
//
|
//
|
||||||
// Defines
|
// Defines
|
||||||
//
|
//
|
||||||
@ -147,7 +148,7 @@ __interrupt void Sdfm1_ISR(void)
|
|||||||
{
|
{
|
||||||
static uint16_t loopCounter1 = 0;
|
static uint16_t loopCounter1 = 0;
|
||||||
|
|
||||||
|
Gpio1out(1);
|
||||||
//
|
//
|
||||||
// Wait for result from all the filters (SDIFLG)
|
// Wait for result from all the filters (SDIFLG)
|
||||||
//
|
//
|
||||||
@ -195,6 +196,7 @@ __interrupt void Sdfm1_ISR(void)
|
|||||||
// Acknowledge this __interrupt to receive more __interrupts from group 5
|
// Acknowledge this __interrupt to receive more __interrupts from group 5
|
||||||
//
|
//
|
||||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP5;
|
PieCtrlRegs.PIEACK.all = PIEACK_GROUP5;
|
||||||
|
Gpio1out(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Sdfm_clearFlagRegister
|
//Sdfm_clearFlagRegister
|
||||||
|
|||||||
10
Projects/epwm_test/src/spi_init.c
Normal file
10
Projects/epwm_test/src/spi_init.c
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
/*
|
||||||
|
* spi_init.c
|
||||||
|
*
|
||||||
|
* Created on: 5 ñåíò. 2023 ã.
|
||||||
|
* Author: seklyuts
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
15
Projects/epwm_test/src/spi_init.h
Normal file
15
Projects/epwm_test/src/spi_init.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/*
|
||||||
|
* spi_init.h
|
||||||
|
*
|
||||||
|
* Created on: 5 ñåíò. 2023 ã.
|
||||||
|
* Author: seklyuts
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRC_SPI_INIT_H_
|
||||||
|
#define SRC_SPI_INIT_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* SRC_SPI_INIT_H_ */
|
||||||
Loading…
Reference in New Issue
Block a user