F28035 输出三相 SPWM脉冲程序

时间: 2024-05-13 16:14:36 浏览: 9
以下是基于F28035的三相SPWM脉冲程序示例: 首先,需要定义SPWM参数,例如谐波数量、采样频率等。这些参数可以根据具体应用进行调整。 ```C #define PWM_FREQUENCY 20000 #define DEAD_BAND 0 #define MAX_DUTY_CYCLE 0.95 #define MIN_DUTY_CYCLE 0.05 #define PWM_COUNTS ((float)CPUFREQ/PWM_FREQUENCY) #define DEAD_BAND_COUNTS ((float)CPUFREQ*DEAD_BAND/1000) #define PWM_PERIOD_COUNTS (PWM_COUNTS-2*DEAD_BAND_COUNTS) #define ONE_CYCLE_COUNTS (6*PWM_PERIOD_COUNTS) #define HALF_CYCLE_COUNTS (ONE_CYCLE_COUNTS/2) #define SAMPLE_FREQUENCY (PWM_FREQUENCY*20) #define SAMPLE_COUNTS ((float)CPUFREQ/SAMPLE_FREQUENCY) #define HARMONIC_COUNT 25 #define PI 3.14159265358979323846 #define TWO_PI 6.28318530717958647692 ``` 接着,需要定义SPWM函数,用于生成三相SPWM波形。该函数的实现过程如下: ```C void SPWM(float phase_shift, float amplitude, float frequency, float *sine_table, float *sine_table_index, float *duty_cycle) { float count = 0; float sine_value = 0; float sine_table_step = (float)SAMPLE_FREQUENCY/frequency; float sine_table_index_step = sine_table_step/SAMPLE_COUNTS; float phase_shift_counts = phase_shift/360*ONE_CYCLE_COUNTS; float sine_table_index_offset = phase_shift_counts/sine_table_index_step; float amplitude_counts = amplitude*PWM_PERIOD_COUNTS/3.3; float harmonic_amplitude[HARMONIC_COUNT+1] = {0, 0.6667, 0.2, 0.1333, 0.1, 0.08, 0.0667, 0.0571, 0.05, 0.0444, 0.04, 0.0364, 0.0333, 0.0308, 0.0286, 0.0267, 0.025, 0.0235, 0.0222, 0.0211, 0.02, 0.019, 0.0182, 0.0174, 0.0167}; for(int i = 0; i < PWM_PERIOD_COUNTS; i++) { count++; if(count > sine_table_step) { count = 1; *sine_table_index += sine_table_index_step; if(*sine_table_index >= SAMPLE_COUNTS) { *sine_table_index = 0; } } sine_value = sine_table[(int)(*sine_table_index+sine_table_index_offset)]; *duty_cycle = 0.5*(amplitude_counts*sine_value/PWM_PERIOD_COUNTS); for(int j = 1; j <= HARMONIC_COUNT; j++) { sine_value = sine_table[(int)(*sine_table_index+sine_table_index_offset)*j]; *duty_cycle += harmonic_amplitude[j]*(amplitude_counts*sine_value/PWM_PERIOD_COUNTS); } if(*duty_cycle < MIN_DUTY_CYCLE) { *duty_cycle = MIN_DUTY_CYCLE; } else if(*duty_cycle > MAX_DUTY_CYCLE) { *duty_cycle = MAX_DUTY_CYCLE; } } } ``` 最后,需要在主函数中调用SPWM函数,生成三相SPWM波形: ```C float sine_table[SAMPLE_COUNTS]; float sine_table_index = 0; float duty_cycle = 0; for(int i = 0; i < SAMPLE_COUNTS; i++) { sine_table[i] = sin(TWO_PI*i/SAMPLE_COUNTS); } while(1) { SPWM(0, 3.3, PWM_FREQUENCY, sine_table, &sine_table_index, &duty_cycle); EPwm1Regs.CMPA.half.CMPA = duty_cycle*PWM_PERIOD_COUNTS; EPwm2Regs.CMPA.half.CMPA = duty_cycle*PWM_PERIOD_COUNTS; EPwm3Regs.CMPA.half.CMPA = duty_cycle*PWM_PERIOD_COUNTS; } ``` 上述代码中,通过调用SPWM函数生成三相SPWM波形,并将其写入EPwm1Regs、EPwm2Regs和EPwm3Regs寄存器中,以输出到三相驱动器中。

相关推荐

最新推荐

recommend-type

正弦波脉宽调制(SPWM)原理小谈

SPWM脉冲系列中,各脉冲的宽度以及相互间的间隔宽度是由正弦波(基准波或调制波)和等腰三角波(载波)的交点来决定的。具体方法如后所述。
recommend-type

单片机与DSP中的SA8281型SPWM波发生器原理及在变频器中的应用

摘要:介绍SA8281型正弦脉宽调制(SPWM)波发生器的原理和编程特点,以及基于SA8281和89C52型单片机的变频器的软硬件设计。 关键词:SA8281;...SA8281是MITEL公司推出的一种用于三相SPWM波发生和控制的集成电路,它
recommend-type

PWM调制和SPWM调制区别

所谓SPWM,就是在PWM的基础上改变了调制脉冲方式,脉冲宽度时间占空比按正弦规律排列,这样输出波形经过适当的滤波可以做到正弦波输出。...三相SPWM是使用SPWM模拟市电的三相输出,在变频器领域被广泛的采用。
recommend-type

SVPWM的基本原理和应用

所谓SPWM,就是在PWM的基础上改变了调制脉冲方式,脉冲宽度时间占空比按正弦规律排列,这样输出波形经过适当的滤波可以做到正弦波输出。...三相SPWM是使用SPWM模拟市电的三相输出,在变频器领域被广泛的采用。
recommend-type

变频原理介绍与变频驱动

所谓SPWM调制,简单地来说,就是在进行脉宽调制时,使脉冲序列的占空比按照正弦波的规律进行变化,即,当正弦波幅值为最大值时,脉冲的宽度也最大,当正弦波幅值为最小值时,脉冲的宽度也最小(如图4所示)。...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

HSV转为RGB的计算公式

HSV (Hue, Saturation, Value) 和 RGB (Red, Green, Blue) 是两种表示颜色的方式。下面是将 HSV 转换为 RGB 的计算公式: 1. 将 HSV 中的 S 和 V 值除以 100,得到范围在 0~1 之间的值。 2. 计算色相 H 在 RGB 中的值。如果 H 的范围在 0~60 或者 300~360 之间,则 R = V,G = (H/60)×V,B = 0。如果 H 的范围在 60~120 之间,则 R = ((120-H)/60)×V,G = V,B = 0。如果 H 的范围在 120~180 之间,则 R = 0,G = V,B =
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。