历史上的今天
返回首页

历史上的今天

今天是:2025年01月18日(星期六)

正在发生

2020年01月18日 | 基于PIC单片机对全功能步进电机的控制设计

2020-01-18 来源:elecfans

//适合3ePIC实验板。

#include //包含单片机内部资源预定义

#include

void delay(unsigned int endcount); //延时函数,延时为endcount*0.5毫秒

void run(); //步进电机运行控制函数

void stop(); //步进电机停止函数

基于PIC单片机对全功能步进电机的控制设计

//定义变量

unsigned int count; //延时函数用计数器

static int step_index; //步进索引数,值为0-7

staTIc bit turn; //步进电机转动方向

staTIc bit stop_flag; //步进电机停止标志

staTIc int speedlevel; //步进电机转速参数,数值越大速度越慢,最小值为1,速度最快

staTIc int steptimecount; //步进电机每步时长倒计数

static unsigned char powertimecount; //步进电机每步已通电时间计数

void main(void)

{

ADCON1=0B00000110;//设置RE端口为普通I/O口

TRISE2=0;

TRISC2=0;

TRISC0=0;

TRISC1=0;

step_index = 0;

stop_flag = 0;

steptimecount = 0;

stop();//步进电机停止

T0CS=0;//选择内部指令周期信号为TMR0的时钟源

PSA=0;//TMR0使用预分频器

PS2=0;//预分频器分频比1:16

PS1=1;

PS0=1;

T0IF=0;//清除TMR0中断标记

TMR0=0X65;//TMR0设置初值

T0IE=1;//TMR0中断允许

GIE=1; //全局中断使能

do{

stop_flag=0;

turn = 0;

speedlevel =7;

delay(1000);//延时2.5秒

speedlevel = 3;

delay(1000);

stop_flag=1;

delay(1000);

stop_flag=0;

turn = 1;

speedlevel = 7;

delay(1000);

speedlevel =3;

delay(1000);

stop_flag=1;

delay(1000);

}while(1);

}

//定时器0中断处理

void interrupt clkint(void)

{

TMR0=0X65;//设定时每隔2.5MS中断一次

T0IF=0;//清除TMR0中断标记

count++;

steptimecount--;

if(powertimecount《=1)//每步最短通电时间5ms

{

powertimecount++;//未达最大值时加1

}

if(powertimecount==1)

{

stop();

}

else if(steptimecount《=0)

{

powertimecount=0;

if (stop_flag==1)

{

stop();

}

else

{

steptimecount = speedlevel;

run();

}

}

}

void delay(unsigned int endcount)

