本文从硬件和软件两方面介绍了使用STC8G2K64S4单片机控制步进电机的方法
这是来自一个即将步入大三的学生玩竞赛后的总结,希望对有需要的同学有帮助
硬件方面步进电机是42系步进电机,内部驱动器的规格是DC11V-DC28V/2A,驱动器有五个接口如下图所示。这五个接口也是控制方面需要设置的
第一个V+端是电源端,我直接接12V电池
第二个是GND接地端,跟上一个一样,直接接在电源上
第三个COM端是接5V电压,直接接在主板5V端就好
第四个是DIR端主要用来控制转向,接在单片机的引脚上,通过输出高低电平“1”和“0”来控制步进电机的正反转
第五个是STP端主要用来控制速度,也是接在单片机引脚上,由于步进电机的驱动是脉冲驱动,必须通过输出PWM波来控制速度,而不是简单的高低电平“1”和“0”,所以相对应的单片机引脚要具有输出PWM的功能
第六个EN端不接
单片机主板因为竞赛所需是自己制的板,还有一些稳压模块之类的也是某宝购买
软件方面我用的是keil开发,一些创建工程和程序stc-isp烧录就不细说了
我最开始的时候是自己写的脉冲程序,通过控制高低电平的输出时间来实现占空比,从而实现一个脉冲。简单来说就是一个循环内输出高电平10ms然后输出低电平10ms,这样就形成一个占空比50%的脉冲。这个虽然是最直观的但现在看来是挺笨的。
代码如下:
sbit M1=P14 //定义P14为STP端
sbit F1=P62 //定义P62为DIR端
for(a=0;a<1;a) //循环一直输出脉冲
{
F1=0; //方向选择
M1=0;
delay(1); //输出低电平1ms
M1=1;
delay(3); //输出高电平3ms
}
因为一次循环是一个脉冲信号,通过循环来实现输出PWM波
在竞赛期间受到学长的教导,在接下来使用了逐飞的库函数,这也大大节省了很多时间,虽然是开源项目但也要明白函数的原理和用法。
因为步进电机是通过改变频率来改变速度,所以选择函数pwm_freq来改变步进电机的速度。这里我给的值是4000,电机转速中等偏慢,取值范围64hz~3mhz。取值一般在2000~10000左右,实际根据电机来定义。后面的占空比随便写一个就行。
代码如下:
sbit F1=P16 //定义F1为DIR端
sbit P17 //定义P17为STP端
void main()
{
DisableGlobalIRQ(); //关闭总中断
board_init(); //初始化内部寄存器,勿删除此句代码。
pwm_init(PWM1_P17, 0, 0); //初始化pwm端口
EnableGlobalIRQ(); //开启总中断
while(1)
{
F1=0; //方向选择
pwm_freq(PWM1_P17, 4000, 5000); //输出pwm波
}
}
因为在使用STC8G2K64S4单片机时需要对端口进行初始化,不然单片机识别不了端口的定义使用库函数时务必看懂每个函数c文件的抬头,很重要!不然不会定义的。
本人小白,有问题交流讨论,虚心受教
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)