⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bldcm.lst

📁 三相无刷电机的PWM控制
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0124) 	 Shut_PWMAB();   //关上桥臂 1,2
    00A5 DFCA      RCALL	_Shut_PWMAB
(0125) 	 Start_PWMC();  //开上桥臂PWMC
    00A6 DFCE      RCALL	_Start_PWMC
(0126) 	 PORTB = PORTB|0x02;      //开下桥臂4
    00A7 9A29      SBI	0x05,1
    00A8 9508      RET
(0127) }
(0128) 
(0129) void phase_three_five(void)
(0130) {
(0131)  	 PORTB = PORTB&0xF5;  //关下桥臂6,4
_phase_three_five:
    00A9 B185      IN	R24,0x05
    00AA 7F85      ANDI	R24,0xF5
    00AB B985      OUT	0x05,R24
(0132) 	 Shut_PWMAB();   //关上桥臂 1,2
    00AC DFC3      RCALL	_Shut_PWMAB
(0133) 	 Start_PWMC();  //开上桥臂PWMC
    00AD DFC7      RCALL	_Start_PWMC
(0134) 	 PORTB = PORTB|0x04;      //开下桥臂5
    00AE 9A2A      SBI	0x05,2
    00AF 9508      RET
(0135) }
(0136) 
(0137) 
(0138) 
(0139) void uart0_init(void)
(0140) {
(0141)  UCSR0B = 0x00; //disable while setting baud rate
_uart0_init:
    00B0 2422      CLR	R2
    00B1 922000C1  STS	0xC1,R2
(0142)  UCSR0A = 0x00;
    00B3 922000C0  STS	0xC0,R2
(0143)  UCSR0C = 0x06; //8位数据传送
    00B5 E086      LDI	R24,6
    00B6 938000C2  STS	0xC2,R24
(0144)  UBRR0L = 0x33; //set baud rate lo
    00B8 E383      LDI	R24,0x33
    00B9 938000C4  STS	0xC4,R24
(0145)  UBRR0H = 0x00; //set baud rate hi
    00BB 922000C5  STS	0xC5,R2
(0146)  UCSR0B = 0x18; //
    00BD E188      LDI	R24,0x18
    00BE 938000C1  STS	0xC1,R24
    00C0 9508      RET
(0147) }
(0148) 
(0149) void init_devices(void)
(0150) {
(0151)       //stop errant interrupts until set up
(0152)      CLI(); //disable all interrupts
_init_devices:
    00C1 94F8      BCLR	7
(0153)      port_init();
    00C2 DF77      RCALL	_port_init
(0154)      timer0_init();
    00C3 DF81      RCALL	_timer0_init
(0155)      timer2_init();
    00C4 DF88      RCALL	_timer2_init
(0156) 	 uart0_init();
    00C5 DFEA      RCALL	_uart0_init
(0157) 
(0158)      MCUCR = 0x00;
    00C6 2422      CLR	R2
    00C7 BE25      OUT	0x35,R2
(0159)      EICRA = 0x00; //extended ext ints
    00C8 92200069  STS	0x69,R2
(0160)  	 EIMSK = 0x00;
    00CA BA2D      OUT	0x1D,R2
(0161)  
(0162)  	 TIMSK0 = 0x00; //timer 0 interrupt sources
    00CB 9220006E  STS	0x6E,R2
(0163)  	 TIMSK1 = 0x00; //timer 1 interrupt sources
    00CD 9220006F  STS	0x6F,R2
(0164)  	 TIMSK2 = 0x00; //timer 2 interrupt sources
    00CF 92200070  STS	0x70,R2
(0165)  
(0166)  	 PCMSK0 = 0x00; //pin change mask 0 
    00D1 9220006B  STS	0x6B,R2
(0167)  	 PCMSK1 = 0x00; //pin change mask 1 
    00D3 9220006C  STS	0x6C,R2
(0168)  	 PCMSK2 = 0x00; //pin change mask 2
    00D5 9220006D  STS	0x6D,R2
(0169)  	 PCICR = 0x00; //pin change enable 
    00D7 92200068  STS	0x68,R2
(0170)  	 PRR = 0x00; //power controller
    00D9 92200064  STS	0x64,R2
(0171)  	 SEI(); //re-enable interrupts
    00DB 9478      BSET	7
    00DC 9508      RET
(0172)  	 //all peripherals are now initialized
(0173) }
(0174) 
(0175) 
(0176) void USART_Transmit(unsigned char data)
(0177) {
(0178)      //等待发送器缓冲为空
(0179)  	 while(!(UCSR0A&(1<<UDRE0)))
_USART_Transmit:
  data                 --> R16
    00DD 902000C0  LDS	R2,0xC0
    00DF FE25      SBRS	R2,5
    00E0 CFFC      RJMP	_USART_Transmit
(0180) 	 ;
(0181) 	 
(0182) 	 //发送数据
(0183) 	 UDR0 = data;
    00E1 930000C6  STS	0xC6,R16
    00E3 9508      RET
(0184) }
(0185) 
(0186) 
(0187) unsigned char USART_Receive(void)
(0188) {
(0189)     //等待接收数据
(0190)  	while(!(UCSR0A&(1<<RXC0)))
_USART_Receive:
    00E4 902000C0  LDS	R2,0xC0
    00E6 FE27      SBRS	R2,7
    00E7 CFFC      RJMP	_USART_Receive
(0191) 	;
(0192) 	return UDR0;
    00E8 910000C6  LDS	R16,0xC6
    00EA 9508      RET
(0193) }
(0194) 
(0195) void set_speed(unsigned char speed)
(0196) {
(0197)  	 OCR0A = speed;
_set_speed:
  speed                --> R16
    00EB BD07      OUT	0x27,R16
(0198) 	 OCR0B = speed;
    00EC BD08      OUT	0x28,R16
(0199) 	 OCR2B = speed;
    00ED 930000B4  STS	0xB4,R16
    00EF 9508      RET
(0200) }
(0201) 
(0202) void main(void)
(0203) {
(0204)      unsigned int Pos_Val,Speed_Val;
(0205) 	  init_devices();
_main:
  Speed_Val            --> R20
  Pos_Val              --> R22
    00F0 DFD0      RCALL	_init_devices
    00F1 C033      RJMP	0x0125
(0206) 	  //Start_PWMA_Close_PWMB();
(0207) 	// Start_PWMC();
(0208) 	// Start_PWMAB();
(0209) 	  
(0210) 	 /* while(1)
(0211) 	  {
(0212) 	   				Speed_Val = USART_Receive();
(0213) 							set_speed(Speed_Val);
(0214) 	  }*/
(0215) 	  while(1)
(0216) 	  {
(0217) 
(0218) 			if((UCSR0A&0x80)!=0)
    00F2 902000C0  LDS	R2,0xC0
    00F4 FE27      SBRS	R2,7
    00F5 C007      RJMP	0x00FD
(0219) 			{
(0220) 						 	Speed_Val = UDR0;
    00F6 914000C6  LDS	R20,0xC6
    00F8 2755      CLR	R21
(0221) 						 	OCR0A = Speed_Val;
    00F9 BD47      OUT	0x27,R20
(0222) 							OCR0B = Speed_Val;
    00FA BD48      OUT	0x28,R20
(0223) 							OCR2B = Speed_Val;
    00FB 934000B4  STS	0xB4,R20
(0224) 			}
(0225) 			Pos_Val = PINC&0x07;
    00FD B166      IN	R22,0x06
    00FE 2777      CLR	R23
    00FF 7067      ANDI	R22,7
    0100 7070      ANDI	R23,0
(0226) /* //   500w轮毂电机			
(0227) 			switch(Pos_Val)
(0228) 			{
(0229) 			    case 3:
(0230) 					 phase_three_five();
(0231) 				break;
(0232) 				case 2:
(0233) 					 phase_one_five();
(0234) 				break;
(0235) 				case 6:
(0236) 					 phase_one_six();
(0237) 				break;
(0238) 				case 4:
(0239) 					 phase_two_six();
(0240) 				break;
(0241) 				case 5:
(0242) 					 phase_two_four();
(0243) 				break;
(0244) 				case 1:
(0245) 					 phase_three_four();
(0246) 				break;		
(0247) 				default:
(0248) 				break;
(0249) 				
(0250) 			}
(0251) */			
(0252) 
(0253) //   2.2kw电机			
(0254) 			switch(Pos_Val)
    0101 3061      CPI	R22,1
    0102 E0E0      LDI	R30,0
    0103 077E      CPC	R23,R30
    0104 F0A9      BEQ	0x011A
    0105 3062      CPI	R22,2
    0106 E0E0      LDI	R30,0
    0107 077E      CPC	R23,R30
    0108 F0A9      BEQ	0x011E
    0109 3063      CPI	R22,3
    010A E0E0      LDI	R30,0
    010B 077E      CPC	R23,R30
    010C F079      BEQ	0x011C
    010D 3064      CPI	R22,4
    010E E0E0      LDI	R30,0
    010F 077E      CPC	R23,R30
    0110 F089      BEQ	0x0122
    0111 3065      CPI	R22,5
    0112 E0E0      LDI	R30,0
    0113 077E      CPC	R23,R30
    0114 F079      BEQ	0x0124
    0115 3066      CPI	R22,6
    0116 E0E0      LDI	R30,0
    0117 077E      CPC	R23,R30
    0118 F039      BEQ	0x0120
    0119 C00B      RJMP	0x0125
(0255) 			{
(0256) 			    case 1:  
(0257) 					 phase_three_five();   //C+   B-
    011A DF8E      RCALL	_phase_three_five
(0258) 				break;
    011B C009      RJMP	0x0125
(0259) 				case 3:
(0260) 					 phase_one_five();     //A+   B-
    011C DF69      RCALL	_phase_one_five
(0261) 				break;
    011D C007      RJMP	0x0125
(0262) 				case 2:
(0263) 					 phase_one_six();      //A+   C-
    011E DF6E      RCALL	_phase_one_six
(0264) 				break;
    011F C005      RJMP	0x0125
(0265) 				case 6:
(0266) 					 phase_two_six();      //B+   C-
    0120 DF73      RCALL	_phase_two_six
(0267) 				break;
    0121 C003      RJMP	0x0125
(0268) 				case 4:
(0269) 					 phase_two_four();      //B+   A-
    0122 DF78      RCALL	_phase_two_four
(0270) 				break;
    0123 C001      RJMP	0x0125
(0271) 				case 5:
(0272) 					 phase_three_four();    //C+   B-
FILE: <library>
    0124 DF7D      RCALL	_phase_three_four
    0125 CFCC      RJMP	0x00F2
    0126 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -