运动控制器19:步骤控制文件初始化(选择计时器2)

作者:易秋      发布时间:2021-04-22      浏览量:0
TIM_TimeBaseStructur

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;_控制步进输出的定时器2初始化函数

;控制步进输出的定时器_TimeBaseDef_控制步进输出的定时器_TimeBaseDef_TimeBaseDef_TimeBaseBaseStructure;RCC_APB1TimmeBaseBaseStructure(RCC_APB1periphicCmd,Enable);控制步进输出的定时器_TimeBaseStructure_控制步进输出的定时器_TimeBaseStructure(TIM2,&TIM_TimeBaseStructure);控制步进输出的定时器_TimeBaseStructure=0;/72m控制步进输出的定时器初始化函数_TimeBaseInit(TIM2,&TimTimeBaseStructure);提姆_克里格(TIM2,蒂姆_标志_更新);提姆_ITConfig(TIM2,Tim_IT_Update,Enable);Tim_Cmd(TIM2,Enable);nvic_InitStrucre.nvic_IRQChannel=TIM2_IRQn;//选择定时器2中断线中断线=0;/响应优先级为0 nvic_initStructure。我们设置了一个函数来打开定时器并关闭它:打开计时器的函数名称:st_WORK_UP_UP函数,关闭函数是:ST_Go_DELL函数。

空st_WORKUP_UP(){//启用控制系统控制3个或更多步进电机(0x07);如果(sys.state=state_cycl){//将输出设置为低电平,否则将脉冲信号out_bit=(0)^(设置)。将发送//然后打开定时器的中断功能,并在设置中断时立即写入优先级。这是一个好习惯//定时器才刚刚开始,标签的逻辑位置是0 nvic_enableIRQ(TIM2_IRQn);Nvic_SetPriity(TIM2_IRQn,0);ShowPos=1}

关闭定时器的功能如下。如果要使用延迟脱机关闭计时器,则处理延迟命令或打印此时运行的XYZ坐标值:

voidst_go_idly(){printpos_grbl(0480);//输出位置信息showpos=0;Nvic_disableIRQ(TIM2_IRQn)//如果需要延时脱机,则进行延时处理if(设置(设置)STPER_IDLY_LOCK_TIME!=0xff)_BIT_STROUE(sys.Execute,exec_告警){_DERATEMS(设置.STPER_IDLY_LOCK_TIME);如果

定时器的arr过载和预分频器

/的最小步长速度不应低于此值,也就是说,如果我们想要生成13赫兹的输出频率,则速度不应低于13 HZ#定义的最小步骤_PER_分钟800(步骤_PER_分钟<最小_步骤_PER_min){STEP_PER_min=最小_STEP_PER_min}

;如果我们要生成13 HZ的输出频率,则速度不应低于13 HZ#定义的最小步骤_PER_分钟800。如果时钟频率是4m,我们需要在几分钟内产生4m*60/800=300 K的滴答声。我们把这个参数给以下函数:config_STEP_Timer。

我们需要输出的阶跃脉冲信号在任何时候都需要调整,也就是说,ARR需要动态调整,同时输出的频率跨度相对较大,我们还需要设置预频分割,我们可以使用以下两个函数进行调整,该函数的使用如下:

Tim_PrescalerConfig(TIM2,I,Tim_PSCReloadMode_Update);TIM_Setreload(TIM2,1000+I*500)

1、编写的测试程序如下:

voidst_init(){nvic_InitTypeDef nvic_InitStructure;Tim_TimeBaseInittypeDef_TimeBaseDef_TimeBaseDef_TimeBaseStructure;RCC_APB 1 phphClockCmd(RCC_APB1periph_TIM2,Enable);TimTimeBaseStructure_IM_周期=1000;TIM_、编写的测试程序如下=0;//72m TIM_TimeBaseBaseStructure。TimCmd(TIM2)(TIM2,&TimTimeBaseStructure);TimClearFlag(TIM2,TIM_标志_Update);TimITConfig(TIM2,TIM_IT_Update,Enable);TimCmd(TIM2,Enable);Nvic_InitStrucre.nvic_IRQChannel=TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;Nvic_initStructure(&nvic_initStructure);nvic_enableIRQ_initStructure(TIM2_IRQirqn);}

无效TIM2_IRQHandler(Void){if(Tim_ITStatus(TIM2,Tim_IT_Update)){if(Tim_ITStatus(TIM2,Tim_IT_Update)!