- // 定义28BYJ-48步进电机的相序
- unsigned char stepSequence[8] = {0x01, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x09};
- // 定义步进电机当前位置和角度
- unsigned char currentPosition = 0;
- unsigned int currentAngle = 0;
- // 延时函数
- void delay(unsigned int time) {
- unsigned int i, j;
- for (i = 0; i < time; i++) {
- for (j = 0; j < 120; j++);
- }
- }
- // 步进电机正转函数
- void stepForward(unsigned int angle) {
- unsigned int steps = angle / 5; // 每步转动角度为5度
- unsigned int i;
-
- for (i = 0; i < steps; i++) {
- currentPosition++;
- if (currentPosition >= 8) {
- currentPosition = 0;
- }
-
- P1 = stepSequence[currentPosition];
- delay(10); // 控制步进电机转速,可调整延时时间
- }
-
- currentAngle += angle;
- }
- // 步进电机反转函数
- void stepBackward(unsigned int angle) {
- unsigned int steps = angle / 5; // 每步转动角度为5度
- unsigned int i;
-
- for (i = 0; i < steps; i++) {
- if (currentPosition == 0) {
- currentPosition = 8;
- }
-
- currentPosition--;
-
- P1 = stepSequence[currentPosition];
- delay(10); // 控制步进电机转速,可调整延时时间
- }
-
- currentAngle -= angle;
- }
- // 主函数
- void main() {
- while (1) {
- // 正转180度
- stepForward(180);
- delay(1000); // 停顿1秒钟
-
- // 反转90度
- stepBackward(90);
- delay(1000); // 停顿1秒钟
- }
- }
|