资源简介
一个很简单的6/4 SRM电机开环程序,自带数码管计数显示转子位置,可调开通关断角,位置传感器采用旋转编码器,实际电机测完置零偏置后可正常运行,但由于51能力有限,转速受限制,只能达到2000RPM
代码片段和文件信息
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define ALL 65536 //定时器工作方式1时,最大基数长度 65536;
#define F_osc 12000000 //晶振频率12M;
sbit LSA=P2^2; //数码管位选
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit A1=P1^0; //相位导通;
sbit A2=P1^1;
sbit B1=P1^2;
sbit B2=P1^3;
sbit C1=P1^4;
sbit C2=P1^5;
uint PIAN=83;
uint XPA; //A相位置
uint XPB; //B相位置
uint XPC; //C相位置
uint theta_on=0; //开通关断角
uint theta_off=50;
uint count=0; //上升沿计数(显示)
uint count1=75; //上升沿计数(控制)
uchar code smgduan[17]={0x3f0x060x5b0x4f0x660x6d0x7d0x07
0x7f0x6f0x770x7c0x390x5e0x790x71};//显示0~F的值
void delay(uchar t); //延时函数,用于按键去抖;
void delay1(uint i); //延时函数,用于数码管动态显示
void init(); //初始化函数,用于定时器的初始化;
void DigDisplay(uint count); //数码管动态显示
//延时程序0
void delay(uchar t)
{
uchar ij;
while(t--) //每个脉冲为1us
{
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}
}
//延时1ms
void delay1(uint i)
{
while(i--);
}
//选相置0
void Xclear()
{
A1=0;A2=0;
B1=0;B2=0;
C1=0;C2=0;
}
//外部中断0的中断函数
void Int0() interrupt 0
{
count1=75;
count=0;
EX0=0;
}
//外部中断1的中断函数
void
评论
共有 条评论