直流无刷电机驱动程序
#include
#include "derivative.h"
#include "INIT_PLL.h"
#define BOOL int
#define TRUE 1
#define FALSE 0
#define KEY1 PTH_PTH3
#define KEY1_DIR DDRH_DDRH3
unsigned char WZ,ZKB1=10,ZKB2=20;
BOOL A,B,C,HA,HB,S1,ZHENG,FAN;
void INIT_KEY(void)
{
KEY1_DIR=0;
PPSH&=0XF0;
PIEH|=0X0F;
PIFH|=0X0F;
}
void INIT_ECT(void)//定时器初始化
{
TSCR1_TEN=1; //定时器使能为
TIOS&=0XE0;
TCTL3=0X03;
TCTL4=0Xff;
TIE=0X1F; //允许定时器中断
TSCR2=0X07; //预分频系数111 128分频 时钟周期为4us
TFLG1=0XFF; //清除各IC/OC中断标志位
TFLG2=0XFF; //清除自由定时器中断标志位
}
void INIT_PWM(void) //PWM初始化
{
PWMPRCLK=0X00; //A B
PWMSCLA=4; //SA=A(32M)/2/4
PWMSCLB=4; //SB=B(32M)/2/4
PWMCLK=0Xff; //时钟选择 0: A/B 1: SA/SB
PWMCAE=0XFF; //0:左对齐 1:居中对齐
DDRP=0XFF;
PWMPER0=100; //占空比
PWMDTY0=0;
PWMPER1=100;
PWMDTY1=0;
PWMPER2=100;
PWMDTY2=0;
PWMPER3=100;
PWMDTY3=0;
PWMPER4=100;
PWMDTY4=0;
PWMPER5=100;
PWMDTY5=0;
PWME=0X00;
}
/*
void delay(void)
{
unsigned int i,j;
for(i=0;i
for(j=0;j
}
*/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
//*******************霍尔信号检测*********************//
void interrupt 8 T0_inter(void) {TFLG1_C0F=1; A=PTT_PTT0;}
void interrupt 9 T1_inter(void) {TFLG1_C1F=1; B=PTT_PTT1;}
void interrupt 10 T2_inter(void) {TFLG1_C2F=1; C=PTT_PTT2;}
void interrupt 11 T3_inter(void) {TFLG1_C3F=1; HA=PTT_PTT3;}
void interrupt 12 T4_inter(void) {TFLG1_C4F=1; HB=PTT_PTT4;}
void interrupt 25 PTH_inter(void)
{
if(PIFH_PIFH3!=0) //停止
{
PIFH_PIFH3=1;
S1=1;
ZHENG=0;
FAN=0;
}
if(PIFH_PIFH2!=0)
{
PIFH_PIFH2=1;
ZHENG=1;
FAN=0;
S1=0;
}
if(PIFH_PIFH1!=0)
{
PIFH_PIFH1=1;
ZHENG=0;
FAN=1;
S1=0;
}
if(PIFH_PIFH0!=0) //占空比加1
{
PIFH_PIFH2=1;
ZKB1=ZKB1+5;
ZKB2=ZKB1+10;
if(ZKB1>=85)
{
ZKB1=85;
ZKB2=95;
}
}
}
//***************************************************//
#pragma CODE_SEG DEFAULT
//******************转子位置判断*********************//
void ZZWZ(void)
{
if((A==1)&&(B==0)&&(C==1)) WZ=1;
if((A==1)&&(B==0)&&(C==0)) WZ=2;
if((A==1)&&(B==1)&&(C==0)) WZ=3;
if((A==0)&&(B==1)&&(C==0)) WZ=4;
if((A==0)&&(B==1)&&(C==1)) WZ=5;
if((A==0)&&(B==0)&&(C==1)) WZ=6;
}
//***************************************************//
//*****************六种导通状态**********************//
void A_B(void)
{
PWMPOL_PPOL0=1; PWMPOL_PPOL1=0; PWMPOL_PPOL3=1;
PWMPOL_PPOL2=1; PWMPOL_PPOL4=1; PWMPOL_PPOL5=1;
PWMDTY0=ZKB1; PWMDTY1=ZKB2; PWMDTY3=100;
PWMDTY2=0; PWMDTY4=0; PWMDTY5=0;
PWME=0X3F;
}
void A_C(void)
{
PWMPOL_PPOL0=1; PWMPOL_PPOL1=0; PWMPOL_PPOL5=1;
PWMPOL_PPOL2=1; PWMPOL_PPOL3=1; PWMPOL_PPOL4=1;
PWMDTY0=ZKB1; PWMDTY1=ZKB2; PWMDTY5=100;
PWMDTY2=0; PWMDTY3=0; PWMDTY4=0;
PWME=0X3F;
}
void B_C(void)
{
PWMPOL_PPOL2=1; PWMPOL_PPOL3=0; PWMPOL_PPOL5=1;
PWMPOL_PPOL0=1; PWMPOL_PPOL1=1; PWMPOL_PPOL4=1;
PWMDTY2=ZKB1; PWMDTY3=ZKB2; PWMDTY5=100;
PWMDTY0=0; PWMDTY1=0; PWMDTY4=0;
PWME=0X3F;
}
void B_A(void)
{
PWMPOL_PPOL2=1; PWMPOL_PPOL3=0; PWMPOL_PPOL1=1;
PWMPOL_PPOL0=1; PWMPOL_PPOL4=1; PWMPOL_PPOL5=1;
PWMDTY2=ZKB1; PWMDTY3=ZKB2; PWMDTY1=100;
PWMDTY0=0; PWMDTY4=0; PWMDTY5=0;
PWME=0X3F;
}
void C_A(void)
{
PWMPOL_PPOL4=1; PWMPOL_PPOL5=0; PWMPOL_PPOL1=1;
PWMPOL_PPOL0=1; PWMPOL_PPOL2=1; PWMPOL_PPOL3=1;
PWMDTY4=ZKB1; PWMDTY5=ZKB2; PWMDTY1=100;
PWMDTY0=0; PWMDTY2=0; PWMDTY3=0;
PWME=0X3F;
}
void C_B(void)
{
PWMPOL_PPOL4=1; PWMPOL_PPOL5=0; PWMPOL_PPOL3=1;
PWMPOL_PPOL0=1; PWMPOL_PPOL1=1; PWMPOL_PPOL2=1;
PWMDTY4=ZKB1; PWMDTY5=ZKB2; PWMDTY3=100;
PWMDTY0=0; PWMDTY1=0; PWMDTY2=0;
PWME=0X3F;
}
//***************************************************//
//*********************正转换相函数**********************//
void A_B_C_ZHENG(void)
{
switch(WZ)
{
case 1:C_A();break;
case 2:C_B();break;
case 3:A_B();break;
case 4:A_C();break;
case 5:B_C();break;
case 6:B_A();break;
}
}
//*********************反转换相函数**********************//
void A_B_C_FAN(void)
{
switch(WZ)
{
case 1:A_C();break;
case 2:B_C();break;
case 3:B_A();break;
case 4:C_A();break;
case 5:C_B();break;
case 6:A_B();break;
}
}
//***************************************************//
void main(void)
{
DisableInterrupts;
INIT_PLL();
INIT_PWM();
INIT_ECT();
INIT_KEY();
EnableInterrupts;
A=PTT_PTT0;
B=PTT_PTT1;
C=PTT_PTT2;
for(;;)
{
if(S1==1)
{
PWME=0X00;
}
else if(ZHENG==1)
{
ZZWZ();
A_B_C_ZHENG();
}
else if(FAN==1)
{
ZZWZ();
A_B_C_FAN();
}
else
PWME=0;
}
}
相关文章
- 电动车用无刷直流电机控制器的设计
- 四旋翼飞行器无刷直流电机调速系统的设计
- 直流电动机工作原理
- 单片机控制直流电机
- 直流电机控制
- 数控伺服系统组成及原理介绍
- 永磁同步电动机的应用
- 无刷直流电机
- 直流电机毕业设计
- 直流电机转速及方向控制
摘 要 近年来,社会发展快速,而我们生活的环境也在遭受破坏,民众的环境保护意识和资源节约意识不断提高,电动车在这样的机遇下获得很大关注并蓬勃发展.之前有刷直流电机在电动车驱动装置中占据着主导地位,但有刷电机凭借机械换向器和电刷配合进行换向, ...
四旋翼飞行器无刷直流电机控制系统的设计 时间:2012-02-21 14:07:07 来源:电子设计工程 作者:孟 磊,蒋 宏,罗 俊,钟疏桐 摘要:提出了一种适用于飞行器上的无传感器型无刷直流电机的控制方案.采用ATmega8作为系统控制 ...
直流电机(D.C.machine) [编辑本段] 定义 定义输出或输入为直流电能的旋转电机,称为直流电机,它是能实现直流电能和机械能互相转换的电机.当它作电动机运行时是直流电动机,将电能转换为机械能:作发电机运行时是直流发电机,将机械能转换 ...
毕 业 设 计 ( 2015届 ) 题目: 单片机控制直流电机 完成日期: 2015 年 6 月 5 日 摘 要 近年来由于微型机的快速发展,国外交直流系统数字化已经达到实用阶段.由于以微 处理器为核心的数字控制系统硬件电路的标准化程度高, ...
微机应用课程设计报告 题 目: 基于单片机的直流电动机控制器设计 专 业: 班 级: 姓 名: 学 号: 地 点: 时 间:指导老师: 摘要 电动机作为最主要的机电能量转换装置,其应用范围已遍及国民经济的各个领域和人们的日常生活.无论是在工 ...
数控伺服系统组成及原理介绍 伺服系统是指以机械位置或角度作为控制对象的自动控制系统.它接受来自数控装置的进给指令信号,经变换.调节和放大后驱动执行件,转化为直线或旋转运动.伺服系统是数控装置(计算机) 和机床的联系环节,是数控机床的重要组成 ...
电机行业求职平台 一. 概述 众所周知,直流电动机有优良的控制性能,其机械特性和调速特性均为平行的直线,这是各类交流电动机所没有的特性.此外,直流电动机还有起动转矩大.效率高.调速方便.动态特性好等特点.优良的控制特性使直流电动机在70年代 ...
无刷直流电机 硬件结构 控制部则依需求转换输入电源频率. 电源部可以直接以直流电输入(一般为 24V) 或以交流电输入(110V/220 V) ,如果输入是交流电就得先经转换器(converter) 转成直流.不论是直流电输入或交流电输入要 ...
陕西邮电职业技术学院 通信系2013届毕业设计论 文 题 目:直流电机转速控制系统 专 业:电子信息工程 班 级:电子信息工程技术1131班 学生姓名:王文瑞 (025113115) 导师姓名:冯伟 起止时间:2013年 11月 1日 至2 ...
专业课程设计 设计报告 直流电机转速及方向的控制 班级: 专业: 电气工程及其自动化 设计人(学号): 完成日期: 成都信息工程学院控制工程学院 二零一一年十月 摘 要 当今,自动化控制系统已经在各行各业得到了广泛的应用和发展,而直流驱动控 ...