STM32定位控制
更新时间:2024-02-27 02:12:01 阅读量: 综合文库 文档下载
/*作者:曹备*/
/*最后修改日期:2015-04-02*/ /*创建日期: 2015-04-02*/
/*基于STM32的单轴简易运动控制器/脉冲发生器*/ /*脉冲+方向控制步进伺服电机*/ /*
优化记录:
中断修改TIMx_PSC一个寄存器的值,而不是修改TIMx_ARR预加载寄存器+TIMx_CCRx比较值寄存器两个值,缩短中断处理时间
定位指令DRVI/DRVA中,目标频率设定过高、而实际输出脉冲数过少时,则不必加速到目标频率即进入减速区 */ /*
DRVI(A);相对定位,输出A(A取绝对值)个脉冲 A不能为0
若A为正数,则方向为正、GPIOB.0为高电平 若A为负数,则方向为负、GPIOB.0为低电平
DRVA(A) 绝对定位,输出脉冲,运行至A个脉冲的位置 若目标位置A等于当前位置D,则不执行脉冲输出 若A大于D 则方向为正GPIOB.5为高电平 若A小于D 则方向为负GPIOB.5为低电平
GPIOB.1为脉冲输出 GPIOB.0为方向输出 占空比为50%
阶梯曲线形式加减速
加减速时间以10毫秒为基本单位 加减速以每10毫秒为一级 例如
加减速时间为50毫秒,则加减速级数为50/10=5 加减速时间为100毫秒,则加减速级数为100/10=10 加减速时间为150毫秒,则加减速级数为150/10=15 */
#include \#include \
#define MasterFrequency 0x100000//最高频率限制
long Current;//当前位置脉冲数 long Target;//目标位置脉冲数
long StartSave;//定位指令刚开始启动时的当前值 long DownStartSave;//开始进入减速时的当前值
STATUS_Type RunFlag;//定位指令脉冲输出执行标志
STATUS_Type StopCommand;//定位指令脉冲输出停止命令标志 STATUS_Type PlusMinus;//正负方向标志
u32 StartFreq;//启动频率 u32 TargetFreq;//目标频率 u32 UDTimer;//加减速时间
u32 LadderFreq[102];
u16 LadderPSC[202];//加减速0至9级速度/频率预分频值 u16 LadderNum;//加减速速度级数
u16 LadderOrderNum;//加减速速度编号 long LadderTarget[202];
void MyTimer3_Init()//定时器3初始化 { RCC_APB2ENR|=(1<<3)|(1<<0); //使能AFIO、GPIOB时钟 GPIOB_CRL&=0xffffff00; GPIOB_CRL|=0x000000a2; //配置PORTB.1为复用推挽输出、配置PORTB.0为推挽输出,输出最大频率2MHz GPIOB_BRR=1<<0;
RCC_APB1ENR|=1<<1; //使能定时器TIMER3时钟 TIM3_CR1|=1<<2; //设置只有计数溢出作为T3更新中断 TIM3_DIER|=1<<0; //允许定时器3计数溢出中断 Interrupt_Priority(29,2,2); //使能第29号中断(即定时器3全局中断),抢占2响应2,中断分组2 TIM3_CCMR2&=~(3<<8); //T3_CH4通道配置为输出模式 TIM3_CCMR2|=7<<12; //T3_CH4为PWM模式2 TIM3_CCER|=1<<12; //T3_CH4通道输出使能 TIM3_ARR=11; // TIM3_CCR4=6; //匹配值1等于重装值一半,是以占空比为50% }
void Pluse_start() { RunFlag=ON; //脉冲输出定位指令执行标志置ON StartSave=Current; //脉冲输出启动时的初始脉冲值保存于StartSave LadderOrderNum=0;//加减速级数序号为0 MyDelay(2,ms); //脉冲信号比方向信号滞后,以提高可靠性 TIM3_PSC=LadderPSC[0]; TIM3_CR1|=1<<0; //启动定时器TIMER2计数 }
/*********************************************************************************
函数名称:DRVI 函数功能:相对定位
入口参数:long offset相对偏移脉冲,u32 frequency最高频率 返回值:无
*********************************************************************************/
void DRVI(long offset,u32 frequency) { u16 h; u16 i; u32 j; if((offset!=0)&&(RunFlag==OFF))//相对偏移值为0则不接受命令,脉冲输出已执行,不
接受命令 { Target=Current+offset; //目标值等于当前值加上相对偏移值 if(frequency for(i=0,h=LadderNum<<1; i while(1) { if((GPIOE_IDR&(1<<1))!=0)//GPIOE.1触发启动信号 { DELAY(10); //延时消抖 if((GPIOE_IDR&(1<<1))!=0)//确认输入 { DRVA(120,600); //以10KHz频率前进320000脉冲当量距离 } } } PAUSE(); DELAY(500); DRVI(-90,500); PAUSE(); DELAY(500); DRVA(0,300); PAUSE(); } //等待脉冲输出执行完毕 //延时500毫秒 //以60KHz频率后退160000脉冲当量距离 //等待脉冲输出执行完毕 //延时300毫秒 //以50KHz频率回到绝对位置2400 //等待脉冲输出执行完毕
正在阅读:
STM32定位控制02-27
深圳黑弧—华侨城地产波托菲诺-天鹅堡 2002年3—6月阶段推广建议案-房地产策划文案08-16
优秀班主任工作总结10篇07-31
挫折也是一种幸福作文02-06
地学统计第一次作业03-08
在山东四所学校考察学习的报告03-08
DNP3.0规约简介11-13
第2章计算机基础知识05-04
过年了作文500字07-06
- 《江苏省环境水质(地表水)自动监测预警系统运行管理办法(试行)》
- 安乐死合法化辩论赛立论稿(浙大新生赛)
- 公共科目模拟试卷公务员考试资料
- 我国固定资产投资FAI对GDP的影响
- 大学生创新创业训练计划项目申请书大创项目申报表
- 完美版—单片机控制步进电机
- 2013资阳中考化学试题
- 18.两位数减一位数退位(397道)
- 工程量计算规则
- 二年级操行评语(下)
- 第3章 流程控制语句
- 浅基桥墩加固技术
- 课题研究的主要方法
- 5100软件说明书 - 图文
- 车间技术员年终总结
- 关于印发《中铁建工集团开展项目管理实验室活动方案》的通知
- 经典诵读结题报告
- 地下水动力学习题答案
- 2018年全国各地高考数学模拟试题平面解析几何试题汇编(含答案解
- 街道办事处主任2018年度述职述廉报告
- 定位
- 控制
- STM32
- 中兴公司Spring面试题库
- 云南旅游计划3000元 - 图文
- 2016年,一建,各科,记忆口诀,经典总结材料
- 英国自由行攻略 - 图文
- PLC故障查找方法流程图及其处理对策
- 工业药剂学
- 2019年重庆市中考物理试卷及答案
- 中华民国宪法及增修条文
- 东大化工实习报告
- 当代大学生心理问题产生的社会原因及对策分析-教育文档
- 四年级期中考试家长会班主任发言稿
- 吉林省长春某机场飞行区场道工程施工组织设计方案
- 川大《政治科学原理》18春在线作业1
- 白色家庭式办公室装修设计案例欣赏 - 图文
- 高中数学 第三章 单元检测卷(B)苏教版必修3
- 竖向荷载计算--分层法例题详解
- 富士数码相机使用方法图片详解(S2600、S2900、S2950、S4050、HS
- 2015-2020年中国机房温控节能设备市场深度调研及未来发展前景策
- 幸福教育专题研究
- 故事集