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

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

#前言

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

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

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值