|
STM32單相正弦逆變
0.png (5.36 KB, 下載次數(shù): 75)
下載附件
2018-7-24 15:34 上傳
單片機(jī)源程序如下:
- #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"
- /*把這個(gè)SPWM調(diào)一下 6路,其中3路一樣,另外3路一樣,這兩組之間互補(bǔ)
- 2018/5/10 16:52:06
- 2018/5/10 16:52:06
- 死區(qū)300ns 載頻20K左右,可以自己定 正弦頻率50HZ 三相正弦之間相差120°
- **/
- vu8 key = 0; //按鍵值
- vu16 freq =20000, Period=0; //PWM與定時(shí)器中斷頻率;自動(dòng)重裝載值
- __IO float Period_percent; //PWM占空比變化因子,用于修改脈寬
- int k=0;
- int BUFF1[4];
- int BUFF2[4];
- int result;
- float Kp = 0.32 ; //比例常數(shù)
- float Ti = 0.09 ; //積分時(shí)間常數(shù)
- float Td = 0.0028 ; //微分時(shí)間常數(shù)
- #define T 0.02 //采樣周期
- #define Ki Kp*(T/Ti) // Kp Ki Kd 三個(gè)主要參數(shù)
- #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個(gè)點(diǎn),正弦波的頻率為8000/400=20Hz)
- TIM2_Int_Init(freq,0); //定時(shí)器中斷的頻率為8KHz
- if(i2c_CheckDevice(OLED_ADDRESS)==0)
- {
- printf("OLED OK\r\n");
- OLED_Init();
- OLED_Fill(0xFF);//全屏點(diǎn)亮
- 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); //測(cè)試8*16字符
- BUFF1[k]=1;
- k++;
- break;
-
- case 1:
- OLED_ShowStr(0,4,(unsigned char*)"Hello 2 ",2); //測(cè)試8*16字符
- BUFF1[k]=2;
- k++;
- break;
-
- case 2:
- OLED_ShowStr(0,4,(unsigned char*)"Hello 3 ",2); //測(cè)試8*16字符
- BUFF1[k]=3;
- k++;
- break;
-
- case 3:
- OLED_ShowStr(0,4,(unsigned char*)"Hello 4 ",2); //測(cè)試8*16字符
- BUFF1[k]=4;
- k++;
- break;
-
- case 4:
- OLED_ShowStr(0,4,(unsigned char*)"Hello 5 ",2); //測(cè)試8*16字符
- BUFF1[k]=5;
- k++;
- break;
-
- case 5:
- OLED_ShowStr(0,4,(unsigned char*)"Hello 6 ",2); //測(cè)試8*16字符
- BUFF1[k]=6;
- k++;
- break;
-
- case 6:
- OLED_ShowStr(0,4,(unsigned char*)"Hello 7 ",2); //測(cè)試8*16字符
- BUFF1[k]=7;
- k++;
- break;
-
- case 7:
- OLED_ShowStr(0,4,(unsigned char*)"Hello 8 ",2); //測(cè)試8*16字符
- BUFF1[k]=8;
- k++;
- break;
-
- case 8:
- OLED_ShowStr(0,4,(unsigned char*)"Hello 9 ",2); //測(cè)試8*16字符
- BUFF1[k]=9;
- k++;
- break;
-
- case 9:
- OLED_ShowStr(0,4,(unsigned char*)"Hello 10 ",2); //測(cè)試8*16字符
- BUFF1[k]=0;
- k++;
- break;
-
- case 10:
- OLED_ShowStr(0,4,(unsigned char*)"Hello 11 ",2); //測(cè)試8*16字符
- break;
-
- // case 11:
- // OLED_ShowStr(0,4,(unsigned char*)"Hello 12 ",2); //測(cè)試8*16字符
- // break;
- //
- // case 12:
- // OLED_ShowStr(0,4,(unsigned char*)"Hello 13 ",2); //測(cè)試8*16字符
- // break;
- //
- // case 13:
- // OLED_ShowStr(0,4,(unsigned char*)"Hello 14 ",2); //測(cè)試8*16字符
- // break;
- //
- // case 14:
- // OLED_ShowStr(0,4,(unsigned char*)"Hello 15 ",2); //測(cè)試8*16字符
- // break;
- //
- // case 15:
- // OLED_ShowStr(0,4,(unsigned char*)"Hello 16 ",2); //測(cè)試8*16字符
- // break;
-
- /* case 16:
- LED1_TOGGLE;
- OLED_ShowStr(0,4,(unsigned char*)"Hello g ",2); //測(cè)試8*16字符
- break; */
-
- default:
- OLED_ShowStr(0,4,(unsigned char*)"no key ",2); //測(cè)試8*16字符
- }
- }
- /* key=KEY_Scan(0);
- if(key == 1 )
- {
- freq += 400; //sin頻率 = freq/400
- Period = (SystemCoreClock / freq) - 1; //算出自動(dòng)重裝載值,Tout(溢出時(shí)間)= ((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;
- } */
- }
復(fù)制代碼
所有資料51hei提供下載:
STM32F103正弦逆變輸出25v,50HZ,頻率可調(diào).rar
(380.72 KB, 下載次數(shù): 90)
2018-7-24 15:34 上傳
點(diǎn)擊文件名下載附件
STM32正弦逆變輸出25V 50hz 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|