{

count=0;

do{}while(count}

void run()

{

switch(step_index)

{

case 0:RC2=1;RC0=0;RC1=0;RE2=0;break;

case 1:RC2=1;RC0=1;RC1=0;RE2=0;break;

case 2:RC2=0;RC0=1;RC1=0;RE2=0;break;

case 3:RC2=0;RC0=1;RC1=1;RE2=0;break;

case 4:RC2=0;RC0=0;RC1=1;RE2=0;break;

case 5:RC2=0;RC0=0;RC1=1;RE2=1;break;

case 6:RC2=0;RC0=0;RC1=0;RE2=1;break;

case 7:RC2=1;RC0=0;RC1=0;RE2=1;

}

if (turn==0)

{

step_index++;

if (step_index》7)

step_index=0;

}

else

{

step_index--;

if (step_index《0)

step_index=7;

}

}

void stop()//使步进电机处于停机状态

{

RC2=0;//M1

RC0=0;//M3

RC1=0;//M2

RE2=0;//M4

}

推荐阅读

史海拾趣

CLARE公司的发展小趣事

CLARE公司始终坚持品质至上的原则,从原材料采购到生产制造、质量检测等各个环节都严格把控,确保产品的品质和性能达到客户的期望。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和服务。这些举措赢得了客户的信赖和好评,为CLARE公司的长期发展奠定了坚实的基础。

GS Yuasa Battery Sales UK Ltd.公司的发展小趣事

CLARE公司的创业之路始于对电子行业深厚的技术积累和敏锐的市场洞察力。公司的创始人凭借其深厚的专业知识和经验,准确把握了行业的发展趋势,成功开发了一系列具有竞争力的电子产品。这些产品在市场上获得了良好的反响,为CLARE公司奠定了坚实的技术和市场基础。

Elprotronic Inc.公司的发展小趣事

品质管理一直是Elprotronic Inc.非常重视的一项工作。公司建立了一套完善的品质管理体系,从原材料采购到产品生产、检测、包装等各个环节都进行严格把关。同时,公司还引入了先进的生产设备和技术手段,提高了产品的生产效率和质量水平。此外,公司还定期组织员工进行品质管理培训和学习交流活动,不断提升员工的品质意识和技能水平。这些措施的实施使得Elprotronic Inc.的产品质量得到了进一步提升和保障。

AMSCO [Austria micro systems AG]公司的发展小趣事

随着电子行业的不断发展,客户对电子元器件的需求也在不断变化。Elprotronic Inc.紧跟市场趋势,不断推出具有创新性的产品和技术。其中,一项名为“高速数据传输技术”的创新成果引起了业界的广泛关注。这项技术可以大幅提高数据传输速度,同时保证数据的稳定性和安全性。这一突破性的技术创新为Elprotronic Inc.赢得了更多客户的信赖和支持,也进一步巩固了公司在行业中的地位。

Hong Kong X'Tals Ltd公司的发展小趣事
选择合适的电阻和电容,以确保定时精度和电路稳定性。同时,注意元件的温漂和老化对定时时间的影响。
Adaptive Networks Inc公司的发展小趣事
在高负载或长时间工作的情况下,需要关注LM122的散热问题,以避免过热导致性能下降或损坏。

问答坊 | AI 解惑

Endpoint Block Plus for PCI Express® 用户指南

《Endpoint Block Plus for PCI Express® 用户指南》讲述 Endpoint Block Plus for PCI Express (PCIe®) 核的功能和操作,包括如何设计、定制和实现核。 现在这个技术已经开始广泛应用了,对高端用户蛮有用的…

查看全部问答>

问题 : Win CE 5.0 使用 IImage 接口实现 图片浏览 急 多谢

使用IImage将图片Draw()在一个Static 框上 无法刷新 即上一次画的内容在画另一幅图片时仍存在 不知怎样消除 若用FillRect 将static框画黑 明显看到闪烁 不知描述的是否清楚 多谢了各位 或其他实现图片浏览的方法 wince 5.0 再次感谢…

查看全部问答>

PB5.0生成的platform如何删除?

PB5.0生成的platform如何删除?如果直接删除目录,在启动页面上仍然保留其超级链接.…

查看全部问答>

想问一句咱们datasheet的PDF是都加了权限的吗?

想问一句咱们datasheet的PDF是都加了权限的吗? 建议把权限去掉这样好往文档里面复制 呵呵…

查看全部问答>

万利的STM32F107开发板什么时间在国内市场能买到呀

                                 大牛们,谁知道万利的STM32F107开发板什么时间在国内市场能买到呀,香水主出来说下行吗?…

查看全部问答>

,我有些不理解.

关于 你们的声明,我有些不理解.例如:我采用芯片经常看一些demo,而且线路也和demo一样.难道说,只允许我买片子,具体电路还要自己重新设计吗,不允许使用demo线路吗,这样的话,我买片子还干吗用,demo就是为了让使用者尽快熟悉该芯片的使用等,我不明白,如 ...…

查看全部问答>

我彻底晕了,搞了一天,还是没有解决!天啊,问题到底出在哪里?

程序编好了,各种功能都很正常,用的是135,可是今天领导说让在程序初始化的地方先让P5.3=1,P5.0=0,然后经过一段延时在另P5.3=0;P5.0=1;看似很简单,可是当我这样改了之后问题却出来了,程序运行到P5.3=0;P5.0=1;指令后就复位,一直重复不断,我不知道问题 ...…

查看全部问答>

点阵光标怎么实现?

我用三星的160s321a1型号的屏,想出光标,可是弄了好几天了,现在光标出来了,就是没有地址不知道该如何去显示?…

查看全部问答>

请问modelsim SE6.5打开为什么这么慢

装的是ISE10.1+ modelsim SE6.5  装上之后编译xilinx库文件之后  再在ISE下调用modelsim就特别慢  单独打开modelsim 6.5时也特别慢  机器配置绝对没问题,顶级的,也没开任何其他大程序。  怀疑是加载了什么不需要的东东 ...…

查看全部问答>

EE_BeagleBone_Cape之LCD

作者:chenzhufly QQ:36886052 ( 转载请注明出处) 1. 概述 这篇文档是关于EE_BeagleBone_Cape LCD,内容不是很多,图形界面的编程不再这里加以讨论和学习,主要说说硬件的配置和测试。 2. LCD硬件设计点滴 我使用的是群创的7寸屏,这里主要注 ...…

查看全部问答>