
#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"
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)