• 大小: 3KB
    文件类型: .c
    金币: 2
    下载: 1 次
    发布日期: 2021-06-02
  • 语言: 其他
  • 标签:

资源简介

一个很简单的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 

评论

共有 条评论