标题:
STM32F103正弦逆变输出源码与工具 25v,50HZ,频率可调
[打印本页]
作者:
teleboy
时间:
2018-7-24 14:04
标题:
STM32F103正弦逆变输出源码与工具 25v,50HZ,频率可调
STM32单相正弦逆变
0.png
(5.36 KB, 下载次数: 75)
下载附件
2018-7-24 15:34 上传
单片机源程序如下:
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "SPWM.h"
#include "keyboard.h"
#include "bsp_usart1.h"
#include "OLED_I2C.h"
#include "bsp_i2c_gpio.h"
/*把这个SPWM调一下 6路,其中3路一样,另外3路一样,这两组之间互补
2018/5/10 16:52:06
2018/5/10 16:52:06
死区300ns 载频20K左右,可以自己定 正弦频率50HZ 三相正弦之间相差120°
**/
vu8 key = 0; //按键值
vu16 freq =20000, Period=0; //PWM与定时器中断频率;自动重装载值
__IO float Period_percent; //PWM占空比变化因子,用于修改脉宽
int k=0;
int BUFF1[4];
int BUFF2[4];
int result;
float Kp = 0.32 ; //比例常数
float Ti = 0.09 ; //积分时间常数
float Td = 0.0028 ; //微分时间常数
#define T 0.02 //采样周期
#define Ki Kp*(T/Ti) // Kp Ki Kd 三个主要参数
#define Kd Kp*(Td/T)
int main(void)
{
unsigned char i,j;
unsigned char u[17]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
SystemInit();
NVIC_Configuration();
delay_init();
//USART1_Config();
KeyBoard_Config();
/*KEY_Init(); */
Period_percent = ((SystemCoreClock / freq) - 1) / 32767.0; //0.11s
TIM1_PWM_Init(freq,0); //输出PWM的频率为8KHz(一周期400个点,正弦波的频率为8000/400=20Hz)
TIM2_Int_Init(freq,0); //定时器中断的频率为8KHz
if(i2c_CheckDevice(OLED_ADDRESS)==0)
{
printf("OLED OK\r\n");
OLED_Init();
OLED_Fill(0xFF);//全屏点亮
delay_us(20000);
OLED_Fill(0x00);//全屏灭
delay_us(20000);
}
//PID_set(Kp,Ki,Kd);
while(1)
{
i=Read_KeyValue();
if (i>0)
j = u[i-1];
switch(j)
{
case 0:
OLED_ShowStr(0,4,(unsigned char*)"Hello 1 ",2); //测试8*16字符
BUFF1[k]=1;
k++;
break;
case 1:
OLED_ShowStr(0,4,(unsigned char*)"Hello 2 ",2); //测试8*16字符
BUFF1[k]=2;
k++;
break;
case 2:
OLED_ShowStr(0,4,(unsigned char*)"Hello 3 ",2); //测试8*16字符
BUFF1[k]=3;
k++;
break;
case 3:
OLED_ShowStr(0,4,(unsigned char*)"Hello 4 ",2); //测试8*16字符
BUFF1[k]=4;
k++;
break;
case 4:
OLED_ShowStr(0,4,(unsigned char*)"Hello 5 ",2); //测试8*16字符
BUFF1[k]=5;
k++;
break;
case 5:
OLED_ShowStr(0,4,(unsigned char*)"Hello 6 ",2); //测试8*16字符
BUFF1[k]=6;
k++;
break;
case 6:
OLED_ShowStr(0,4,(unsigned char*)"Hello 7 ",2); //测试8*16字符
BUFF1[k]=7;
k++;
break;
case 7:
OLED_ShowStr(0,4,(unsigned char*)"Hello 8 ",2); //测试8*16字符
BUFF1[k]=8;
k++;
break;
case 8:
OLED_ShowStr(0,4,(unsigned char*)"Hello 9 ",2); //测试8*16字符
BUFF1[k]=9;
k++;
break;
case 9:
OLED_ShowStr(0,4,(unsigned char*)"Hello 10 ",2); //测试8*16字符
BUFF1[k]=0;
k++;
break;
case 10:
OLED_ShowStr(0,4,(unsigned char*)"Hello 11 ",2); //测试8*16字符
break;
// case 11:
// OLED_ShowStr(0,4,(unsigned char*)"Hello 12 ",2); //测试8*16字符
// break;
//
// case 12:
// OLED_ShowStr(0,4,(unsigned char*)"Hello 13 ",2); //测试8*16字符
// break;
//
// case 13:
// OLED_ShowStr(0,4,(unsigned char*)"Hello 14 ",2); //测试8*16字符
// break;
//
// case 14:
// OLED_ShowStr(0,4,(unsigned char*)"Hello 15 ",2); //测试8*16字符
// break;
//
// case 15:
// OLED_ShowStr(0,4,(unsigned char*)"Hello 16 ",2); //测试8*16字符
// break;
/* case 16:
LED1_TOGGLE;
OLED_ShowStr(0,4,(unsigned char*)"Hello g ",2); //测试8*16字符
break; */
default:
OLED_ShowStr(0,4,(unsigned char*)"no key ",2); //测试8*16字符
}
}
/* key=KEY_Scan(0);
if(key == 1 )
{
freq += 400; //sin频率 = freq/400
Period = (SystemCoreClock / freq) - 1; //算出自动重装载值,Tout(溢出时间)= ((arr+1)*(psc+1))/Tclk= 1/freq;
TIM1->ARR = Period;
TIM2->ARR = Period;
Period_percent = Period / 32767.0;
}
else if(key == 2)
{
freq -= 400;
Period = (SystemCoreClock / freq) - 1;
TIM1->ARR = Period;
TIM2->ARR = Period;
Period_percent = Period / 32767.0;
} */
}
复制代码
所有资料51hei提供下载:
STM32F103正弦逆变输出25v,50HZ,频率可调.rar
(380.72 KB, 下载次数: 90)
2018-7-24 15:34 上传
点击文件名下载附件
STM32正弦逆变输出25V 50hz
下载积分: 黑币 -5
作者:
oliverlau2k11
时间:
2018-8-23 10:53
好东西,赞一个
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1