新手上路
- 积分
- 39
- 金钱
- 39
- 注册时间
- 2023-4-20
- 在线时间
- 3 小时
|
楼主 |
发表于 2023-7-27 15:56:54
|
显示全部楼层
//摆动所需时间计算函数
float Delay(float angle)
{
time=angle*1000/0.1125/500; //适用于PWM(200,720) (2000,72)
time+=20;
delay_ms(time);
}
//摆动函数//
float Angle_Cover(float a,float b)
{
delay_ms(2);
Motor_Run(1,b-a);
Delay(b-a);
Motor_Run(0,b-a);
Delay(b-a);
}
//主函数//
int main(void)
{
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
LED_Init();
uart_init(115200);
fw_init();
while(1)
{
fw_task();
delay_ms(10);
if(Angle_buff[1]!=0) Angle_Cover(Angle_buff[0],Angle_buff[1]);
}
}
//控制电机旋转函数//
void Motor_Run(uint32_t dir,float angle) //步进电机角度控制
{
if(dir==1)
{
GPIO_SetBits(GPIOA, GPIO_Pin_5);
}
if(dir==0)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_5);
}
a=angle/0.1125;
TIM_Cmd(TIM2, ENABLE);
}
//定时器中断函数//
void TIM2_IRQHandler(void) //TIM2中断
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{
TIM_ClearFlag(TIM2, TIM_IT_Update);//清除TIMx的中断待处理位:TIM 中断源
n+=1;
if(n>=a)
{
TIM_Cmd(TIM2, DISABLE);
n=0;
}
}
} |
|