电调制作附程序

2019-04-21 14:19

航模电调制作及程序

完工效果图 QQ:99246665

电路原理图

PCB布局

C语言程序

/*############################################################################ + 无刷电机控制器 + ATMEGA8 At 8MHz + (c) 01.2007 Holger Buss + 只作私人用途

+ 准确性没有保证

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

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

/############################################################################*/

#include \

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) //启动马达

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

开环启动算法

*/ {

unsigned long timer = 300,i;

DISABLE_SENSE_INT; //关闭模拟比较器中断 PWM = 5;

SetPWM();//T1和T2定时计数器赋值,设置pwm占空比 Manuell();

/*补充注释:

开环顺序换向算法,注意换向时必须同步修改比较器端口及触发沿 以便在反相感生电动势到达切换条件时,自动切换到闭环运转状态 */////////////////////////////////////////////////// Delay_ms(200); PWM = pwm; while(1) {

for(i=0;i

//if(!UebertragungAbgeschlossen) SendUart(); //UebertragungAbgeschlossen完成转换

//else DatenUebertragung(); //数据传输 Wait(100); // warten 等待

}

timer-= timer/15+1;

if(timer < 25) { if(TEST_MANUELL) timer = 25; else return; }

Manuell();

Phase++; Phase %= 6;

AdConvert(); //测量电流

PWM = pwm; SetPWM();

if(SENSE) //如果模拟比较器中断标志置位,绿灯亮 {

PORTD ^= GRUEN; } } }

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

unsigned char SollwertErmittlung(void) //设定值的测量值

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


电调制作附程序.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:菱形挂篮计算书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: