电调制作附程序Word文档下载推荐.docx
- 文档编号:21794245
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:14
- 大小:961.02KB
电调制作附程序Word文档下载推荐.docx
《电调制作附程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《电调制作附程序Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
//实际转速
unsignedintDrehZahlTabelle[256];
//vorberechneteWertezurDrehzahlerfassung//转速表
unsignedcharZeitFuerBerechnungen=1;
//计算所用时间
unsignedcharMotorAnwerfen=0;
//电机启动,(加速
unsignedcharMotorGestoppt=1;
//电机停止
unsignedcharMaxPWM=MAX_PWM;
unsignedintCntKommutierungen=0;
//换向计数
unsignedintSIO_Drehzahl=0;
//串口速度
unsignedcharZeitZumAdWandeln=1;
//到AD转换的时间
//############################################################################
//
voidSetPWM(void)
{
unsignedchartmp_pwm;
tmp_pwm=PWM;
if(tmp_pwm>
MaxPWM)//电流限制
{
tmp_pwm=MaxPWM;
PORTC|=ROT;
//红色LED亮
}
if(Strom>
MAX_STROM)//电流限制
OCR1A=0;
OCR1B=0;
OCR2=0;
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;
}
voidPWM_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(输出低电平)
voidWait(unsignedchardauer)//dauer持续时间
dauer=(unsignedchar)TCNT0+dauer;
while((TCNT0-dauer)&
0x80);
voidAnwerfen(unsignedcharpwm)//启动马达
/*补充注释:
开环启动算法
*/
unsignedlongtimer=300,i;
DISABLE_SENSE_INT;
//关闭模拟比较器中断
PWM=5;
SetPWM();
//T1和T2定时计数器赋值,设置pwm占空比
Manuell();
/*补充注释:
开环顺序换向算法,注意换向时必须同步修改比较器端口及触发沿
以便在反相感生电动势到达切换条件时,自动切换到闭环运转状态
*///////////////////////////////////////////////////
Delay_ms(200);
PWM=pwm;
while
(1)
for(i=0;
i<
timer;
i++)
//if(!
UebertragungAbgeschlossen)SendUart();
//UebertragungAbgeschlossen完成转换
//elseDatenUebertragung();
//数据传输
Wait(100);
//warten等待
timer-=timer/15+1;
if(timer<
25){if(TEST_MANUELL)timer=25;
elsereturn;
Phase++;
Phase%=6;
AdConvert();
//测量电流
if(SENSE)//如果模拟比较器中断标志置位,绿灯亮
PORTD^=GRUEN;
unsignedcharSollwertErmittlung(void)//设定值的测量值
staticunsignedintsollwert=0;
//unsignedintppm;
if(!
I2C_Timeout)//beiErreichenvon0istderWertung黮tig
if(SIO_Timeout)//esgibtg黮tigeSIO-Daten
//sollwert=(MAX_PWM*(unsignedint)SIO_Sollwert)/200;
//skalierenauf0-200=0-255
else
/*
if(PPM_Timeout)//esgibtg黮tigePPM-Daten
ppm=PPM_Signal;
if(ppm>
300)ppm=0;
//ung黮tigesSignal
200)ppm=200;
if(ppm<
=MIN_PPM)sollwert=0;
sollwert=(int)MIN_PWM+((MAX_PWM-MIN_PWM)*(ppm-MIN_PPM))/(190-MIN_PPM);
PORTC&
=~ROT;
else//Keing黮tigerSollwert
{*/
TEST_SCHUB){if(sollwert)sollwert--;
/*}*/
else//I2C-Datensindg黮tig
sollwert=I2C_RXBuffer;
if(sollwert>
MAX_PWM)sollwert=MAX_PWM;
return(sollwert);
//主程序
intmain(void)
charaltPhase=0;
inttest=0;
unsignedintMinUpmPulse,Blink,TestschubTimer;
unsignedintBlink2,MittelstromTimer,DrehzahlMessTimer,MotorGestopptTimer;
DDRC=0x08;
//PC3输出,控制红色led
PORTC=0x08;
//PC3输出高电平,红色led亮
DDRD=0xBA;
//10111010A-B-C-配置为输出,TXD,LED_GRN(PD7)配置为输出,MITTEL/RXD/INT0为输入
PORTD=0x80;
//LED_GRN高电平,绿色灯亮
DDRB=0x0E;
////A+B+C+配置为输出,其他为输入,ppm的ICP为输入
PORTB=0x31;
//I2C总线(SDA/SCL)为高电平,ICP上拉电阻使能,其他低电平,因为有三极管截止,所以p沟道不导通
//UART_Init();
Timer0_Init();
sei();
//打开全局中断
//绿灯闪烁次数标识的电机地址,用于4轴的4个电调判断
for(test=0;
test<
5;
test++)
if(test==MOTORADRESSE)PORTD|=GRUEN;
//绿灯亮
Delay_ms(150);
PORTD&
=~GRUEN;
//绿灯灭
Delay_ms(250);
Delay_ms(500);
PWM_Init();
//InitIC2_Slave(0x50);
InitPPM();
Blink=SetDelay(101);
Blink2=SetDelay(102);
MinUpmPulse=SetDelay(103);
//最小转速脉冲
MittelstromTimer=SetDelay(254);
//中点电流计时器
DrehzahlMessTimer=SetDelay(1005);
//测速计时器
TestschubTimer=SetDelay(1006);
//推力测试计时器
while(!
CheckDelay(MinUpmPulse));
PORTD|=GRUEN;
//LED_GRN高电平,绿灯亮
PWM=0;
SFIOR=0x08;
//模拟比较器多路复用器使能
ADMUX=1;
//ADC1作为模拟比较器的输入负极
MinUpmPulse=SetDelay(10);
//DebugOut.Analog[1]=1;
//PPM_Signal=0;
//zumTestderHardware;
MotordrehtmitkonstanterDrehzahlohneRegelung///测试硬件,马达转速不受控制
if(TEST_MANUELL)Anwerfen(TEST_MANUELL);
//kommtvondortnichtwieder//到再次没有重建时
//Anwerfen:
启动,加速
while
(1)
TEST_SCHUB)PWM=SollwertErmittlung();
//额定值计算
//I2C_TXBuffer=PWM;
//Antwort黚erI2C-Bus
if(MANUELL_PWM)PWM=MANUELL_PWM;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(Phase!
=altPhase)//esgabeineKommutierungimInterrupt如果相位不等于旧的相位,换向
MotorGestoppt=0;
ZeitFuerBerechnungen=0;
//direktnacheinerKommutierungistZeit直接在某个之后计算实际时间
MinUpmPulse=SetDelay(50);
//Timeout,fallseinMotorstehenbleibt暂停,电机停止
altPhase=Phase;
//旧相位=新相位
PWM)//Sollwert==0
MotorAnwerfen=0;
//keinStartversuch无启动试验
//计算所用的时间
//nach1,5SekundendenMotoralsgestopptbetrachten在1,5瞬间之后电机停止检测
if(CheckDelay(DrehzahlMessTimer))
MotorGestoppt=1;
//电机停止标志位?
STEUER_OFF;
if(MotorGestoppt)MotorAnwerfen=1;
//Startversuch启动试验
MotorGestopptTimer=SetDelay(1500);
if(MotorGestoppt&
&
!
TEST_SCHUB)PWM=0;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ZeitFuerBerechnungen++)//计算所用的时间
if(MotorGestoppt)PORTD|=GRUEN;
//elsePORTD&
//LED_GRN高电平,灯亮,否则灭
if(SIO_DEBUG)
//DebugAusgaben();
//welcheWertesollenangezeigtwerden?
//BerechnendesMittlerenStromszur(langsamen)Strombegrenzung计算现在的平均电流(缓慢的)电流限制
if(CheckDelay(MittelstromTimer))
MittelstromTimer=SetDelay(50);
//alle50ms每个50ms
if(Mittelstrom<
Strom)Mittelstrom++;
//MittelwertdesStromsbilden平均电流形成
elseif(Mittelstrom>
Strom)Mittelstrom--;
if(Mittelstrom>
LIMIT_STROM)//StromamLimit?
MaxPWM--;
//danndieMaximalePWMherunterfahren最大限度pwm关闭
//#defineROT0x08,LED_ROT亮
if(MaxPWM<
MAX_PWM)MaxPWM++;
if(CheckDelay(DrehzahlMessTimer))//Ist-Drehzahlbestimmen实际转速测定
DrehzahlMessTimer=SetDelay(10);
SIO_Drehzahl=(6*CntKommutierungen)/(POLANZAHL/2);
//管子换向
CntKommutierungen=0;
//if(PPM_Timeout==0)//keinePPM-Signale
//ZeitZumAdWandeln=1;
if(CheckDelay(TestschubTimer))
TestschubTimer=SetDelay(1500);
if(TEST_SCHUB)//#defineTEST_SCHUB0不执行
switch(test)
case0:
PWM=50;
test++;
break;
case1:
PWM=130;
case2:
PWM=60;
case3:
PWM=140;
case4:
PWM=150;
test=0;
default:
//MotorStehengeblieben电机停止遗留
if((CheckDelay(MinUpmPulse)&
SIO_Drehzahl==0)||MotorAnwerfen)
//电机停止标志1
MinUpmPulse=SetDelay(100);
if(MotorAnwerfen)
//LED_ROT灭
//电机启动标志0
Anwerfen(10);
//启动
//LED_GRN亮
//电机停止标志0
Phase--;
PWM=1;
SENSE_TOGGLE_INT;
//输出电平变化就中断
ENABLE_SENSE_INT;
//开比较器中断
//kurzSynchronisieren
PWM=10;
MinUpmPulse=SetDelay(200);
//kurzDurchstarten
MinUpmPulse=SetDelay(1000);
altPhase=7;
}//ZeitFuerBerechnungen
}//while
(1)-Hauptschleife
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 调制 程序