基于STM32F407,輸出雙路互補的SPWM波,AD采集用DMA DAC的方式,具有PID調節,代碼注釋詳細
spwm數組生成軟件:http://www.zg4o1577.cn/bbs/dpj-171674-1.html
單片機源程序如下:
- #include "stm32f4xx.h"
- #include "string.h"
- #include "usart.h"
- #include "delay.h"
- #include "bsp_advance_tim.h"
- #include "bsp_spwm.h"
- #include "ShuangLu.h"
- #include "PID.h"
- #include "bsp_adc.h"
- #include "SD_io.h"
- #include "oled.h"
- #include "filter.h"
- #include "bsp_spwm.h"
- #include "led.h"
- #define current_threshold 3 //閾值電流為3A
- u8 DispADBuff[2][30]; //用于存放字符
- extern u16 ADC_ConvertedValue[NOFCHANEL];//DAC_DMA傳值處
- extern PID pid_voltage; //存放電壓PID的參數
- extern float ADC_Final_DisplayValue[NOFCHANEL]; //用于存放最終顯示值
- extern u16 ADC_filter_Value[NOFCHANEL]; //用于存放濾波后值
- extern u8 AD_Flag;
- u32 Display_flag=0;//是否顯示,PID是否更新
- int main(void)
- {
-
- delay_init(168);
- //ShuangLu_Init();
- ADC_X_Init();
- TIMx_Configuration();
- LED_Init(); //初始化LED端口
- OLED_Init();
- PID_init(1,1,0,0.5);
- OLED_ShowNum(0,0,22,3,16);
- OLED_Display_On();
- TIM3_Int_Init(3360-1,0);
- while(1)
- {
-
-
- if(Display_flag%1000==0)
- {
- AD_Flag=AD_voltage; ADC_filter_Value[0]=middleValueFilter();
- AD_Flag=AD_current; ADC_filter_Value[1]=middleValueFilter();
- ADC_Final_DisplayValue[0] =(float) ADC_filter_Value[0]/4096*3.3*6+0.2; //電壓檢測
- ADC_Final_DisplayValue[1] =(float) ADC_filter_Value[1]/4096*3300*1.448-18; //電流檢測
- //PID電壓計算輸出,設定值24V,輸入電壓檢測值
- PID_Calc(ADC_Final_DisplayValue[0],24,0.7,0.2); //24是設定值,0.7是上限.0.2是下限
-
- }
- if((Display_flag>10000)||(Display_flag==1))
- {
- sprintf(DispADBuff[0],"V=%.2fV\0",ADC_Final_DisplayValue[0]);//電壓顯示
- sprintf(DispADBuff[1],"I1=%.3fA\0",ADC_Final_DisplayValue[1]);//電流顯示
- OLED_ShowString(0,0,DispADBuff[0]);
- OLED_ShowString(0,2,DispADBuff[1]);
- OLED_Display_Off();
- Display_flag=2;
- }
-
- if(ADC_Final_DisplayValue[1]>current_threshold)
- {
- GPIO_SetBits(SD_io_PORT,SD_io_I1|SD_io_I2);
- delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);
- pid_voltage.SEk=0;
- GPIO_ResetBits(SD_io_PORT,SD_io_I1|SD_io_I2);
- }
-
- }
- }
復制代碼
所有資料51hei提供下載:
互補SPWM 模擬死區開關方波 PID ADC (雙極性) - 副本.7z
(308.7 KB, 下載次數: 167)
2019-10-21 17:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|