用軟件PWM怎么樣做到恒壓充電啊!這是我現在做的,想不出來啊!
用單片機的軟件PWM怎么樣控制mos的導通頻率,即做到定頻率,變duty的方波輸出,來做到恒壓啊,就像3842或者3843一樣,當電壓升高,就縮duty;當電壓下降,就升duty!!!
全部回復(116)
正序查看
倒序查看
@vssv
9454的PWM挺好用,不用外部晶振就可以做到40KHzPID算法控制,我沒使用中斷PWM_Init;fosc/1,reloadfrom8bitcounter,Disableinterrupt,ldPWMCON,#11001001bldPWMDATA,#04hret
;-------------------------------------------------------------
;
PWM_TurnOn
and P0CONH, #11001111b
or P0CONH, #00010000b
or PWMCON, #(PWMCON_CLEAR | PWMCON_START)
ret
;-------------------------------------------------------------
;
PWM_TurnOff
and PWMCON, #~(PWMCON_START)
and P0CONH, #11001111b
or P0CONH, #00100000b
and P0DATA, #10111111b
ld P0, P0DATA
ret
;
PWM_TurnOn
and P0CONH, #11001111b
or P0CONH, #00010000b
or PWMCON, #(PWMCON_CLEAR | PWMCON_START)
ret
;-------------------------------------------------------------
;
PWM_TurnOff
and PWMCON, #~(PWMCON_START)
and P0CONH, #11001111b
or P0CONH, #00100000b
and P0DATA, #10111111b
ld P0, P0DATA
ret
0
回復
@vssv
;-------------------------------------------------------------;PWM_TurnOnandP0CONH,#11001111borP0CONH,#00010000borPWMCON,#(PWMCON_CLEAR|PWMCON_START)ret;-------------------------------------------------------------;PWM_TurnOffandPWMCON,#~(PWMCON_START)andP0CONH,#11001111borP0CONH,#00100000bandP0DATA,#10111111bldP0,P0DATAret
如果你不開中斷的話,你把這個程序放在什么地方???
不開中斷的意思就是說在RESET的時候不對PWMCON和PWMDATA賦值嗎???
你能解釋一下你括號里面是什么意思嗎???那我怎么根據電壓的變化來調整占空比的大小啊?
不開中斷的意思就是說在RESET的時候不對PWMCON和PWMDATA賦值嗎???
你能解釋一下你括號里面是什么意思嗎???那我怎么根據電壓的變化來調整占空比的大小啊?
0
回復
@vssv
;-------------------------------------------------------------;PWM_TurnOnandP0CONH,#11001111borP0CONH,#00010000borPWMCON,#(PWMCON_CLEAR|PWMCON_START)ret;-------------------------------------------------------------;PWM_TurnOffandPWMCON,#~(PWMCON_START)andP0CONH,#11001111borP0CONH,#00100000bandP0DATA,#10111111bldP0,P0DATAret
不管怎么樣,對你的無私幫助我表示深深的感謝!希望以后能更好的交流,我的郵箱是ck4221982@yahoo.com.cn!
0
回復
@vssv
;-------------------------------------------------------------;PWM_TurnOnandP0CONH,#11001111borP0CONH,#00010000borPWMCON,#(PWMCON_CLEAR|PWMCON_START)ret;-------------------------------------------------------------;PWM_TurnOffandPWMCON,#~(PWMCON_START)andP0CONH,#11001111borP0CONH,#00100000bandP0DATA,#10111111bldP0,P0DATAret
40khz是指頻率還是精度(粒度)??
0
回復
@vssv
;-------------------------------------------------------------;PWM_TurnOnandP0CONH,#11001111borP0CONH,#00010000borPWMCON,#(PWMCON_CLEAR|PWMCON_START)ret;-------------------------------------------------------------;PWM_TurnOffandPWMCON,#~(PWMCON_START)andP0CONH,#11001111borP0CONH,#00100000bandP0DATA,#10111111bldP0,P0DATAret
我想將兩個A/D口的電壓相減,用得到的值的大小作為一個條件!當條件為真時,即FLAG為51h時,才執行另外程序,否則不執行!但是加上這個程序后,不管任何情況下,另外一個程序都會執行!不知道這個條件程序執行了沒有,謝謝幫我看看!
LD Acc1, #1 ; 1th channel
LD Acc0, #6 ; 6 sample times
CALL AdcConvert
LD Acc0, #6 ; 6 adjust number
CALL AdcDataAdjust
CALL AverageValue
LD CellVoltageL, AverageValueL
LD CellVoltageH, AverageValueH
LD Acc9, CellVoltageL
LD Acc10, CellVoltageH
;---------------
LD Acc1, #0 ; 0th channel
LD Acc0, #6 ; 6 sample times
CALL AdcConvert
LD Acc0, #6 ; 6 adjust number
CALL AdcDataAdjust
CALL AverageValue
LD CellVoltageL, AverageValueL
LD CellVoltageH, AverageValueH
LD Acc7, CellVoltageL
LD Acc8, CellVoltageH
SUB Acc9, Acc7
SBC Acc10, Acc8
SUB Acc9, #>41 ; 0.2v
SBC Acc10, #<41
JR ULT, CJV_Down_0v2
INC Counter_Up_0v2
CP Counter_Up_0v2,#2 ;2*0.5s
JR ULT, DCC_Exit
LD Counter_OutputUp, #51h
JR CJV_Exit
CJV_Down_0v2:
CLR Counter_OutputUp
CLR Counter_Up_0v2
CJV_Exit:
RET
LD Acc1, #1 ; 1th channel
LD Acc0, #6 ; 6 sample times
CALL AdcConvert
LD Acc0, #6 ; 6 adjust number
CALL AdcDataAdjust
CALL AverageValue
LD CellVoltageL, AverageValueL
LD CellVoltageH, AverageValueH
LD Acc9, CellVoltageL
LD Acc10, CellVoltageH
;---------------
LD Acc1, #0 ; 0th channel
LD Acc0, #6 ; 6 sample times
CALL AdcConvert
LD Acc0, #6 ; 6 adjust number
CALL AdcDataAdjust
CALL AverageValue
LD CellVoltageL, AverageValueL
LD CellVoltageH, AverageValueH
LD Acc7, CellVoltageL
LD Acc8, CellVoltageH
SUB Acc9, Acc7
SBC Acc10, Acc8
SUB Acc9, #>41 ; 0.2v
SBC Acc10, #<41
JR ULT, CJV_Down_0v2
INC Counter_Up_0v2
CP Counter_Up_0v2,#2 ;2*0.5s
JR ULT, DCC_Exit
LD Counter_OutputUp, #51h
JR CJV_Exit
CJV_Down_0v2:
CLR Counter_OutputUp
CLR Counter_Up_0v2
CJV_Exit:
RET
0
回復