ImageVerifierCode 换一换
格式:DOCX , 页数:59 ,大小:38.39KB ,
资源ID:7294005      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7294005.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于stm32的单相正弦变频稳压电源.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于stm32的单相正弦变频稳压电源.docx

1、基于stm32的单相正弦变频稳压电源基于stm32的单相正弦变频稳压电源本项设计的的要求是:输入40V到60V。输出稳定的有效值18V,80W。重载超过5A时,过流保护。输出正弦波频率在20Hz到60Hz可调,步进为1Hz。我们做的DC/AC主电路采用全桥式,双极性SPWM,驱动芯片采用IR2110,极容易烧毁,使用时应倍加小心。用电流互感器采电流,电压互感器采电压,电压经过全波整流后送到stm32里。这个设计大部分工作由软件完成。难点在于要调度好中断之间的关系,理解PI的整个控制过程。如果理解有偏差,就会出现无论怎么改变PI的系数,输出都稳不了压。同时,硬件电路也要做好。做电源不要引太多线出

2、来,易受到干扰。尽量避免使用过零比较器,因为过零比较器的上升沿下降沿极不稳定,易导致单片机误触发。下面在多分享下我做这个设计时的调试经验:1,利用高级定时器TIM1,产生SPWM,中断优先级一定要设成最高抢断式2,带重载时波形会失真,原因主要是死区时间和开关管损耗,可以尝试下改小死区时间。3,我的PI思路是这样的,在一个正弦波周期内,做一次PI。具体实现方法是:电压互感器采过来的经全波整流的波对应一个比较器产生的方波,正弦波过零时产生上升沿翻转,触发单片机开始定时,技术到四分之一个周期时,打开AD和DMA,在峰值处连续采14个点,然后排序,去掉最大的三个和最小的三个,然后相加求平均值。做一次P

3、I,在下个正弦波开始时,赋给Ma。这里关键是AD一定要采的准,可以设置电平翻转来用示波器观察是不是在峰值附近采值。下面给出全部代码:main.h#ifndef _MAIN_H#define _MAIN_H void RCC_Configuration(void);void NVIC_Configuration(void);void GPIO_Configuration(void);void ADC_Configuration(void);void TIM_Configuration(void);void ADC_DMAInit(void);void EXTI_Configuration(voi

4、d);void display1(void);void display2(void);void display3(void);void display4(void);void display5(void);void pinlvzhuanhua(void);#endifmain.c#include stm32f10x_lib.h#include stm32f10x_it.h#include stm32f10x_dma.h#include stm32f10x_adc.h#include #include lcd1602.h#include juzhenkey.h#include main.h/*

5、Private typedef -*/* Private define -*/* Private macro -*/* Private variables -*/* Private function prototypes -*/* Private functions -*/* Function Name : main* Description : Main program.* Input : None* Output : None* Return : None*/#define N 14#define ADC1_DR_Address (u32)0x4001244c)unsigned short

6、 ADCConvertedValueN;EXTI_InitTypeDef EXTI_InitStructure;ErrorStatus HSEStartUpStatus;NVIC_InitTypeDef NVIC_InitStructure1;float xianshi=0.0;u8 i=0;u8 v1=0,v2=0;u8 p1=0,p2=0,p3=0;u8 pp=0;u8 Time50Ms=0;float nn=0.4;vu16 pulse=0;vu16 Period=20;s8 shuzi=0123456789;s8 pinlv=20HZ;s8 dianya=18V;s8 table=0.

7、000V;s8 ma=0.00;s8 OverCurrent=OverCurrent!;u8 pinlvshezhi=20;u8 dianyashezhi=18;u8 flag1=0;u8 flag2=0;u8 OverCurrentFlag=0;float del=0.4;int main(void)#ifdef DEBUG debug();#endifpinlvzhuanhua();RCC_Configuration();GPIO_Configuration(); DelayXms(60);Lcd_Init();DelayXms(20);display1();TIM_Configurati

8、on();NVIC_Configuration();EXTI_Configuration();CH451_Init();ADC_Configuration();ADC_DMAInit();DelayXms(60);Lcd_Init();display1(); /* Infinite loop */ while (1) if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5) TIM_Cmd(TIM1, DISABLE); TIM_CtrlPWMOutputs(TIM1, DISABLE); Lcd_Init(); display5(); OverCurrentFla

