本帖最后由 eehome 于 2013-1-5 09:58 编辑
偶然看到一个,发上来给有需要的自己看看!
/*******************************************************
程序功能:步进电机驱动
开发环境:Keil3
硬件环境:CEPARK51 V4.0,STC12C5A60S2,12M晶振
实验现象:单双八拍工作方式:A-AB-B-BC-C-CD-D-DA (即一个脉冲,转 3.75 度)
步进电机先加速再匀速后减速转动。
*******************************************************/
- #include "STC12C5A60S2.h"
- void delay();
- //Motor
- ***it F1 = P0^0;
- ***it F2 = P0^1;
- ***it F3 = P0^2;
- ***it F4 = P0^3;
- unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //反转
- unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //正转
- unsigned int K, rate;
- /**********************************************************
- * *
- * 步进电机驱动 *
- ***********************************************************/
- void motor_ffw(void)
- {
- unsigned char i;
- for (i=0; i<8; i++) //一个周期转30度
- {
- P0 = FFW[i]&0x1f; //取数据
- delay(); //调节转速
- }
- }
- /********************************************
- 延时程序
- *********************************************/
- void delay(void)
- {
- unsigned int k,t;
- t=rate;
- while(t--)
- {
- for(k=0; k<150; k++)
- { }
- }
- }
- /********************************************************
- *
- *步进电机运行
- *
- *********************************************************/
- void motor_turn(void)
- {
- unsigned char x;
- rate=0x0a;
- x=0x40;
- do
- {
- motor_ffw(); //加速
- rate--;
- }while(rate!=0x01);
- do
- {
- motor_ffw(); //匀速
- x--;
- }while(x!=0x01);
- do
- {
- motor_ffw(); //减速
- rate++;
- }while(rate!=0x0a);
- }
- main()
- {
- while(1)
- {
- motor_turn();
- }
- }
复制代码
4
|
|
|
|
给力啊!!!!
|
|
|
|
|
看看吧。
|
|
|
|
|
头像被屏蔽
· 2012-8-5 19:17:57
|
|
|
|
|
谢谢你的代码。很好。受用了。
|
|
|
|
|