STM32直流电机控制程序简明教程 -
更新时间:2023-09-14 18:05:01 阅读量: 初中教育 文档下载
STM32 直流减速电机控制 (来自网络,特别推荐)
直流减速电机控制中,最常用的方法就是通过PWM来控制直流电机的转速。在控制小车走直线的过程中,需要两者的转速一置(如果要走得很直,还需要在短时间内保证两者的行程大致相当,这可以用PID算法来控制,以后的文章中会专门叙述)。
因此,在检测到两者转速不一样时,需要动态调整其中一个或两个轮子的PWM的点空比(简单点的就以一个轮为基准,调整另外一个轮子即可;如果以一个固定的标准的话,需要调整两个轮子的PWM占空比)。
程序第一步:设置GPIO,略(输出PWM的管脚用Mode_AF_PP即可)
程序第二步:设置定时器,(保证产生两路PWM即可,我用的是TIM4)
void TIM4_Configuration(void) {
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_OCInitTypeDef TIM_OCInitStructure;
//时间基初始化
TIM_TimeBaseInitStructure.TIM_Period=144; //18K/144=125Hz,这个是电机PWM的频率 TIM_TimeBaseInitStructure.TIM_Prescaler=4000; //72000000/4000=18K TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0x0000;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);
//输出比较模式设置,用于4路PWM输出
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2; //输出PWM
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //使能正向通道 TIM_OCInitStructure.TIM_OutputNState=TIM_OutputState_Disable; //失能反向通道 TIM_OCInitStructure.TIM_Pulse=PWM_L; //左轮DIR的占空比
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low; //输出极性为低电平
TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCPolarity_High;//互补输出极性为高电平 TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;
TIM_OC1Init(TIM4,&TIM_OCInitStructure); //PWM_L初始化
TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Disable); //改变点空比后,立即产生效应
1
TIM_OCInitStructure.TIM_Pulse=PWM_R; //左轮PWM的占空比 TIM_OC2Init(TIM4,&TIM_OCInitStructure); //PWM_R初始化
TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Disable); //改变点空比后,立即产生效应
//使能定时器4
TIM_Cmd(TIM4,ENABLE);
TIM_CtrlPWMOutputs(TIM4,ENABLE); }
程序第三步:
在SysTick中断中,读取两个轮子的速(具体的方法是:每0.1秒读一次,并以此人作为速度的依据),并比较,如果以右轮为基准,则调整左轮的PWM占空比。涉及到关键语句是:TIM_SetCompare1(;)
u16 COUN1=0; u16 COUN2=0;
volatile u16 Dist_L=0; //左轮行程脉冲数 volatile u16 Dist_R=0; //右轮行程脉冲数 void SysTick_Handler(void) {
COUN1=TIM1->CNT; //左轮在0.1秒里脉冲数 COUN2=TIM2->CNT; //右轮在0.1秒里脉冲数 Dist_L=Dist_L+COUN1; //左轮行程脉冲数 Dist_R=Dist_R+COUN2; //右轮行程脉冲数 if( (COUN1-COUN2)>2) {
PWM_L= TIM_GetCapture1(TIM4); TIM_SetCompare1(TIM4, PWM_L - 4); }
else if ( (COUN2-COUN1)>2) {
PWM_L= TIM_GetCapture1(TIM4); TIM_SetCompare1(TIM4, PWM_L + 4); }
TIM_SetCounter(TIM1, 0); TIM_SetCounter(TIM2, 0); }
2
关于TIM_SetCompareX(;)这个函数,还是有很多用途的,其中另外一个用途,就是用于产生不同频率的PWM,具体程序如下:
u16 capture = 0;
extern vu16 CCR1_Val; extern vu16 CCR2_Val; extern vu16 CCR3_Val; extern vu16 CCR4_Val;
void TIM2_IRQHandler(void) {
/* TIM2_CH1 toggling with frequency = 183.1 Hz */ if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) {
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1 ); capture = TIM_GetCapture1(TIM2);
TIM_SetCompare1(TIM2, capture + CCR1_Val ); }
/* TIM2_CH2 toggling with frequency = 366.2 Hz */ if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET) {
TIM_ClearITPendingBit(TIM2, TIM_IT_CC2); capture = TIM_GetCapture2(TIM2);
TIM_SetCompare2(TIM2, capture + CCR2_Val); }
/* TIM2_CH3 toggling with frequency = 732.4 Hz */ if (TIM_GetITStatus(TIM2, TIM_IT_CC3) != RESET) {
TIM_ClearITPendingBit(TIM2, TIM_IT_CC3); capture = TIM_GetCapture3(TIM2);
TIM_SetCompare3(TIM2, capture + CCR3_Val); }
/* TIM2_CH4 toggling with frequency = 1464.8 Hz */ if (TIM_GetITStatus(TIM2, TIM_IT_CC4) != RESET) {
TIM_ClearITPendingBit(TIM2, TIM_IT_CC4); capture = TIM_GetCapture4(TIM2);
TIM_SetCompare4(TIM2, capture + CCR4_Val);
3
} }
4
正在阅读:
STM32直流电机控制程序简明教程 -09-14
日趋完善的中国反洗钱制度06-01
语文三年级教案优秀3篇03-27
现代临床医学2010年第36卷总目次05-27
采用粒子群算法策略的PID直流电机控制调谐参数的设置(完整版)01-18
植物芳香油的提取(1)05-14
复旦大学2018年上海市综合评价录取改革试点本科生招生简章10-17
面试实训(经典背诵)12-13
- 二甲基甲酰胺安全技术说明书
- 南邮计算机网络复习题
- 高分子物理实验指导书 - 图文
- 2009.9.25 莞惠环控专业施工图设计技术要求
- 学生工作简报
- 揭阳市斯瑞尔环境科技有限公司废酸综合利用项目可行性研究报告-广州中撰咨询
- 今日靓汤(佘自强)
- 奥数 - 二年级 - 数学 - 第三讲时间的教师版计算答案 - 图文
- 如何命制一份好的物理试卷
- 数据库开题报告
- 禁用未经批准或已经废止或淘汰技术的制度流程
- 大学英语(二)第2阶段测试题
- 湘教版一年级上册美术教案(全)
- (整套)学生顶岗(毕业)实习手册
- 高频 二极管包络检波 - 图文
- 2018届中考英语复习题型四任务型完形填空备考精编含解析 - 186
- 郑煤集团超化煤矿一采区开采设计 - 图文
- 财政学习题
- 摄影摄像复习资料
- SMC D-A93接线方式 - 图文
- 直流电机
- 控制程序
- 简明教程
- STM32
- 2014地理高考河流模拟试题 -
- 后楼小学课题“海量阅读伴我成长” - 图文
- 公务员考试行政能力测试选词填空习题精选
- 2016年高数综合练习题1
- 单元机组负荷控制方式特点 - 图文
- 四年级年级下册科学实验器材及实验步骤
- 防汛路施工方案
- 质量应急预案
- 厦门大学物理化学(一)期末试卷2007级
- 家长学习《3-6岁儿童学习与发展指南》心得体会
- “基层组织规范化建设提升年”动员大会上的讲话(1) -
- 小学生每天5分钟安全教育记录
- 西安交通大学版本信息技术三年级下册教案
- 《统计学》模拟试题
- 北航材料力学2007—2008年度第1学期期末考试A答案
- 2016年国际经济法形考任务01-05答案解析
- 山西忻州寇氏族谱
- 绩效工资分配办法(薪酬权重系数)
- 康县市沙德乡五一沟防洪堤重建工程初步设计报告
- 系梁首件总结报告