求两相四线步进电机驱动,C语言源码,可以控制步数的。

求两相四线步进电机驱动,C语言源码,可以控制步数的。,第1张

#include <stdio.h>#include <fcntl.h>#include <string.h>#include <sys/ioctl.h>

#define STEPMOTOR_IOCTRL_PHASE 0x13 staticintstep_fd = -1

char *STEP_DEV="/dev/exio/0raw"//定义一个指针指向步进电机的驱动 程序

/********* A, AB, B, BC, C CD, D, DA ***/

char stepdata[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90}//各 个相位对应的值

void Delay(int t) //延时函数 { int i

for(t>0t--)

for(i=0i<400i++)}

/***************************************************** ***********/

int main(intargc, char **argv) {

int i = 0

if((step_fd=open(STEP_DEV, O_WRONLY))<0){ printf("Error opening /dev/exio/0raw device\n")return 1} /*

打开设备的驱动程序,由于LINUX把所有的设备都模拟成文件。 step_fd=open(STEP_DEV,0_WRONLY)实际调用的函数为:

staticint s3c2410_exio_open(structinode *inode, struct file *filp) //驱动程序中的设备打开程序 */

for () {

for (i=0i<sizeof(stepdata)/sizeof(stepdata[0])i++) { ioctl(step_fd, STEPMOTOR_IOCTRL_PHASE, stepdata[i])}

/*程序进入一个死循环,这样可以使电机在没有人为停止的状况下,一直的 转动下去。

*第二层for语句循环一次即电机转动一周。函数ioctl()对应函 数*s3c2410_exio_ioctl()

*而这个函数最终将调用函数do_stepmotor_run((char)arg)使步进电 机转动起来。 */

printf("Delay(100)\n")Delay(100)}

close(step_fd)//程序结束时关闭设备 printf("Step motor start running!\n")return 0}本文来自百度文库,你可以搜搜,其中答案更详细的!

我给你一段作为参考,最近正在研究这个玩意。让步进电机转动很简单,最简单的方式就是依次给它的每一项一个脉冲(脉冲时间适具体情况而定)。首先这个程序是针对4项步进电机的,采用单4拍转动的方式。步进电机还有其他参数,比如转速等等,都要考虑在内。步进电机子程序放在定时器中断里面。不是特别精确。能用。里面设立了几个标志,你应该能看懂

void StepMotor(void) //步进电机子函数

{

//正转//

if (MOTORCONTROL==2)

{

if(motortime<3) //转的圈数。

{

motorABCD++

switch( motorABCD ) //精度要求不高,改8拍为4拍转动方式

{

case 2MS:

m1=0

m2=1

m3=1

m4=1

break

case 3MS:

m1=1

m2=0

m3=1

m4=1

break

case 4MS:

m1=1

m2=1

m3=0

m4=1

break

case 5MS:

m1=1

m2=1

m3=1

m4=0

motortime++

motorABCD=1MS

break

}

}

}

//反转//

if (MOTORCONTROL==1)

{

if(motortime<3) //转的圈数。

{

motorABCD++

switch( motorABCD ) //精度要求不高,改8拍为4拍转动方式

{

case 2MS:

m1=0

m2=1

m3=1

m4=1

break

case 3MS:

m1=1

m2=1

m3=1

m4=0

break

case 4MS:

m1=1

m2=1

m3=0

m4=1

break

case 5MS:

m1=1

m2=0

m3=1

m4=1

motortime++

motorABCD=1MS

break

}

}

}

if(motortime==3)

{

motortime=0

MOTORCONTROL=0

}

}//子函数结尾

void MOTOR() interrupt 3//定时器1 中断程序

{

TH1=(65536-990)/256 /*恢复计数初值*/

TL1=(65536-990)%256

StepMotor()

}

天调试程序,改了下下位机,然后烧进去程序就无法运行了,再烧原来的好的程序进去也无法运行,板子上没做jtag接口,都是isp下载的,用了个led闪烁来验证板子是否正常工作,现在led常亮了,根本不闪

板子上各个器件温度正常,电压正常,硬件复位上电复位都试过,还是无法运行

没办法飞线出来swd调试,连上jlink,无法下载调试,试了好多次,都是显示下面两种情况,显示信息见最后

这种板子现在就剩这一块了,求各位高人能否帮我判断下是否是芯片坏了还是可能其他的原因

PS:SWD调试信息

Load "..\\ObjFlash\\stepmotor002.AXF"

Set JLink Project File to "D:\backup\项目\stepmotor\完全功能程序\stepmotor002\Project\JLinkSettings.ini"


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

原文地址:https://54852.com/yw/7914157.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-11
下一篇2023-04-11

发表评论

登录后才能评论

评论列表(0条)

    保存