电调制作附程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

航模电调制作及程序

完工效果图QQ:99246665 电路原理图

PCB布局

C语言程序

/*############################################################################ + 无刷电机控制器

+ A TMEGA8 At 8MHz

+ (c) 01.2007 Holger Buss

+ 只作私人用途

+ 准确性没有保证

+ 未经我同意不得商业使用

+ 该代码使用BL_Ctrl 1.0版已经开发的硬件

/############################################################################*/ #include "main.h"

unsigned int PWM = 0;

unsigned int Strom = 0; //ca. in 0,1A //电流

unsigned char Strom_max = 0; //最大电流

unsigned char Mittelstrom = 0; //平均电流

unsigned int Drehzahl = 0; // in 100UPM 60 = 6000 //转速

unsigned int KommutierDelay = 10; //换向延时

unsigned int I2C_Timeout = 0;

unsigned char SIO_Timeout = 0;

unsigned int SollDrehzahl = 0; //额定转速,计算转速

unsigned int IstDrehzahl = 0; //实际转速

unsigned int DrehZahlTabelle[256];//vorberechnete Werte zur Drehzahlerfassung //转速表unsigned char ZeitFuerBerechnungen = 1; //计算所用时间

unsigned char MotorAnwerfen = 0; //电机启动,(加速

unsigned char MotorGestoppt = 1; //电机停止

unsigned char MaxPWM = MAX_PWM;

unsigned int CntKommutierungen = 0; //换向计数

unsigned int SIO_Drehzahl = 0; //串口速度

unsigned char ZeitZumAdWandeln = 1; //到AD转换的时间

//############################################################################ //

void SetPWM(void)

//############################################################################ {

unsigned char tmp_pwm;

tmp_pwm = PWM;

if(tmp_pwm > MaxPWM) // 电流限制

{

tmp_pwm = MaxPWM;

PORTC |= ROT; //红色LED亮

}

if(Strom > MAX_STROM) // 电流限制

{

OCR1A = 0; OCR1B = 0; OCR2 = 0;

PORTC |= ROT; //红色LED亮

Strom--;

}

else

{

#ifdef _32KHZ

OCR1A = tmp_pwm;

OCR1B = tmp_pwm;

OCR2 = tmp_pwm;

#endif

#ifdef _16KHZ //16kHZ时T1用的是9位快速的pwm,所以赋值要加倍,T2用的是相位修正,不用加倍

OCR1A = 2 * (int)tmp_pwm;

OCR1B = 2 * (int)tmp_pwm;

OCR2 = tmp_pwm;

#endif

}

}

//############################################################################ //

void PWM_Init(void) //PWM初始化

//############################################################################ {

PWM_OFF;

TCCR1B = (1 << CS10) | (0 << CS11) | (0 << CS12) | (1 << WGM12) |

(0 << WGM13) | (0<< ICES1) | (0 << ICNC1);

// T/C1 无预分频,下降沿触发输入捕捉,不使用输入捕捉噪声抑制功能,

// 9位快速PWM,比较匹配时清零OC1A/OC1B(输出低电平)

}

//############################################################################ //

void Wait(unsigned char dauer) //dauer 持续时间

//############################################################################ {

dauer = (unsigned char)TCNT0 + dauer;

while((TCNT0 - dauer) & 0x80);

}

//############################################################################ //

void Anwerfen(unsigned char pwm) //启动马达

//############################################################################ /*补充注释:

相关文档
最新文档