9、g=1; DelayXms(200); else if(!(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)&(OverCurrentFlag=1) TIM_Cmd(TIM1, ENABLE); TIM_CtrlPWMOutputs(TIM1, ENABLE); Lcd_Init(); OverCurrentFlag=0; else if(!(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)&(OverCurrentFlag=0) DelayXms(200); display2(); DelayXms(200); display3()

10、; void RCC_Configuration(void)RCC_DeInit(); /将外设RCC寄存器重设为缺省值RCC_HSEConfig(RCC_HSE_ON);/使能HSE,即外部高速晶振HSEStartUpStatus=RCC_WaitForHSEStartUp();/等待HSE就绪if(HSEStartUpStatus=SUCCESS)FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/使能预取指令缓存FLASH_SetLatency(FLASH_Latency_2); /设置代码延时值Flash 2 wait state

11、RCC_HCLKConfig(RCC_SYSCLK_Div1); /设置AHB时钟 HCLK=SYSCLKRCC_PCLK2Config(RCC_HCLK_Div1);/设置高速AHB时钟 PCLK2=HCLKRCC_PCLK1Config(RCC_HCLK_Div2);/设置低速AHB时钟PCLK1=HCLK/2RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);/设置PLL时钟源及倍频系数 PLLCLK=8MHz*9=72MHzRCC_PLLCmd(ENABLE);/等待PLL就绪while(RCC_GetFlagStatus(RCC_FL

12、AG_PLLRDY)=RESET)RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/选定PLL为系统时钟源while(RCC_GetSYSCLKSource()!=0x08)/确认PLL作为系统时钟源RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_AFIO,ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1|RCC_AHBPeriph_DMA2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1|

13、RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOD |RCC_APB2Periph_GPIOE, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3|RCC_APB1Periph_TIM4, ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div4);void EXTI_Configuration(void) EXTI_DeInit(); /将EXIT寄存器重

14、设置为缺省值 GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6); /设置为外部中断 EXTI_InitStructure.EXTI_Line = EXTI_Line6; /设置外部中断线 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; /设置EXTI线路为重点请求 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; /设置输入线路为下降沿为中断请求 EXTI_InitStructure.EXTI_LineCmd

15、= ENABLE; /中断使能 EXTI_Init(&EXTI_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource1); /设置为外部中断 EXTI_InitStructure.EXTI_Line = EXTI_Line1; /设置外部中断线 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; /设置EXTI线路为重点请求 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; /设置输入线路为下

16、降沿为中断请求 EXTI_InitStructure.EXTI_LineCmd = ENABLE; /中断使能 EXTI_Init(&EXTI_InitStructure); / EXTI_GenerateSWInterrupt(EXTI_Line5); EXTI_ClearFlag(EXTI_Line6|EXTI_Line1); EXTI_ClearFlag(EXTI_Line1|EXTI_Line1);/ EXTI_ClearFlag(EXTI_Line0);void NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure;

17、 #ifdef VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);#else /* VECT_TAB_FLASH */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);#endif /* Enable the TIM1 global Interrupt */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel =TIM1_UP_IRQChannel ; NVIC_InitStru

18、cture.NVIC_IRQChannelPreemptionPriority =0; NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* Enable the DMA Interrupt */ NVIC_InitStructure.NVIC_IRQChannel =DMA1_Channel1_IRQChannel; NVIC_InitStructure.NVIC_IRQChanne

19、lPreemptionPriority =1; NVIC_InitStructure.NVIC_IRQChannelSubPriority =2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* Enable the EXTI9_5 global Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPri

20、ority =0; NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0; NVIC_InitStructure.NVIC_IRQChannelSubPriority =1

21、; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* Enable the TIM2 global Interrupt */ NVIC_InitStructure.NVIC_IRQChannel =TIM2_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1; NVIC_InitStructure.NVIC_IRQChannelSubPriority =2; NVIC_InitStructure.

22、NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1; NVIC_InitStructure.NVIC_IRQChannelSubPriority =1; NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE; NVIC_Init(&NVIC_InitStructure);

23、/ NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQChannel;/ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1;/ NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;/ NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;/ NVIC_Init(&NVIC_InitStructure);void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_Init

24、Structure; /配置1602的控制端 RS RW EGPIO_InitStructure.GPIO_Pin = GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);/* GPIOC Configuration: Channel 1, 2 and 3 as alternate function pus

25、h-pull */配置D8-D15 为1602数据口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10| GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure);/*键盘*/ GPI

26、O_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU; /上拉输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD; /下拉输入 GPIO_InitStructure.GPIO_Spee

27、d = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = G

28、PIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); /*键盘*/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; /GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); /AD输入测电压/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; /下拉输入测电压/ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/ GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1