打印头马达控制代码
来源:互联网 发布:淘宝下架什么意思 编辑:程序博客网 时间:2024/04/27 14:25
程序控制的是两个4相步进马达,马达的换相时间控制没有使用硬件定时器。
#include <stdio.h>/*标准输入输出定义*/#include <string.h>#include <sys/ioctl.h>/*IO操作定义*/#include <stdlib.h>/*标准函数库定义*/#include <unistd.h>/*Unix 标准函数定义*/#include <sys/types.h> #include <sys/stat.h>/*文件状态查询定义*/#include <fcntl.h>/*文件控制定义*/#include <termios.h>/*PPSIX 终端控制定义*/#include <errno.h>/*错误号定义*/#include <netinet/in.h>/*网络接口*/#include <sys/socket.h>/*网络通讯*/#include <time.h>#include <linux/timer.h>#include <linux/param.h>//#include <linux/sched.h>typedef unsigned char BYTE;typedef unsigned short WORD;typedef unsigned long DWORD;#define MOTOR_ADDR0x8000000#define FeedStop 0x00//进纸马达停止位#define FeedHold 0x01//进纸马达Hold位#define FeedRun0x03#define CarriageHold0x03//字车马达Hold位#define CarriageStop0x02//字车马达停止位const unsigned char CarriagePhaseTable[4]={0xC0,0x40,0x00,0x80};const unsigned char FeedPhaseTable[4]={0x08,0x00,0x04,0x0c};#define NegTime900const unsigned int RushTime=6000-NegTime;const unsigned int HoldTime=8000-NegTime;const unsigned int FAccTime[14]={7000-NegTime,3880-NegTime,2980-NegTime,2510-NegTime,2210-NegTime,2000-NegTime,1840-NegTime,1710-NegTime,1610-NegTime,1520-NegTime,1450-NegTime,1380-NegTime,1330-NegTime,1280-NegTime};const unsigned int FDecTime[2]={1670-NegTime,2500-NegTime};const unsigned int FConTime=1250-NegTime;const unsigned int FLowTime=7000-NegTime;unsigned int MoveStep; //移动步数unsigned char SetStep;//设置步数unsigned char FeedFlag;//进纸标志unsigned char StepOver;//步数结束的标志unsigned char Cc_Phase;//当前字车马达相位unsigned char Cf_Phase;//当前进纸马达相位static struct timer_list motor_timer;static void handle_tm_irq(unsigned long);static void init_motor_timer(struct timer_list *tmlist){init_timer(tmlist);tmlist->function=(void *)handle_tm_irq;}static void release_motor_timer(struct timer_list *tmlist){del_timer(tmlist);}static void set_motor_timer(struct timer_list *tmlist, int delay){del_timer(tmlist);tmlist->expires=jiffies+delay;add_timer(tmlist);}void delay_us(unsigned int usec){struct timeval tv;tv.tv_sec=0; tv.tv_usec=usec;select(0,NULL,NULL,NULL,&tv);}void FEED_CR(unsigned char phase){BYTE bData;bData=(*(volatile unsigned char *)MOTOR_ADDR) & 0x0f;(*(volatile unsigned char *)MOTOR_ADDR) = (bData | (phase << 4));}void CarriageCR(unsigned char phase){(*(volatile unsigned char *)MOTOR_ADDR) = phase;}void DecMoveStep(void){if(MoveStep >= 0){MoveStep--;StepOver = 0;}elseStepOver = 1;}void FeedDecMoveStep(void){unsigned char FeedPressFlag;MoveStep--;if(MoveStep==0)StepOver=1;}/**************************************************///进纸马达停止/**************************************************/int Run_FStop(void){FEED_CR(FeedPhaseTable[Cf_Phase] | FeedStop);return 0;}/**************************************************///进纸马达Hold/**************************************************/int SetFHold_Run(void){delay_us(HoldTime);FEED_CR(FeedPhaseTable[Cf_Phase] | FeedHold);return 0;}/**************************************************///进纸马达RASH/**************************************************/int SetFRush_Run(void){delay_us(RushTime);FEED_CR(FeedPhaseTable[Cf_Phase] | FeedRun);return 0;}void FeedF(void){if(Cf_Phase==3) Cf_Phase=0;elseCf_Phase++;FEED_CR(FeedPhaseTable[Cf_Phase] | FeedRun);}void FeedB(void){if(Cf_Phase==0) Cf_Phase=3;elseCf_Phase--;FEED_CR(FeedPhaseTable[Cf_Phase] | FeedRun);}/**************************************************///进纸马达加速/**************************************************/int SetFAcc_Run(int c){if(c>0){ MoveStep=c; SetStep=c;}delay_us(FAccTime[SetStep-MoveStep]);if(FeedFlag == 1)FeedF();else FeedB();DecMoveStep();return 0;}/**************************************************///进纸马达减速/**************************************************/int SetFDec_Run(int c){if(c>0){ MoveStep=c; SetStep=c;}delay_us(FDecTime[SetStep-MoveStep]);if(FeedFlag == 1)FeedF();else FeedB();DecMoveStep();return 0;}/**************************************************///进纸马达恒速/**************************************************/int SetFCon_Run(int c){if (c>0){ MoveStep=c;}delay_us(FConTime);if(FeedFlag == 1)FeedF();else FeedB();//DecMoveStep();FeedDecMoveStep();return 0;}/**************************************************///进纸马达低速/**************************************************/int SetLowFeed_Run(int c){if (c>0){ MoveStep=c;}delay_us(FLowTime);if(FeedFlag == 1)FeedF();else FeedB();DecMoveStep();return 0;}//---------------------------------------------------------------------//进纸马达控制//---------------------------------------------------------------------/********************************************///进纸马达初始化/********************************************/void InitialFeed(void){unsigned char i;SetFHold_Run();SetFRush_Run();FeedFlag = 1;//退纸4步SetLowFeed_Run(4);for(i=1;i<4;i++){SetLowFeed_Run(0);}SetFRush_Run();//进纸马达进入RUSHSetFHold_Run();SetFRush_Run();FeedFlag = 0;//进纸4步SetLowFeed_Run(4);for(i=1;i<4;i++){SetLowFeed_Run(0);}SetFRush_Run();//进纸马达进入RUSHSetFHold_Run();Run_FStop();}void FeedNStep(int n){unsigned char i;FeedFlag = 1;//进纸SetFHold_Run();SetFRush_Run();SetLowFeed_Run(n--);while(n--){SetLowFeed_Run(0);}SetFRush_Run();//进纸马达进入RUSHSetFHold_Run();Run_FStop();}void BackNStep(int n){unsigned char i;FeedFlag = 0;//进纸SetFHold_Run();SetFRush_Run();SetLowFeed_Run(n--);while(n--){SetLowFeed_Run(0);}SetFRush_Run();//进纸马达进入RUSHSetFHold_Run();Run_FStop();}void LongFeed(int n){unsigned char i;FeedFlag = 1;//进纸if(n >= 16){//进纸马达大于24步SetFHold_Run();//进纸马达进入HOLD SetFRush_Run();//进纸马达进入RUSHSetFAcc_Run(14);//加速进纸20步for(i=1; i<14; i++){SetFAcc_Run(0);}n-=16;SetFCon_Run(n--); while(n-- && StepOver==0){SetFCon_Run(0); }SetFDec_Run(2); //一步SetFDec_Run(0);//2步SetFRush_Run();//进纸马达进入RUSHSetFHold_Run();Run_FStop();}else{FeedNStep(n);}}void LongBack(int n){unsigned char i;FeedFlag = 0;//进纸if(n >= 16){//进纸马达大于24步SetFHold_Run();//进纸马达进入HOLD SetFRush_Run();//进纸马达进入RUSHSetFAcc_Run(14);//加速进纸20步for(i=1; i<14; i++){SetFAcc_Run(0);}n-=16;SetFCon_Run(n--); while(n-- && StepOver==0){SetFCon_Run(0); }SetFDec_Run(2); //一步SetFDec_Run(0);//2步SetFRush_Run();//进纸马达进入RUSHSetFHold_Run();Run_FStop();}else{BackNStep(n);}}//---------------------------------------------------------------------int main(void){WORD i=0;Cf_Phase=2;InitialFeed();delay_us(10000);LongFeed(300);LongBack(100);return 0;}
- 打印头马达控制代码
- openNI驱动控制kinect马达
- 使用OpenNI 控制Kinect 的马达
- 高通马达代码分析 msm_actuator
- qualcomm的camera马达驱动代码分析
- qualcomm的camera马达驱动代码分析
- HT1656 马达控制定时器 – MCTM 正交编码器模式
- 打印头电缆断线故障
- 打印头墨盒处理方法
- 使用2个timer实现步进马达脉冲加减速控制
- 震动马达
- canon 喷墨打印机打印头的保养
- 调试EPSON MU110II打印头驱动程序的感想。
- 打印头堵塞的原因及清洗方法
- Excel分页设置及打印头的设定
- python登录认证HTTP并打印头信息
- 单相AC同步马达
- box2d中的连接器马达
- mplayer的控制
- silverlight系列视频教程 正式出炉
- 秒不可言
- 流氓会武术,谁也挡不住
- delphi深度历险这书真的不错.
- 打印头马达控制代码
- Oracle优化SQL执行效能的几点常识
- MyEclipse 6.5GA发布了
- RMI
- 欧阳俊曦精通Rational Rose
- SQL语句中的优化提示Hints的总结
- 应用程序
- 生活是什么
- 非常好的JS框架!!EXTJS