福田区建设局网站,软件外包网站,带数据库网站模板,自己做的相册网站【测试】STM32F103C8T6 双极性SPWM单相全桥逆变带载#xff08;阻性#xff09;测试 #x1f9e0; 请为这个项目建立一份模块结构图#xff0c;并解释每个模块的职责。 #x1f9e0; 请列出这个项目中所有初始化流程的调用顺序。 #x1f9e0; 请总结一下项目的主控逻辑和… 【测试】STM32F103C8T6 双极性SPWM单相全桥逆变带载阻性测试 请为这个项目建立一份模块结构图并解释每个模块的职责。 请列出这个项目中所有初始化流程的调用顺序。 请总结一下项目的主控逻辑和控制流程。 我来帮您分析这个STM32项目的结构和逻辑。首先让我查看项目的主要文件来了解完整的架构。 Read file: USER/main.c Read file: USER/main.h Search files… Read file: USER/main.c 现在让我查看一些其他关键模块的头文件和定义 Read file: HARDWARE/TIMER/timer.h Read file: SYSTEM/usart/usart.h Read file: HARDWARE/ADC/adc.h
让我查看一下常用的宏定义来了解项目中的硬件控制接口 Ran tool 现在我已经掌握了项目的整体结构。让我为您创建模块结构图并进行详细分析。 Ran tool #mermaid-svg-VYn2MB8XguuKAQut {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-VYn2MB8XguuKAQut .error-icon{fill:#552222;}#mermaid-svg-VYn2MB8XguuKAQut .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VYn2MB8XguuKAQut .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-VYn2MB8XguuKAQut .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VYn2MB8XguuKAQut .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VYn2MB8XguuKAQut .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VYn2MB8XguuKAQut .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VYn2MB8XguuKAQut .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VYn2MB8XguuKAQut .marker.cross{stroke:#333333;}#mermaid-svg-VYn2MB8XguuKAQut svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VYn2MB8XguuKAQut .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-VYn2MB8XguuKAQut .cluster-label text{fill:#333;}#mermaid-svg-VYn2MB8XguuKAQut .cluster-label span{color:#333;}#mermaid-svg-VYn2MB8XguuKAQut .label text,#mermaid-svg-VYn2MB8XguuKAQut span{fill:#333;color:#333;}#mermaid-svg-VYn2MB8XguuKAQut .node rect,#mermaid-svg-VYn2MB8XguuKAQut .node circle,#mermaid-svg-VYn2MB8XguuKAQut .node ellipse,#mermaid-svg-VYn2MB8XguuKAQut .node polygon,#mermaid-svg-VYn2MB8XguuKAQut .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VYn2MB8XguuKAQut .node .label{text-align:center;}#mermaid-svg-VYn2MB8XguuKAQut .node.clickable{cursor:pointer;}#mermaid-svg-VYn2MB8XguuKAQut .arrowheadPath{fill:#333333;}#mermaid-svg-VYn2MB8XguuKAQut .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-VYn2MB8XguuKAQut .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-VYn2MB8XguuKAQut .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-VYn2MB8XguuKAQut .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-VYn2MB8XguuKAQut .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-VYn2MB8XguuKAQut .cluster text{fill:#333;}#mermaid-svg-VYn2MB8XguuKAQut .cluster span{color:#333;}#mermaid-svg-VYn2MB8XguuKAQut div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-VYn2MB8XguuKAQut :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 主控程序(main.c) 系统初始化模块 硬件驱动模块 用户功能模块 延时模块 (delay.c/h) 系统配置 (sys.c/h) 串口通信 (usart.c/h) 定时器模块 (timer.c/h) ADC采样 (adc.c/h) 按键输入 (key.c/h) OLED显示 (oled.c/h) Flash存储 (stmflash.c/h) LED控制 (led.c/h) SPWM波形生成 频率/幅值控制 过流保护 电压电流检测 TIM1: PWM输出 (20KHz载波) TIM2: SPWM中断 (波形更新) TIM3: 定时中断 (1秒计时) PA1: 输入电压检测 PA2: 输出电流检测 STM32外设库 (FWlib) CMSIS核心层 项目模块结构分析
1. 各模块职责详解
系统初始化模块
延时模块(delay): 提供ms/us级别的精确延时功能系统配置(sys): 配置系统时钟、中断优先级分组、GPIO位操作宏定义串口通信(usart): 实现串口通信支持printf调试输出和参数设置
硬件驱动模块
定时器模块(timer): TIM1: 生成20KHz的PWM载波双通道互补输出带死区TIM2: SPWM波形更新中断控制输出频率TIM3: 10ms*100 1秒定时中断用于计时和显示刷新 ADC采样(adc): 双通道ADC采样检测输入电压(PA1)和输出电流(PA2)按键输入(key): 4键输入支持频率/幅值调节包含IR2110使能控制OLED显示(oled): I2C接口OLED屏幕显示系统状态Flash存储(stmflash): 内部Flash读写保存用户参数LED控制(led): 状态指示LED控制
用户功能模块
SPWM波形生成: 400点正弦查表生成可调频率和幅值的正弦PWM频率/幅值控制: 频率范围2-200Hz幅值可调0-输入电压峰值过流保护: 电流超过2A自动关断低于0.12A延时5秒后恢复电压电流检测: 实时检测输入电压和输出电流带滤波算法
2. 初始化流程调用顺序
根据main.c函数的初始化顺序
int main(void) {// 1. 基础系统初始化delay_init(); // 延时函数初始化NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 中断优先级分组设置// 2. 硬件外设初始化KEY_Init(); // 按键初始化Adc_Init(); // ADC初始化uart1_init(9600); // 串口初始化// 3. 定时器初始化关键TIM2_Int_Init(100,48); // SPWM更新定时器(10KHz基准)getSinPlv(PlvTemp); // 根据频率设置TIM2周期getSinTab(400,VolTemp); // 生成正弦查表TIM3_Int_Init(100,4800); // 1秒计时定时器TIM1_PWM_Init(1200,2); // PWM载波定时器(20KHz)// 4. 显示系统初始化OLED_Init(); // OLED显示初始化OLED_Clear(); // 清屏OLED_ShowString(...); // 显示初始界面// 5. 进入主循环while(1) { ... }
}3. 主控逻辑和控制流程
主循环控制流程:
显示更新: 每1秒刷新一次OLED显示(TimeCount11)按键扫描: 实时检测按键输入调节频率和幅值串口命令: 处理串口接收的参数设置命令过流保护: 电流2A(ADC值993): 立即关断输出电流0.12A(ADC值60): 延时5秒后恢复输出 电压监测: 输入电压变化2V时重新计算PWM系数参数更新: 按键无操作2秒后应用新的频率/幅值设置
SPWM生成原理:
TIM1: 生成20KHz的PWM载波双通道互补输出TIM2: 根据输出频率设置中断周期每次中断更新PWM占空比正弦查表: 400个点的正弦表通过插值生成平滑的正弦波幅值控制: 根据输入电压动态计算1V对应的PWM值频率控制: 通过调整TIM2的中断周期实现频率调节
安全保护机制:
过流保护: 硬件电流检测软件判断双重保护死区设置: PWM输出带500ns死区防止上下桥臂直通参数限制: 频率2-200Hz幅值不超过输入电压滤波算法: 32点滑动平均滤波提高检测精度
这是一个典型的SPWM逆变电源控制系统采用模块化设计具有完善的保护机制和用户交互界面。 “请结合代码分析SPWM生成相关的原理解释各个变量和函数的功能并说明各自在SPWM中的作用” 基于您提供的代码我来深入分析SPWM正弦脉宽调制生成的原理和实现机制。
SPWM生成原理详解
1. 核心变量分析
SPWM波形生成相关变量
unsigned int T_SinTable[500]; // 正弦波查找表存储400个正弦波采样点
unsigned int PWM_Index0; // SPWM查表索引指向当前输出的波形点
uint8_t Para0; // 幅值系数1V对应的PWM脉宽值
uint8_t VolTemp0; // 用户设定的输出幅值(峰值电压)
uint16_t PlvTemp50; // 用户设定的输出频率默认50Hz控制和状态变量
int Voltage0; // 当前输入电压值(单位:0.1V)
int _voltage0; // 输入电压暂存值用于变化检测
uint16_t TimeCount20; // 参数更新延时计数器
uint8_t ShortFlag0; // 过流保护标志位2. 关键函数功能分析
2.1 正弦波表生成函数 getSinTab()
void getSinTab(u16 point,u16 maxnum)
{u16 i0; float x0.000,y0.000; // 弧度float jiao0.000; // 角度分度角jiao360.000/point; // 计算每个采样点的角度间隔maxnummaxnum*Para; // 用户设定幅值 × 1V系数 实际PWM幅值if(maxnum1188) // 限制最大PWM值(考虑死区时间)maxnum1188;if(maxnum0){for(i0;ipoint;i){yjiao*i; // 当前点的角度xy*0.01745; // 角度转弧度 (π/180≈0.01745)// 生成正弦波PWM值中心值600 幅值×sin(角度)T_SinTable[i]600(maxnum/2)*sin(x);// 限幅处理if(T_SinTable[i]1188) T_SinTable[i]1188;if(T_SinTable[i]1) T_SinTable[i]1;}// 使能PWM输出if(ShortFlag0){TIM_CtrlPWMOutputs(TIM1, ENABLE);ENA_Clr(); // 开启IR2110驱动}}else{ENA_Set(); // 关闭H桥TIM_CtrlPWMOutputs(TIM1, DISABLE);}
}功能解析:
point400: 一个正弦周期采样400个点maxnum: 用户设定的输出幅值Para: 根据输入电压动态计算的幅值系数600: PWM的中心值(占空比50%)1188: 考虑死区时间的最大PWM值
2.2 频率控制函数 getSinPlv()
void getSinPlv(uint16_t plv)
{float cycle;unsigned int timeinit;cycle2500/plv; // 计算TIM2的中断周期timeinitcycle; // 浮点转整数TIM2_Int_Init(timeinit,48); // 重新初始化TIM2定时器
}频率计算原理:
基准频率: 48MHz/48 1MHz中断周期: timeinit微秒输出频率: 1000000/(timeinit×400) Hz公式推导: cycle 2500/plv → freq 1000000/(2500×400/plv) plv Hz
2.3 幅值系数计算
Para 1187/(Voltage/10); // 计算1V对应的PWM脉宽值计算逻辑:
Voltage: 输入电压×10 (例如24V显示为240)1187: 最大可用PWM范围Para: 每1V输出对应的PWM增量
3. SPWM更新机制
定时器中断服务函数 (timer.c)
void TIM2_IRQHandler(void) // TIM2中断
{if (TIM_GetITStatus(TIM2, TIM_IT_Update) ! RESET){TIM_ClearITPendingBit(TIM2, TIM_IT_Update);// 翻转PC13引脚(调试用)GPIO_WriteBit(GPIOC,GPIO_Pin_13,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_13))));// 更新PWM占空比TIM_SetCompare1(TIM1,T_SinTable[PWM_Index]); // 通道1TIM_SetCompare2(TIM1,T_SinTable[PWM_Index]); // 通道2// 索引循环if(PWM_Index400)PWM_Index0;}
}4. SPWM生成流程图 #mermaid-svg-LCcGdzBAqMasNCRu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LCcGdzBAqMasNCRu .error-icon{fill:#552222;}#mermaid-svg-LCcGdzBAqMasNCRu .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-LCcGdzBAqMasNCRu .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-LCcGdzBAqMasNCRu .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-LCcGdzBAqMasNCRu .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-LCcGdzBAqMasNCRu .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-LCcGdzBAqMasNCRu .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-LCcGdzBAqMasNCRu .marker{fill:#333333;stroke:#333333;}#mermaid-svg-LCcGdzBAqMasNCRu .marker.cross{stroke:#333333;}#mermaid-svg-LCcGdzBAqMasNCRu svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-LCcGdzBAqMasNCRu .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-LCcGdzBAqMasNCRu .cluster-label text{fill:#333;}#mermaid-svg-LCcGdzBAqMasNCRu .cluster-label span{color:#333;}#mermaid-svg-LCcGdzBAqMasNCRu .label text,#mermaid-svg-LCcGdzBAqMasNCRu span{fill:#333;color:#333;}#mermaid-svg-LCcGdzBAqMasNCRu .node rect,#mermaid-svg-LCcGdzBAqMasNCRu .node circle,#mermaid-svg-LCcGdzBAqMasNCRu .node ellipse,#mermaid-svg-LCcGdzBAqMasNCRu .node polygon,#mermaid-svg-LCcGdzBAqMasNCRu .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-LCcGdzBAqMasNCRu .node .label{text-align:center;}#mermaid-svg-LCcGdzBAqMasNCRu .node.clickable{cursor:pointer;}#mermaid-svg-LCcGdzBAqMasNCRu .arrowheadPath{fill:#333333;}#mermaid-svg-LCcGdzBAqMasNCRu .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-LCcGdzBAqMasNCRu .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-LCcGdzBAqMasNCRu .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-LCcGdzBAqMasNCRu .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-LCcGdzBAqMasNCRu .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-LCcGdzBAqMasNCRu .cluster text{fill:#333;}#mermaid-svg-LCcGdzBAqMasNCRu .cluster span{color:#333;}#mermaid-svg-LCcGdzBAqMasNCRu div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-LCcGdzBAqMasNCRu :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Yes No 频率 幅值 Yes No Yes 系统初始化 设置默认参数PlvTemp50HzVolTemp0V 检测输入电压Get_Voltage() 计算幅值系数Para1187/(Voltage/10) 生成正弦表getSinTab(400,VolTemp) 设置输出频率getSinPlv(PlvTemp) 启动定时器TIM1:20KHz载波TIM2:SPWM更新 TIM2中断(频率相关) 更新PWM占空比TIM_SetCompare1/2 索引递增PWM_Index 索引400? PWM_Index0开始新周期 用户调节 按键/串口输入? 更新PlvTemp调用getSinPlv() 更新VolTemp调用getSinTab() 保护机制 电流检测Get_Current() Current993(2A)? ShortFlag1关闭输出ENA_Set() Current60(0.12A)? 延时5秒后恢复输出 等待电流下降 5. 关键参数计算示例
50Hz正弦波输出计算:
TIM2中断周期: 2500/50 50微秒完整周期时间: 50μs × 400点 20ms 50Hz ✓TIM1载波频率: 48MHz/2/1200 20KHz每个正弦点持续: 50μs包含20KHz×50μs 1000个载波周期
电压幅值计算(假设24V输入):
输入电压: Voltage 240 (24.0V)幅值系数: Para 1187/(240/10) 1187/24 ≈ 49输出10V峰值: maxnum 10×49 490正弦波幅值: ±490/2 ±245 (相对中心值600)
6. SPWM技术优势
高频载波: 20KHz载波频率滤波后得到平滑正弦波精确控制: 400点采样0.9°角度分辨率动态调节: 实时调节频率(2-200Hz)和幅值死区保护: 500ns死区防止上下桥臂直通过流保护: 硬件软件双重保护机制
这个SPWM实现方案采用查表法生成高精度正弦波通过双定时器配合实现载波和调制波的精确控制是一个典型的数字化逆变电源控制系统。 用输入直流电压20V输出频率50Hz输出AC xx推导整个过程根据代码给出推导公式和计算过程。给出详细的计算过程和结果给出计算过程的流程图。
基于您提供的代码我来详细分析输入20V直流电压输出50Hz时的完整计算过程。
计算前提和参数分析
1. 系统参数
输入电压: 20V直流输出频率: 50HzPWM载波频率: 20KHz正弦波采样点: 400点/周期PWM计数范围: 0-1200PWM中心值: 600 (50%占空比)
2. 关键计算公式推导
输入电压检测和处理
// 电压检测滤波
filter_buf[FILTER_N] Get_Adc(1)*10.473;
Voltage(Filter())/100;计算过程:
输入20V → ADC采样 → 滤波处理 → Voltage 200 (单位:0.1V)幅值系数计算
Para1187/(Voltage/10); // 计算1V对应的PWM脉宽推导公式:
Para 1187 ÷ (Voltage ÷ 10)
Para 1187 ÷ (200 ÷ 10) 1187 ÷ 20 59.35 ≈ 593. 完整计算流程 #mermaid-svg-MZ0Q8dwpFo2N5tl3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .error-icon{fill:#552222;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .marker.cross{stroke:#333333;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .cluster-label text{fill:#333;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .cluster-label span{color:#333;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .label text,#mermaid-svg-MZ0Q8dwpFo2N5tl3 span{fill:#333;color:#333;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .node rect,#mermaid-svg-MZ0Q8dwpFo2N5tl3 .node circle,#mermaid-svg-MZ0Q8dwpFo2N5tl3 .node ellipse,#mermaid-svg-MZ0Q8dwpFo2N5tl3 .node polygon,#mermaid-svg-MZ0Q8dwpFo2N5tl3 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .node .label{text-align:center;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .node.clickable{cursor:pointer;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .arrowheadPath{fill:#333333;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .cluster text{fill:#333;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 .cluster span{color:#333;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-MZ0Q8dwpFo2N5tl3 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入: 20V直流 ADC检测Voltage 200(单位:0.1V) 计算幅值系数Para 1187/(200/10)Para 59 用户设置输出幅值VolTemp ?V(峰值电压) 计算实际PWM幅值maxnum VolTemp × Para 生成正弦波表T_SinTable[i] 600 (maxnum/2)×sin(θ) 频率设置: 50Hzcycle 2500/50 50μsTIM2中断周期 PWM更新每50μs更新一次PWM占空比400个点 20ms 50Hz 不同VolTemp设置的计算结果: VolTemp 10V峰值maxnum 10×59 590PWM幅值 ±295PWM范围: 305~895 VolTemp 15V峰值maxnum 15×59 885PWM幅值 ±442.5PWM范围: 157.5~1042.5 VolTemp 20V峰值(最大)maxnum 20×59 1180限制到1188PWM幅值 ±590PWM范围: 10~1190 4. 具体计算过程和代码对应
步骤1: 输入电压检测
void Get_Voltage()
{Voltage(Filter())/100; // 20V输入 → Voltage 200
}步骤2: 幅值系数计算
// 在主循环中
Para1187/(Voltage/10); // Para 1187/20 59步骤3: 用户设置输出幅值
假设用户通过按键设置输出15V峰值
// 按键控制中
if(keytemp3) // 幅值加
{if(VolTemp(Voltage/10)) // 最大20VVolTemp; // VolTemp 15
}步骤4: 生成正弦波表
void getSinTab(u16 point,u16 maxnum) // point400, maxnum15
{maxnummaxnum*Para; // maxnum 15×59 885for(i0;i400;i){yjiao*i; // 角度: 0°~359.1°xy*0.01745; // 转弧度// 生成正弦PWM值T_SinTable[i]600(885/2)*sin(x); // 600 ± 442.5// 限幅处理if(T_SinTable[i]1188) T_SinTable[i]1188;if(T_SinTable[i]1) T_SinTable[i]1;}
}步骤5: 频率控制
void getSinPlv(uint16_t plv) // plv 50Hz
{cycle2500/plv; // cycle 2500/50 50timeinitcycle; // timeinit 50μsTIM2_Int_Init(timeinit,48); // 每50μs中断一次
}5. 详细数值计算结果
输入条件: 20V直流50Hz输出
参数计算过程结果输入电压检测Voltage 20V × 10 200200 (0.1V单位)幅值系数Para 1187 ÷ 20 59.3559TIM2中断周期cycle 2500 ÷ 50 5050μs完整周期时间50μs × 400点 20ms50Hz ✓
不同输出幅值设置的结果:
情况1: VolTemp 10V峰值
maxnum 10 × 59 590
PWM幅值 590/2 295
PWM范围 600 ± 295 [305, 895]
占空比范围 [25.4%, 74.6%]情况2: VolTemp 15V峰值
maxnum 15 × 59 885
PWM幅值 885/2 442.5
PWM范围 600 ± 442.5 [157.5, 1042.5]
占空比范围 [13.1%, 86.9%]情况3: VolTemp 20V峰值(最大)
maxnum 20 × 59 1180
限制后 maxnum 1180 (未超过1188)
PWM幅值 1180/2 590
PWM范围 600 ± 590 [10, 1190]
占空比范围 [0.8%, 99.2%]6. 输出电压计算
理论输出电压(RMS值):
峰值电压 VolTemp (用户设置)
RMS电压 峰值电压 ÷ √2 ≈ 峰值电压 × 0.707例如: VolTemp 15V峰值
输出RMS 15V × 0.707 10.6V RMS7. 代码执行时序 #mermaid-svg-pMox5IC3nahv29iV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-pMox5IC3nahv29iV .error-icon{fill:#552222;}#mermaid-svg-pMox5IC3nahv29iV .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-pMox5IC3nahv29iV .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-pMox5IC3nahv29iV .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-pMox5IC3nahv29iV .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-pMox5IC3nahv29iV .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-pMox5IC3nahv29iV .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-pMox5IC3nahv29iV .marker{fill:#333333;stroke:#333333;}#mermaid-svg-pMox5IC3nahv29iV .marker.cross{stroke:#333333;}#mermaid-svg-pMox5IC3nahv29iV svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-pMox5IC3nahv29iV .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-pMox5IC3nahv29iV text.actortspan{fill:black;stroke:none;}#mermaid-svg-pMox5IC3nahv29iV .actor-line{stroke:grey;}#mermaid-svg-pMox5IC3nahv29iV .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-pMox5IC3nahv29iV .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-pMox5IC3nahv29iV #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-pMox5IC3nahv29iV .sequenceNumber{fill:white;}#mermaid-svg-pMox5IC3nahv29iV #sequencenumber{fill:#333;}#mermaid-svg-pMox5IC3nahv29iV #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-pMox5IC3nahv29iV .messageText{fill:#333;stroke:#333;}#mermaid-svg-pMox5IC3nahv29iV .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-pMox5IC3nahv29iV .labelText,#mermaid-svg-pMox5IC3nahv29iV .labelTexttspan{fill:black;stroke:none;}#mermaid-svg-pMox5IC3nahv29iV .loopText,#mermaid-svg-pMox5IC3nahv29iV .loopTexttspan{fill:black;stroke:none;}#mermaid-svg-pMox5IC3nahv29iV .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-pMox5IC3nahv29iV .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-pMox5IC3nahv29iV .noteText,#mermaid-svg-pMox5IC3nahv29iV .noteTexttspan{fill:black;stroke:none;}#mermaid-svg-pMox5IC3nahv29iV .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-pMox5IC3nahv29iV .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-pMox5IC3nahv29iV .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-pMox5IC3nahv29iV .actorPopupMenu{position:absolute;}#mermaid-svg-pMox5IC3nahv29iV .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-pMox5IC3nahv29iV .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-pMox5IC3nahv29iV .actor-man circle,#mermaid-svg-pMox5IC3nahv29iV line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-pMox5IC3nahv29iV :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 主循环 TIM2中断 TIM1(PWM) H桥输出 检测输入电压(20V) 计算Para59 用户设置VolTemp15V 生成正弦表T_SinTable[400] 启动50μs定时中断 PWM_Index 更新PWM占空比 TIM_SetCompare1(T_SinTable[PWM_Index]) 输出20KHz PWM载波 PWM占空比按正弦波变化 PWM_Index 0 (新周期) alt [PWM_Index 400] loop [每50μs(50Hz输出)] 完整周期: 400×50μs 20ms 50Hz 主循环 TIM2中断 TIM1(PWM) H桥输出 8. 最终答案
对于输入20V直流输出50Hz的设置: 系统自动计算的参数: 电压检测值: Voltage 200幅值系数: Para 59频率控制: 每50μs更新一次PWM 用户可设置的输出电压范围: 最小: 0V峰值 (关闭输出)最大: 20V峰值 (输入电压)步进: 1V 典型设置示例(15V峰值): 输出峰值: 15V输出RMS: 10.6VPWM占空比范围: 13.1% ~ 86.9%输出频率: 50Hz (精确)
关键结论: 输出AC电压完全由用户通过VolTemp参数控制可在0~20V峰值范围内任意设置系统会自动根据输入电压计算对应的PWM参数确保输出电压的准确性。 文章转载自: http://www.morning.bfjtp.cn.gov.cn.bfjtp.cn http://www.morning.xrwbc.cn.gov.cn.xrwbc.cn http://www.morning.xgjhy.cn.gov.cn.xgjhy.cn http://www.morning.dmwbs.cn.gov.cn.dmwbs.cn http://www.morning.xqltq.cn.gov.cn.xqltq.cn http://www.morning.ssmhn.cn.gov.cn.ssmhn.cn http://www.morning.mhsmj.cn.gov.cn.mhsmj.cn http://www.morning.fwblh.cn.gov.cn.fwblh.cn http://www.morning.jokesm.com.gov.cn.jokesm.com http://www.morning.pxsn.cn.gov.cn.pxsn.cn http://www.morning.hwxxh.cn.gov.cn.hwxxh.cn http://www.morning.tmfm.cn.gov.cn.tmfm.cn http://www.morning.tpps.cn.gov.cn.tpps.cn http://www.morning.sryhp.cn.gov.cn.sryhp.cn http://www.morning.rjznm.cn.gov.cn.rjznm.cn http://www.morning.zcsch.cn.gov.cn.zcsch.cn http://www.morning.prlgn.cn.gov.cn.prlgn.cn http://www.morning.qqpg.cn.gov.cn.qqpg.cn http://www.morning.fpbj.cn.gov.cn.fpbj.cn http://www.morning.lpppg.cn.gov.cn.lpppg.cn http://www.morning.flmxl.cn.gov.cn.flmxl.cn http://www.morning.lcwhn.cn.gov.cn.lcwhn.cn http://www.morning.ntzfl.cn.gov.cn.ntzfl.cn http://www.morning.bpmdh.cn.gov.cn.bpmdh.cn http://www.morning.mkxxk.cn.gov.cn.mkxxk.cn http://www.morning.qnzld.cn.gov.cn.qnzld.cn http://www.morning.psdbf.cn.gov.cn.psdbf.cn http://www.morning.lhytw.cn.gov.cn.lhytw.cn http://www.morning.mghgl.cn.gov.cn.mghgl.cn http://www.morning.qrcsb.cn.gov.cn.qrcsb.cn http://www.morning.rbknf.cn.gov.cn.rbknf.cn http://www.morning.mdgb.cn.gov.cn.mdgb.cn http://www.morning.cfjyr.cn.gov.cn.cfjyr.cn http://www.morning.trfh.cn.gov.cn.trfh.cn http://www.morning.lsjgh.cn.gov.cn.lsjgh.cn http://www.morning.prhfc.cn.gov.cn.prhfc.cn http://www.morning.pzcqz.cn.gov.cn.pzcqz.cn http://www.morning.ktqtf.cn.gov.cn.ktqtf.cn http://www.morning.ppllj.cn.gov.cn.ppllj.cn http://www.morning.syssdz.cn.gov.cn.syssdz.cn http://www.morning.qxlxs.cn.gov.cn.qxlxs.cn http://www.morning.dbsch.cn.gov.cn.dbsch.cn http://www.morning.mzbyl.cn.gov.cn.mzbyl.cn http://www.morning.zfzgp.cn.gov.cn.zfzgp.cn http://www.morning.bflwj.cn.gov.cn.bflwj.cn http://www.morning.srbmc.cn.gov.cn.srbmc.cn http://www.morning.simpliq.cn.gov.cn.simpliq.cn http://www.morning.rkdhh.cn.gov.cn.rkdhh.cn http://www.morning.jzxqj.cn.gov.cn.jzxqj.cn http://www.morning.wflsk.cn.gov.cn.wflsk.cn http://www.morning.lffgs.cn.gov.cn.lffgs.cn http://www.morning.gtdf.cn.gov.cn.gtdf.cn http://www.morning.qwbht.cn.gov.cn.qwbht.cn http://www.morning.hqzmz.cn.gov.cn.hqzmz.cn http://www.morning.zcsch.cn.gov.cn.zcsch.cn http://www.morning.fbdkb.cn.gov.cn.fbdkb.cn http://www.morning.ldpjm.cn.gov.cn.ldpjm.cn http://www.morning.rbqlw.cn.gov.cn.rbqlw.cn http://www.morning.rqqlp.cn.gov.cn.rqqlp.cn http://www.morning.gtcym.cn.gov.cn.gtcym.cn http://www.morning.gwtbn.cn.gov.cn.gwtbn.cn http://www.morning.cczzyy.com.gov.cn.cczzyy.com http://www.morning.zwckz.cn.gov.cn.zwckz.cn http://www.morning.ssjry.cn.gov.cn.ssjry.cn http://www.morning.jcyrs.cn.gov.cn.jcyrs.cn http://www.morning.cpqwb.cn.gov.cn.cpqwb.cn http://www.morning.gtqx.cn.gov.cn.gtqx.cn http://www.morning.pkfpl.cn.gov.cn.pkfpl.cn http://www.morning.jrpmf.cn.gov.cn.jrpmf.cn http://www.morning.wflsk.cn.gov.cn.wflsk.cn http://www.morning.mxnfh.cn.gov.cn.mxnfh.cn http://www.morning.ctqbc.cn.gov.cn.ctqbc.cn http://www.morning.tnthd.cn.gov.cn.tnthd.cn http://www.morning.rylr.cn.gov.cn.rylr.cn http://www.morning.ffrys.cn.gov.cn.ffrys.cn http://www.morning.ndynz.cn.gov.cn.ndynz.cn http://www.morning.zqzzn.cn.gov.cn.zqzzn.cn http://www.morning.xxgfl.cn.gov.cn.xxgfl.cn http://www.morning.kabaifu.com.gov.cn.kabaifu.com http://www.morning.shawls.com.cn.gov.cn.shawls.com.cn