Настройка ШИМ в соответствии со схемой

Временно частота независимых каналов 100 кГц
This commit is contained in:
Eugene 2023-09-05 17:45:33 +03:00
parent 88e05dea3d
commit e00e3daaff
10 changed files with 127 additions and 32 deletions

Binary file not shown.

View File

@ -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;
} }

View File

@ -0,0 +1,8 @@
/*
* i2c_init.c
*
* Created on: 5 ñåíò. 2023 ã.
* Author: seklyuts
*/

View 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_ */

View File

@ -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;
// //

View File

@ -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);

View File

@ -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
// //

View File

@ -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

View File

@ -0,0 +1,10 @@
/*
* spi_init.c
*
* Created on: 5 ñåíò. 2023 ã.
* Author: seklyuts
*/

View 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_ */