先看一下接线对不对,是不是频率太低了?
while(1) { P12=0; delay(这个值自己准确计算一下,不要太小,参照单片机晶振频率机器周期换算成具体数值(多年不搞这个我也记不得怎么算了)。真不会算自己随便设成1000,200,10000,10……多试点也行); P12=1; delay(同上值); }
#include <reg52.h> unsigned char timer1; sbit DIR=P1^0; //位定义DIR为P1.0口 sbit ENA=P1^1; //位定义ENA为P1.1口 sbit PWM=P1^2; //位定义PWM为P1.2口 void system_Ini() { TMOD|= 0x11; TH1 = 0xfe; //11.0592MHz 0.5ms定时 TL1 = 0x33; TR1 = 1; //启动T1定时 IE =0x8A; //开T0,T1中断,开总中断 } main() { system_Ini(); //调用子函数,初始化定时器T1 while(1) { if(timer1>100) { timer1=0; //输出占空比0.7的PWM脉冲 } if(timer1<30) { PWM=0; } else { PWM=1; } } void T1zd(void) interrupt 3 { TH1 = 0xfe; //11.0592 初始化定时器 TL1 = 0x33; timer1++; //计数+1 }
应该也行得通,你现在的输出端能打出完整的脉冲信号么,还是说你不知道应该怎么输出脉冲信号。
二相四线电机,用一个L298N作驱动,看你需要什么精度,确定四拍制还是八拍制,然后按步序表编写程序,就IO口赋值,delay延时,然后一直循环就行,其他操作可能得用到中断。或者网上下也行,51的步进驱动程序应该有很多
3,881
社区成员
9,054
社区内容
加载中
试试用AI创作助手写篇文章吧