我用STM32来控制的四相步进电机,用四拍的方法来输出脉冲~用了两种方法来做每个拍之间的延时函数,一直是用最普通的延时方法
void Delay(__IO uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
另一种是用系统的滴答时钟来做延时
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=nms*9000;//时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00; //清空计数器
SysTick->CTRL=0x01; //使能,减到0无动作,采用外部时钟
//开始倒数
do
{
temp=SysTick->CTRL;
} while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00;//清空计数器
}
四拍输出的函数如下
void Car_Forward(void) //前进
{
u8 i;
for(i=0;i<4;i++)
{
GPIO_Write (GPIOD,Step_F[i]);
Delay(speed);
//delay_ms(speed);
}
}
发现用第一种方法来做延时电机能调到的最大的旋转速度要比用系统滴答时钟做的延时能调到的快得多,这是怎么一回事啊~~
void Delay(__IO uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
另一种是用系统的滴答时钟来做延时
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=nms*9000;//时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00; //清空计数器
SysTick->CTRL=0x01; //使能,减到0无动作,采用外部时钟
//开始倒数
do
{
temp=SysTick->CTRL;
} while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00;//清空计数器
}
四拍输出的函数如下
void Car_Forward(void) //前进
{
u8 i;
for(i=0;i<4;i++)
{
GPIO_Write (GPIOD,Step_F[i]);
Delay(speed);
//delay_ms(speed);
}
}
发现用第一种方法来做延时电机能调到的最大的旋转速度要比用系统滴答时钟做的延时能调到的快得多,这是怎么一回事啊~~