直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转
直流电机主要由永磁体(定子)、线圈(转子)和换向器组成
除直流电机外,常见的电机还有步进电机(遥控小车)、舵机(小车转向)、无刷电机(飞控)、空心杯电机(小型飞行器)等
PWM(Pulse Width Modulation)即脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速、开关电源等领域
PWM重要参数:
- 频率 = 1 / TS
- 占空比 = TON / TS
- 精度 = 占空比变化步距
// 呼吸灯
sbit LED = P2^0;
void Delay(unsigned int t){
while(t--);
}
void main(){
unsigned char time, i;
while(1){
for(time = 0; time < 100; time++){
// time增长
for(i = 0; i < 20; i++){
// 状态延时,别变化太快
LED = 0;
Delay(time); // 亮时间逐渐增多
LED = 1;
Delay(100-time); // 暗时间逐渐减小
}
}
for(time = 100; time > 0; time--){
// time减小
for(i = 0; i < 20; i++){
LED = 0;
Delay(time); // 亮时间逐渐减小
LED = 1;
Delay(100-time); // 暗时间逐渐增多
}
}
}
}
sbit Motor = P1^0;
unsigned char counter, compare;
unsigned char KeyNum, speed;
void main(){
Timer0_Init();
while(1){
KeyNum = Key();
if(KeyNum == 1){
speed++;
speed %= 4;
if(speed == 0){
compare = 0;} // 改变不同的比较值,占空比逐渐减小
if(speed == 1){
compare = 10;}
if(speed == 2){
compare = 50;}
if(speed == 3){
compare = 100;}
}
Nixie_SetBuf(1, speed, 0);
}
}
void Timer0_Rountine() interrupt 1{
static unsigned int T0Count1 = 0, T0Count2 = 0;
// TH0 = 64535/256; // 给计数单元赋初值,1000us=1ms
// TL0 = 64535%256;
TH0 = 65435/256; // 100us
TL0 = 65435/256;
counter++; // 计数器
counter %= 100;
// speed增大,占空比减小,计数器小于比较值的时间逐渐增多
if(counter < compare){
// 若计数器小于比较值
Motor = 1; // 输出1,电机转动
}else{
Motor = 0; // 输出0,电机停止
}
}