W79E833 电动自行车源程序

[复制链接]
3437|1
 楼主| millertson 发表于 2008-2-25 18:07 | 显示全部楼层 |阅读模式
程序在不同的电机上表现有一些差异,有任何问题可以与我联系;<br />若需要头文件,原理图、PCB也可以和我联系。zou_zhi_chao@hotmail.com<br /><br /> 相关链接:<a href='https://bbs.21ic.com/upfiles/img/20082/200822518643316.zip'>https://bbs.21ic.com/upfiles/img/20082/200822518643316.zip</a>

相关帖子

tyw 发表于 2008-2-25 18:16 | 显示全部楼层

好!帮lz贴一下

/*******************************************************************************<br />华邦W79E833电动自行车方案程序<br />&nbsp;作者:邹工&nbsp;&nbsp;&nbsp;13761016264&nbsp;&nbsp;<a href="mailto:zou_zhi_chao@hotmail.com">zou_zhi_chao@hotmail.com</a><br />注:程序在不同的电机上表现有一些差异,有任何问题可以与我联系;<br />若需要头文件,原理图、PCB也可以和我联系。&nbsp;<br />******************************************************************************/<br />#include&nbsp;&quot;intrins.h&quot;<br />#include&nbsp;&quot;E_BIKE_83.H&quot;<br />#include&quot;W79E834.h&quot;<br />#define&nbsp;Current_Max&nbsp;0x700<br />/*****************************************************************************<br />*&nbsp;主函数<br />******************************************************************************/<br />void&nbsp;main(void)<br />{<br />&nbsp;Init_IO();&nbsp;//&nbsp;初始化端口<br />&nbsp;Init();&nbsp;&nbsp;&nbsp;//&nbsp;初始化<br />&nbsp;H_Sample();&nbsp;//&nbsp;霍尔信号采样<br />&nbsp;EA=1;<br />&nbsp;while(1)<br />&nbsp;{&nbsp;<br />&nbsp;&nbsp;PWM_Setting();&nbsp;<br />&nbsp;&nbsp;if(Speed_REQ)<br />&nbsp;&nbsp;{PWM_ADJ();}<br />&nbsp;&nbsp;EA=0;<br />&nbsp;&nbsp;if(MotorStop_CNT&nbsp;&gt&nbsp;5)<br />&nbsp;&nbsp;{&nbsp;H_Sample();<br />&nbsp;&nbsp;&nbsp;Phase_Change();<br />&nbsp;&nbsp;&nbsp;MotorStop_CNT&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;EA=1;&nbsp;<br />&nbsp;}<br />}<br />/******************************************************************************<br />*&nbsp;I/O端口初始化<br />******************************************************************************/<br />void&nbsp;Init_IO(void)<br />{<br />&nbsp;P0M1=0xFC;//------P0端口设置------//<br />&nbsp;P0M2=0x03;<br />&nbsp;P0=0xFF;<br />&nbsp;P1M1=0x1C;//------P1端口设置------//<br />&nbsp;P1M2=0xC3;<br />&nbsp;P1=0xFF;<br />&nbsp;P2M1=0x01;&nbsp;//------P2端口设置------//<br />&nbsp;P2M2=0x5E;<br />&nbsp;P2=0xFF;<br />}<br />/******************************************************************************<br />*&nbsp;初始化程序<br />******************************************************************************/<br />void&nbsp;Init(void)<br />{<br />&nbsp;unsigned&nbsp;char&nbsp;i;&nbsp;<br />&nbsp;PWMPH=0X03;//------PWM设置------//<br />&nbsp;PWMPL=0X55;<br />&nbsp;PWM0H=0X00;<br />&nbsp;PWM0L=0X00;<br />&nbsp;PWM1H=0X00;<br />&nbsp;PWM1L=0X00;&nbsp;<br />&nbsp;PWM2H=0X00;<br />&nbsp;PWM2L=0X00;&nbsp;<br />&nbsp;PWMCON1=0XC7;&nbsp;//&nbsp;打开PWM电路,三个PWM口反相输出<br />&nbsp;PWMCON3=0xF0;<br />&nbsp;P21&nbsp;=&nbsp;0;<br />&nbsp;UT=0;VT=0;WT=0;<br />&nbsp;UB=1;VB=1;WB=1;&nbsp;//&nbsp;电机停转<br />&nbsp;while(P14==0)//-----相位检测-------//<br />&nbsp;{<br />&nbsp;&nbsp;H_Sample();&nbsp;<br />&nbsp;&nbsp;Phase_Detect();&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;}<br />&nbsp;for&nbsp;(i=0;i&lt16;i++)//------变量初始化------//<br />&nbsp;&nbsp;{Current_Buffer=0;}<br />&nbsp;for&nbsp;(i=0;i&lt20;i++)<br />&nbsp;&nbsp;{Speed_Buffer=0;}<br />&nbsp;for&nbsp;(i=0;i&lt16;i++)<br />&nbsp;&nbsp;{Voltage_Buffer=0;}<br />&nbsp;Current_P=0;<br />&nbsp;Speed_P=0;<br />&nbsp;Voltage_P=0;;<br />&nbsp;Speed_SUM=0;<br />&nbsp;Current_SUM=0;<br />&nbsp;Voltage_SUM=0;<br />&nbsp;H_State=0;<br />&nbsp;Old_State=0;<br />&nbsp;PWM_Duty=0;<br />&nbsp;Count_Current=0;<br />&nbsp;Count_Speed=0;<br />&nbsp;Count_Voltage=0;<br />&nbsp;Speed_REQ=0;<br />&nbsp;Current_REQ=0;<br />&nbsp;Voltage_REQ=0;<br />&nbsp;ADC_Ready=0;&nbsp;<br />&nbsp;PWM_Duty_min=1;&nbsp;<br />&nbsp;Motor_Speed&nbsp;=&nbsp;0x50;<br />&nbsp;Speed_Low=0x0500;<br />&nbsp;TH0=0x7A;TL0=0x7A;&nbsp;//&nbsp;设定定时器的初值&nbsp;&nbsp;&nbsp;<br />&nbsp;TMOD=0x22;&nbsp;//&nbsp;T0选为定时器(八位)模式2,TL0自动加载TH0中的初值<br />&nbsp;CKCON&=0X00;&nbsp;//&nbsp;定时器选择为1/12系统时钟<br />&nbsp;ET0=1;&nbsp;//&nbsp;允许定时器中断<br />&nbsp;TR0=1;&nbsp;//&nbsp;启动定时器<br />&nbsp;AUXR1|=0x04;&nbsp;//&nbsp;打开ADC电路<br />&nbsp;EADC=1;&nbsp;//&nbsp;允许ADC中断<br />&nbsp;ADCCON&nbsp;&=&nbsp;0xE7;<br />&nbsp;CKCON=0x60;&nbsp;//&nbsp;Settings&nbsp;of&nbsp;Timer2&nbsp;capture&nbsp;mode&nbsp;<br />&nbsp;CAPCON0=0xA8;<br />&nbsp;CAPCON1=0x00;<br />&nbsp;T2MOD=0xF0;<br />&nbsp;IE1&nbsp;|=&nbsp;0x80;&nbsp;//&nbsp;enable&nbsp;capture&nbsp;mode&nbsp;interrupt&nbsp;<br />&nbsp;IP1H&nbsp;=&nbsp;0x80;<br />&nbsp;RCAP2L&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//自动重装载低位<br />&nbsp;RCAP2H&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//自动重装载高位<br />&nbsp;IE1&nbsp;|=&nbsp;0x40;<br />&nbsp;T2CON&nbsp;|=&nbsp;0x04;//enable&nbsp;timer2<br />}<br />/******************************************************************************<br />*&nbsp;ADC中断处理程序<br />******************************************************************************/<br />void&nbsp;ADC_ISR(void)&nbsp;interrupt&nbsp;11<br />{<br />&nbsp;ADC_Ready=1;<br />&nbsp;ADCCON&nbsp;&=&nbsp;0xE7;<br />&nbsp;if(Current_REQ)&nbsp;//&nbsp;电流采样<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;Current_REQ=0;<br />&nbsp;&nbsp;&nbsp;if(Current_SUM&gtCurrent_Buffer[Current_P])<br />&nbsp;&nbsp;&nbsp;&nbsp;Current_SUM&nbsp;-=&nbsp;Current_Buffer[Current_P];<br />&nbsp;&nbsp;&nbsp;Current_Buffer[Current_P]=ADCH;<br />&nbsp;&nbsp;&nbsp;Current_SUM&nbsp;+=&nbsp;ADCH;<br />&nbsp;&nbsp;&nbsp;Current_P++;<br />&nbsp;&nbsp;&nbsp;if(Current_P&gt15)<br />&nbsp;&nbsp;&nbsp;Current_P=0;<br />&nbsp;&nbsp;}<br />&nbsp;if(Speed_REQ)&nbsp;//&nbsp;转把电压采样<br />&nbsp;{<br />&nbsp;&nbsp;Speed_REQ=0;<br />&nbsp;&nbsp;if(Speed_SUM&gtSpeed_Buffer[Speed_P])<br />&nbsp;&nbsp;&nbsp;Speed_SUM-=Speed_Buffer[Speed_P];<br />&nbsp;&nbsp;Speed_Buffer[Speed_P]=ADCH;<br />&nbsp;&nbsp;Speed_SUM+=ADCH;<br />&nbsp;&nbsp;Speed_P++;<br />&nbsp;&nbsp;if(Speed_P&nbsp;==&nbsp;14)<br />&nbsp;&nbsp;&nbsp;Speed_P=0;<br />&nbsp;}<br />&nbsp;if(Voltage_REQ)&nbsp;//&nbsp;电源电压采样<br />&nbsp;{&nbsp;<br />&nbsp;&nbsp;Voltage_REQ=0;<br />&nbsp;&nbsp;if(Voltage_SUM&gtVoltage_Buffer[Voltage_P])<br />&nbsp;&nbsp;&nbsp;Voltage_SUM&nbsp;-=&nbsp;Voltage_Buffer[Voltage_P];<br />&nbsp;&nbsp;Voltage_Buffer[Voltage_P]=ADCH;<br />&nbsp;&nbsp;Voltage_SUM&nbsp;+=&nbsp;ADCH;<br />&nbsp;&nbsp;Voltage_P++;<br />&nbsp;&nbsp;if(Voltage_P&gt15)<br />&nbsp;&nbsp;&nbsp;Voltage_P=0;<br />&nbsp;}<br />}<br />/******************************************************************************<br />*&nbsp;定时器0中断处理函数<br />******************************************************************************/<br />//&nbsp;==========&nbsp;Interrupt&nbsp;Cycle:&nbsp;100uS&nbsp;===================<br />void&nbsp;T0M1_ISR(void)&nbsp;interrupt&nbsp;1<br />{<br />&nbsp;ADC_Ready=0;<br />&nbsp;Current_REQ=1;<br />&nbsp;Speed_REQ=0;<br />&nbsp;Voltage_REQ=0;<br />&nbsp;ADCCON=3;<br />&nbsp;Count_Speed++;<br />if(Count_Speed&gt5)//17<br />&nbsp;{<br />&nbsp;&nbsp;ADCCON=1;<br />&nbsp;&nbsp;Current_REQ=0;<br />&nbsp;&nbsp;Speed_REQ=1;<br />&nbsp;&nbsp;Count_Speed=0;<br />&nbsp;&nbsp;Count_Voltage++;<br />&nbsp;&nbsp;Current_Protect();<br />&nbsp;&nbsp;if(&nbsp;Count_Voltage&gt20)//50<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;ADCCON=2;<br />&nbsp;&nbsp;&nbsp;Speed_REQ=0;Voltage_REQ=1;<br />&nbsp;&nbsp;&nbsp;Count_Voltage=0;&nbsp;<br />&nbsp;&nbsp;}&nbsp;<br />&nbsp;}<br />&nbsp;ADCCON&=0xef;ADCCON|=0x08;<br />&nbsp;EADC=1;<br />&nbsp;&nbsp;MotorStop_CNT++;<br />}<br />/******************************************************************************<br />*&nbsp;定时器2捕获模式中断处理函数<br />******************************************************************************/<br />void&nbsp;Timer2_ISR()&nbsp;interrupt&nbsp;13&nbsp;using&nbsp;2<br />{<br />&nbsp;EA&nbsp;=&nbsp;0;<br />&nbsp;Motor_Speed&nbsp;=&nbsp;TH2;<br />&nbsp;TH2&nbsp;=&nbsp;0;<br />&nbsp;TL2&nbsp;=&nbsp;0;<br />&nbsp;MotorStop_CNT&nbsp;=&nbsp;0;<br />&nbsp;H_Sample();&nbsp;//&nbsp;霍尔信号采集<br />&nbsp;Phase_Change();&nbsp;//&nbsp;相位变换<br />&nbsp;EA&nbsp;=&nbsp;1;<br />}<br />/******************************************************************************<br />*&nbsp;定时器2溢出中断处理函数<br />******************************************************************************/<br />void&nbsp;T2_ISR()&nbsp;interrupt&nbsp;8<br />{<br />&nbsp;TF2&nbsp;=&nbsp;0;<br />&nbsp;Motor_Speed&nbsp;=&nbsp;0x50;<br />&nbsp;Block_Detect();&nbsp;//&nbsp;堵转保护<br />}<br />/******************************************************************************<br />*&nbsp;定时器3中断处理函数,采取捕获模式<br />******************************************************************************/<br />void&nbsp;H_Sample(void)<br />{<br />&nbsp;CAPCON1&nbsp;&=&nbsp;0xF8;<br />&nbsp;H1=P12;<br />&nbsp;H2=P20;<br />&nbsp;H3=P07;<br />&nbsp;H_State=H1&lt&lt2;<br />&nbsp;H_State+=H2&lt&lt1;<br />&nbsp;H_State+=H3;<br />}<br />/******************************************************************************<br />*&nbsp;根据电机霍尔换向信号给出相应控制信号<br />*&nbsp;上桥臂:VT,UT,WT<br />*&nbsp;下桥臂:VB,UB,WB<br />******************************************************************************/<br />void&nbsp;Phase_Change(void)<br />{<br />&nbsp;if(PWM_Duty_min)<br />&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;UT=0;VT=0;WT=0;<br />&nbsp;&nbsp;UB=1;VB=1;WB=1;&nbsp;//&nbsp;电机停转<br />&nbsp;&nbsp;PWM_Duty_Max&nbsp;=&nbsp;0;<br />&nbsp;}&nbsp;<br />&nbsp;else//========//<br />&nbsp;{<br />&nbsp;&nbsp;switch(H_State)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;case&nbsp;6:&nbsp;//&nbsp;110,V3,V4<br />&nbsp;&nbsp;&nbsp;&nbsp;VT=0;UT=0;VB=1;WB=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;WT=1;UB=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;case&nbsp;2:&nbsp;//&nbsp;010,V4,V5<br />&nbsp;&nbsp;&nbsp;case&nbsp;7:<br />&nbsp;&nbsp;&nbsp;&nbsp;UT=0;WT=0;VB=1;WB=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;VT=1;UB=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;case&nbsp;3:&nbsp;//&nbsp;011,V5,V6&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;UT=0;WT=0;UB=1;VB=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;VT=1;WB=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;case&nbsp;1:&nbsp;//&nbsp;001,V6,V1<br />&nbsp;&nbsp;&nbsp;&nbsp;WT=0;VT=0;UB=1;VB=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;UT=1;WB=0;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;case&nbsp;5:&nbsp;//&nbsp;101,V1,V2<br />&nbsp;&nbsp;&nbsp;case&nbsp;0:<br />&nbsp;&nbsp;&nbsp;&nbsp;WT=0;VT=0;UB=1;WB=1;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VB=0;UT=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;case&nbsp;4:&nbsp;//&nbsp;100,V2,V3<br />&nbsp;&nbsp;&nbsp;&nbsp;UT=0;VT=0;UB=1;WB=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;WT=1;VB=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;case&nbsp;9:<br />&nbsp;&nbsp;&nbsp;&nbsp;UT=0;VT=0;WT=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;UB=1;VB=1;WB=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;default:break;<br />&nbsp;&nbsp;}<br />&nbsp;}<br />}&nbsp;<br />//-------检测--------//<br />void&nbsp;Phase_Detect(void)<br />{&nbsp;<br />&nbsp;WT=0;UT=0;VT=0;<br />&nbsp;switch(H_State)<br />&nbsp;{<br />&nbsp;&nbsp;case&nbsp;6:&nbsp;//&nbsp;110,V3,V4<br />&nbsp;&nbsp;&nbsp;&nbsp;UB=0;VB=1;WB=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;case&nbsp;2:&nbsp;//&nbsp;010,V4,V5<br />&nbsp;&nbsp;case&nbsp;7:<br />&nbsp;&nbsp;&nbsp;&nbsp;UB=0;VB=1;WB=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;case&nbsp;3:&nbsp;//&nbsp;011,V5,V6<br />&nbsp;&nbsp;&nbsp;&nbsp;UB=1;VB=1;WB=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;case&nbsp;1:&nbsp;//&nbsp;001,V6,V1<br />&nbsp;&nbsp;&nbsp;&nbsp;UB=1;VB=1;WB=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;case&nbsp;5:&nbsp;//&nbsp;101,V1,V2<br />&nbsp;&nbsp;case&nbsp;0:<br />&nbsp;&nbsp;&nbsp;&nbsp;UB=1;VB=0;WB=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;case&nbsp;4:&nbsp;//&nbsp;100,V2,V3<br />&nbsp;&nbsp;&nbsp;&nbsp;UB=1;VB=0;WB=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;default:break;<br />&nbsp;}<br />}<br />/******************************************************************************<br />*&nbsp;PWM值转换程序<br />*&nbsp;将转把电压ADC值转换为PWMn的值<br />******************************************************************************/<br />void&nbsp;PWM_ADJ(void)<br />{<br />&nbsp;if(Speed_SUM&nbsp;&lt&nbsp;Speed_Low)<br />&nbsp;{&nbsp;//---没有转把电压,由Speed_Low的值决定转把电压最小值---//&nbsp;&nbsp;<br />&nbsp;&nbsp;PWM_Duty_Max&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;PWM_Duty_min=1;&nbsp;//&nbsp;停转标志<br />&nbsp;&nbsp;Block_Flag&nbsp;=&nbsp;0;&nbsp;<br />&nbsp;&nbsp;Block_CNT&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;}<br />&nbsp;else&nbsp;if(P14&nbsp;==&nbsp;1)<br />&nbsp;{&nbsp;//---转把电压有效---//&nbsp;&nbsp;<br />&nbsp;&nbsp;PWM_Duty_Max=Speed_SUM-Speed_Low;&nbsp;//&nbsp;对应转把电压的最大计算值<br />&nbsp;&nbsp;if(PWM_Duty_min)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;if(!Block_Flag)&nbsp;PWM_Duty_min&nbsp;=&nbsp;0;&nbsp;//&nbsp;退出无有效转把电压状况<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;if(PWM_Duty_Max&gt0x06F0)PWM_Duty_Max&nbsp;=&nbsp;0x06E8;&nbsp;//&nbsp;最大值限制<br />&nbsp;&nbsp;if(Block_Flag)PWM_Duty_Max&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;PWM_Duty_Max=PWM_Duty_Max&gt&gt1;&nbsp;//&nbsp;由转把电压转换为PWMn的值<br />&nbsp;}&nbsp;<br />}<br />/******************************************************************************<br />*&nbsp;电流闭环控制器<br />******************************************************************************/<br />void&nbsp;Current_Protect(void)<br />{<br />&nbsp;if(Current_SUM&nbsp;&lt&nbsp;Current_Max)&nbsp;//&nbsp;&nbsp;过流保护<br />&nbsp;{<br />&nbsp;&nbsp;if(PWM_Duty&nbsp;&lt&nbsp;PWM_Duty_Max)<br />&nbsp;&nbsp;&nbsp;&nbsp;PWM_Duty&nbsp;++;&nbsp;//&nbsp;转把电压相对应的PWMn值缓慢增加<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;if(PWM_Duty&nbsp;&gt&nbsp;3)<br />&nbsp;&nbsp;&nbsp;&nbsp;PWM_Duty&nbsp;--;&nbsp;//&nbsp;转把电压相对应的PWMn值缓慢减小<br />&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;PWM_Duty&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;}&nbsp;<br />&nbsp;}<br />&nbsp;else&nbsp;if(Current_SUM&nbsp;&gt&nbsp;Current_Max+5)<br />&nbsp;{<br />&nbsp;&nbsp;if(PWM_Duty&nbsp;&gt&nbsp;2)<br />&nbsp;&nbsp;&nbsp;&nbsp;PWM_Duty&nbsp;-=&nbsp;2;<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;PWM_Duty=0;<br />&nbsp;}<br />&nbsp;PWM_Duty_H&nbsp;=&nbsp;PWM_Duty&gt&gt8;<br />&nbsp;PWM_Duty_L&nbsp;=&nbsp;(PWM_Duty&nbsp;&&nbsp;0x0FF);&nbsp;//&nbsp;对应PWMn的值(高、低位)<br />}<br />/******************************************************************************<br />*&nbsp;堵转保护程序<br />******************************************************************************/<br />void&nbsp;Block_Detect(void)<br />{<br />&nbsp;if(Current_SUM&nbsp;&gt&nbsp;Current_Max-0x1A0)<br />&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;Block_CNT++;&nbsp;<br />&nbsp;}<br />&nbsp;if(Current_SUM&lt0x300)<br />&nbsp;&nbsp;Block_CNT&nbsp;=&nbsp;0;<br />&nbsp;if(Block_CNT&nbsp;&gt=&nbsp;10)<br />&nbsp;{<br />&nbsp;&nbsp;EA&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;UT=0;VT=0;WT=0;<br />&nbsp;&nbsp;UB=1;VB=1;WB=1;&nbsp;//&nbsp;电机停转<br />&nbsp;&nbsp;PWM_Duty_min&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;Block_Flag&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;PWM_Duty&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;PWM_Duty_Max&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;PWM_Duty_H&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;PWM_Duty_L&nbsp;=&nbsp;0;&nbsp;&nbsp;<br />&nbsp;&nbsp;EA&nbsp;=&nbsp;1;<br />&nbsp;}<br />}<br />/******************************************************************************<br />*&nbsp;PWM设定<br />******************************************************************************/<br />void&nbsp;PWM_Setting(void)<br />{&nbsp;<br />&nbsp;PWM0H=PWM_Duty_H;<br />&nbsp;PWM0L=PWM_Duty_L;<br />&nbsp;PWM1H=PWM_Duty_H;<br />&nbsp;PWM1L=PWM_Duty_L;&nbsp;<br />&nbsp;PWM2H=PWM_Duty_H;<br />&nbsp;PWM2L=PWM_Duty_L;<br />&nbsp;PWMCON1&nbsp;|=&nbsp;0x40;<br />}<br />/******************************************************************************<br />******************************************************************************/
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部