步进电机
来源:互联网 发布:云端软件 虚拟化 编辑:程序博客网 时间:2024/04/28 20:36
步进电机内部是几对线圈,要步进电机转动,满足两个条件
1. 给线圈的两头供电
2.按线圈排布,按顺序供电,就可以转动,可以转动。
原理,一通电,线圈有磁场,两磁场叠加,就转动。
标准序列:
1001
0001
0011
0010
0110
0100
1100
1000
按这个序列,结合硬件,对应每个引脚。
正转,按正读序列。
反转,则反向读序列。
不转,则给线圈对应的引脚,都不供电。
步进电机内部图如下:
步进电机实物图:
这五根线,其中一根是电源线,剩下的四根线是电机驱动io。
在做项目的过程中,驱动步进电机,结果步进电机转动时候带动齿轮转动,声音特别大,因为我在转动的过程过中,在每拍之间,断了电几十us,会导致停止转动一会,所以会咔咔响。
时序图:
代码:
#define MOTO_GPIO_PORT (GPIOC)#define MOTO_GPIO_PINS (GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7)#define KEY_GPIO_PORT (GPIOD)#define KEY_GPIO_PINS (GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4)void Delay (uint16_t nCount);uint8_t MOTO_PHASE8[8] ={0x90,0x10,0x30,0x20,0x60,0x40,0xc0,0x80};//正转 电机导通相序 D-C-B-Aunsigned int moto_last_step=0;unsigned int key_last_get=0;void moto_turnto(int degree);void main(void){ uint8_t key_data=0; /* Initialize I/Os in Output Mode */ GPIO_Init(MOTO_GPIO_PORT, (GPIO_Pin_TypeDef)MOTO_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);GPIO_Init(KEY_GPIO_PORT, (GPIO_Pin_TypeDef)KEY_GPIO_PINS, GPIO_MODE_IN_PU_NO_IT); while (1) { key_data=(GPIO_ReadInputData(KEY_GPIO_PORT)&0x1e)>>1;key_data=(~key_data)&0x0f; if (key_data==0x0) continue;if (key_last_get&0x8 && key_data&0x1){moto_turnto(-100);} else if (key_last_get&0x1 && key_data&0x08){moto_turnto(100);} else if (key_data>key_last_get)//(key_data&GPIO_PIN_4) && !(key_data&GPIO_PIN_5) ){ moto_turnto(-100); }else if (key_data<key_last_get)//(key_data&GPIO_PIN_5) && !(key_data&GPIO_PIN_4) ){ moto_turnto(100); } key_last_get=key_data; }}void moto_turnto(int degree){int i=0;//int j=; if (degree>0){while (i<degree){/* Toggles LEDs *///GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);GPIO_Write(MOTO_GPIO_PORT, MOTO_PHASE8[moto_last_step%8]);Delay(0x1FF);i=i+1;moto_last_step=moto_last_step+1;}}else{degree=0-degree;while (i<degree){/* Toggles LEDs *///GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);GPIO_Write(MOTO_GPIO_PORT, MOTO_PHASE8[moto_last_step%8]);Delay(0x1FF);i=i+1;moto_last_step=moto_last_step-1;//if (j==-1) }}}void Delay(uint16_t nCount){ while (nCount != 0) { nCount--; }}#ifdef USE_FULL_ASSERTvoid assert_failed(uint8_t* file, uint32_t line){ while (1) { }}#endif
阅读全文
0 0
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机、步进电机驱动器常见问题解答
- 步进电机控制和步进电机原理
- 直流电机 步进电机 伺服电机
- 步进电机与伺服电机
- 伺服电机步进电机区别
- 步进电机控制器总结
- Android中嵌套的h5页面,有时候js没起到效果
- SpringBoot集成MyBatis开启事务
- html/css选择器的基本使用
- Log4j日志输出详细
- static关键字
- 步进电机
- C/C++ 变量作用范围
- Java内存模型的几个关键词
- Android之开发BLE 详细步骤
- caffe 用matlab解析日志画loss和accuracy
- const和define的区别
- Android中gradle的一些技巧
- libc.so.6: cannot open shared object file: No such file or diretory 问题解决
- html&&CSS面试