企业网站建设费如何列支展厅设计作品欣赏案例
2026/2/7 13:20:34 网站建设 项目流程
企业网站建设费如何列支,展厅设计作品欣赏案例,山东住房城乡建设部网站,wordpress用户自动禁止登录STM32直流电机PID控制 实现功能#xff1a;直流电机转数PID闭环控制#xff1b;控制板是stm32f103单片机#xff0c;板载有液晶显示屏#xff0c;实时的显示设定值、实际转数的曲线#xff1b;霍尔传感器检测电机的转数#xff0c;PID算法使用位置方式#xff0c;PWM脉宽…STM32直流电机PID控制 实现功能直流电机转数PID闭环控制控制板是stm32f103单片机板载有液晶显示屏实时的显示设定值、实际转数的曲线霍尔传感器检测电机的转数PID算法使用位置方式PWM脉宽控制L298N的电压输出最终实现闭环PID功能。 主要部件 1主控制器STM32F130C8T6 2128×160液晶显示屏 325GA-260编码器减速电机 是工程文件说明文档 只是资料最近在搞一个直流电机转速闭环控制的项目主控用的STM32F103C8T6。这玩意儿虽然便宜但性能足够搭配L298N电机驱动模块能直接输出PWM波控制电机。关键是要实现PID算法闭环还得在液晶屏上实时画曲线这过程真是一波三折。先说说霍尔编码器的处理。我用的25GA-260减速电机自带霍尔输出AB相脉冲信号接在TIM3的CH1和CH2引脚。配置定时器的编码器模式相当重要void Encoder_Init(void){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_ICInitTypeDef TIM_ICInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseStructInit(TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Period 0xFFFF; TIM_TimeBaseStructure.TIM_Prescaler 0; TIM_TimeBaseStructure.TIM_ClockDivision 0; TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, TIM_TimeBaseStructure); TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising); TIM_ICStructInit(TIM_ICInitStructure); TIM_ICInitStructure.TIM_ICFilter 6; //10阶滤波防抖 TIM_ICInit(TIM3, TIM_ICInitStructure); TIM_Cmd(TIM3, ENABLE); }这里用硬件计数比软件中断可靠多了特别注意滤波器设置——电机运行时震动会产生毛刺实测滤波值6刚好能稳定计数。每隔100ms通过TIM_GetCounter()读取计数值后要立即清零计数器这操作最好放在定时器中断里同步处理。PID算法采用位置式结构体定义得实用点typedef struct{ float SetSpeed; float ActualSpeed; float Err; float ErrLast; float Kp,Ki,Kd; float Integral; float Output; }PID; void PID_Calc(PID *pid){ pid-Err pid-SetSpeed - pid-ActualSpeed; pid-Integral pid-Err; //积分限幅防止过冲 if(pid-Integral 2000) pid-Integral 2000; if(pid-Integral -2000) pid-Integral -2000; pid-Output pid-Kp * pid-Err pid-Ki * pid-Integral pid-Kd * (pid-Err - pid-ErrLast); pid-ErrLast pid-Err; }实际调试时发现积分项必须限幅否则启动瞬间误差积累太猛会导致PWM直接满占空比。参数整定过程最头大先用试凑法先调P到电机能勉强稳住再加D抑制震荡最后补点I消除静差。后来改用临界比例法找到等幅振荡时的Ku12.5Tu0.22s按Z-N公式算出的参数确实省事不少。STM32直流电机PID控制 实现功能直流电机转数PID闭环控制控制板是stm32f103单片机板载有液晶显示屏实时的显示设定值、实际转数的曲线霍尔传感器检测电机的转数PID算法使用位置方式PWM脉宽控制L298N的电压输出最终实现闭环PID功能。 主要部件 1主控制器STM32F130C8T6 2128×160液晶显示屏 325GA-260编码器减速电机 是工程文件说明文档 只是资料液晶显示用的是ST7735驱动芯片直接上DMA刷屏void LCD_DrawCurve(uint16_t *buf, uint16_t color){ static uint16_t prev_y 0; for(uint8_t x0; x128; x){ uint16_t y 160 - buf[x]/65; //转速映射到Y轴 LCD_DrawLine(x-1, prev_y, x, y, color); prev_y y; } }这里有个坑——屏幕刷新率要和数据采样率匹配。开始直接每秒刷60帧结果曲线闪得眼晕。后来改双缓冲机制前台显示完成帧后台准备下一帧数据效果顺滑多了。最后PWM输出到L298N部分注意死区时间设置TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse 0; TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; TIM_OC1Init(TIM1, TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //设置死区时间防止上下管直通 TIM_BDTRInitStructure.TIM_DeadTime 0x3F; TIM_BDTRConfig(TIM1, TIM_BDTRInitStructure);调试时烧过两次L298N后来发现是死区时间不够。电机堵转时电流飙升必须加装电流检测超过阈值直接关断PWM输出才保住驱动模块。整完这套系统最大的体会是硬件和软件得协同调试——PID参数纸上算得再完美实际电机惯性带来的滞后足够让理论值失效。后来在液晶屏上叠加显示目标曲线和实际曲线边调参边观察响应比单纯看数据直观多了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询