电调制作附程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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) //启动马达
//############################################################################ /*补充注释: