找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5750|回復(fù): 4
收起左側(cè)

基于stm32的自制pid閉環(huán)單相逆變電源源程序

[復(fù)制鏈接]
ID:521357 發(fā)表于 2019-7-29 23:46 | 顯示全部樓層 |閱讀模式
pid閉環(huán)調(diào)制基于stm32f4的程序控制的單相逆變電源程序

單片機源程序如下:
  1. #include "stm32f4xx.h"
  2. #include "usart.h"
  3. #include "delay.h"
  4. #include "bsp_advance_tim.h"
  5. #include "bsp_spwm.h"
  6. #include "ShuangLu.h"
  7. #include "PID.h"
  8. #include "bsp_adc.h"
  9. #include "SD_io.h"
  10. #include "oled.h"
  11. #include "filter.h"
  12. #include "bsp_spwm.h"
  13. #define   current_threshold  3

  14. u8 DispADBuff[2][30];          //用于存放字符
  15. extern u16 ADC_ConvertedValue[NOFCHANEL];//DAC_DMA傳值處
  16. extern PID pid_voltage;         //存放電壓PID的參數(shù)
  17. extern float ADC_Final_DisplayValue[NOFCHANEL];        //用于存放最終顯示值
  18. extern u16 ADC_filter_Value[NOFCHANEL];                                                                //用于存放濾波后值
  19. extern u8  AD_Flag;
  20. u32 Display_flag=0;//是否顯示,PID是否更新
  21. extern PID pid_voltage;
  22. u8 PID_start=0;

  23. int main(void)
  24. {
  25.        
  26.         delay_init(168);
  27.         ShuangLu_Init();
  28.         ADC_X_Init();
  29.         TIMx_Configuration();
  30.         OLED_Init();
  31.         PID_init(0.001,0.001,0,SPWM_default_ratio);
  32.        
  33. while(1)
  34.         {                
  35.                  
  36.                
  37.                 if(Display_flag%1000==0)
  38.                 {
  39.                         AD_Flag=AD_voltage;  ADC_filter_Value[0]=middleValueFilter();
  40.                         AD_Flag=AD_current;  ADC_filter_Value[1]=middleValueFilter();       
  41.                         ADC_Final_DisplayValue[0] =(float) ADC_filter_Value[0]/4096*3.3*36.7862-46.285;   //電壓檢測
  42.                         ADC_Final_DisplayValue[1] =(float) ADC_filter_Value[1]/4096*3300*1.448-18;         //電流檢測
  43.                         //PID電壓計算輸出,設(shè)定值24V,輸入電壓檢測值
  44.                         if((ADC_Final_DisplayValue[0]/24>0.98)&&(ADC_Final_DisplayValue[0]/24)<1.02)PID_start=1;
  45.                         if(PID_start==1)PID_Calc(ADC_Final_DisplayValue[0],24,0.8,0.2);
  46.                        
  47.                 }
  48.                 if((Display_flag>10000)||(Display_flag==1))
  49.                 {
  50.                   sprintf(DispADBuff[0],"V=%.2fV\0",ADC_Final_DisplayValue[0]);//電壓顯示
  51.                   sprintf(DispADBuff[1],"I1=%.3fA\0",ADC_Final_DisplayValue[1]);//電流顯示
  52.                         OLED_ShowString(0,0,DispADBuff[0]);
  53.                   OLED_ShowString(0,2,DispADBuff[1]);
  54.                         Display_flag=2;               
  55.                 }
  56.                
  57. //                if(ADC_Final_DisplayValue[2]>current_threshold)
  58. //                {               
  59. //                        GPIO_SetBits(SD_io_PORT,SD_io_I1|SD_io_I2);
  60. //                        delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);
  61. //                        pid_voltage.SEk=0;
  62. //            GPIO_ResetBits(SD_io_PORT,SD_io_I1|SD_io_I2);
  63. //                }
  64.                
  65.         }
  66. }
復(fù)制代碼

所有資料51hei提供下載:
互補SPWM+模擬死區(qū)開關(guān)方波+PID+ADC (單極性)1.7z (326.91 KB, 下載次數(shù): 192)



回復(fù)

使用道具 舉報

ID:1 發(fā)表于 2019-7-30 17:13 | 顯示全部樓層
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報

ID:511461 發(fā)表于 2019-8-1 18:59 | 顯示全部樓層
多謝大佬分享
回復(fù)

使用道具 舉報

ID:440028 發(fā)表于 2022-1-28 10:41 | 顯示全部樓層
資料不完整的最好不上傳
回復(fù)

使用道具 舉報

ID:859852 發(fā)表于 2022-2-8 22:56 來自手機 | 顯示全部樓層
資料不全,誤人子弟  .道德淪陷.......
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表