logo资料库

基于STM32F407输出双路互补的SPWM波(程序).docx

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
基于 STM32F407,输出双路互补的 SPWM 波,AD 采集用 DMA DAC 的方式,具有 PID 调节 源程序如下: #include "stm32f407.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 16 ADC_filter_Value[NOFCHANEL]; //用于存放滤波后值 extern u8 AD_Flag; u32 Display_flag=0; //是否显示,PID 是否更新 //初始化 LED 端口 int main(void) { delay_init(168); ADC_X_Init(); TIMx_Configuration(); LED_Init(); 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]/409 6*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_Display Value[0]);//电压显示 sprintf(DispADBuff[1],"I1=%.3fA\0",ADC_Final_Displa yValue[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); pid_voltage.SEk=0; GPIO_ResetBits(SD_io_PORT,SD_io_I1|SD_io_I2); } } }
分享到:
收藏