基于STC8G2K64S4单片机控制步进电机

基于STC8G2K64S4单片机控制步进电机,第1张

基于STC8G2K64S4class="superseo">单片机控制步进电机 #前言

本文从硬件和软件两方面介绍了使用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文件的抬头,很重要!不然不会定义的。

本人小白,有问题交流讨论,虚心受教

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1353462.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-14
下一篇 2022-06-14

发表评论

登录后才能评论

评论列表(0条)

保存