Вс янв 27, 2019 08:37:35
Вс янв 27, 2019 09:33:21
000434 C117 F11A movff Angle_1,Angle_2 ; Младший
000438 C118 F11B movff Angle_1+1,Angle_2+1 ;
00043C C119 F11C movff Angle_1+2,Angle_2+2 ; Старший
000440 0E55 movlw low(0x555555) ;
000442 271A addwf Angle_2,F,BANKED ; А + В, результат В=B+A
000444 0E55 movlw high(0x555555) ;
000446 231B addwfc Angle_2+1,F,BANKED ; и сложим старшие байты - результат в В
000448 0E55 movlw upper(0x555555) ;
00044A 231C addwfc Angle_2+2,F,BANKED ; и сложим старшие байты - результат в В
Вс янв 27, 2019 11:11:40
Вс янв 27, 2019 12:08:55
Вс янв 27, 2019 15:11:07
movff24 Angle_1,Angle_2 ; Готовим слагаемые
Add24L Angle_2,BANKED,0x555555 ; Прибавляем опорный угол к смещению фазы +1/3 оборота
А теперь он выглядит так:
Add24L3 Angle_2,BANKED,Angle_1,BANKED,0x555555 ; D=B+A Прибавляем опорный угол к смещению фазы +1/3 оборота
Вс янв 27, 2019 16:06:40
Вс янв 27, 2019 17:47:11
LowInt: ;Единственное - АЦП, длинное и непредсказуемое
IntAdc: ; Вобрало в себя АЦП, РТК и вращение счётчика PCPWM
bcf PIR1,ADIF,ACCESS ; ADC Flag Clear максимально шустро
; И добавятся вычислители фаз из MainLoop - пропусков вычислителей теперь станет меньше
; А с откликом главного цикла 1 КГц можно будет не сильно дробить вычисления
; 18 750 Гц
movff WREG,WREG_TEMP ;save working register
movff STATUS,STATUS_TEMP ;save STATUS register
movff BSR,BSR_TEMP ;save BSR register
; movff FSR0L,FSR0L_Temp ;Пока не используется
; movff FSR0H,FSR0H_Temp ;Пока не используется
movff TBLPTRL,TBLPTRL_Temp ;
movff TBLPTRH,TBLPTRH_Temp ;
; movff TBLPTRU,TBLPTRU_Temp ;Пока не используется
; movff EECON1,EECON1_Temp ; Проверяю Глюку с сохранением
movff TABLAT,TABLAT_Temp ;
movff PRODH,PRODH_Temp ;
movff PRODL,PRODL_Temp ;
AdcIntNest ; Повторная обработка без потерь времени на сохранение контекста
; примерно 1 МИПС уходит на сохранение/восстановление контекста с частотой 18 750 Гц.
; Однако 2 МИПСа мы получаем от "разгона" до 12 МГц, надо тестировать 16 МГц.
#ifdef ADC_Present
#ifdef PCPWM_Present
extern DelayCuriosity ;
#include Proj_Dir\PCPWM_3F\Int_PCPWM_3F_4431.inc ; Эмулятор вращения короткий изохронный и первый.
#endif
#ifndef __DEBUG_;******* Разгрузка отладчика
#include Proj_Dir\ADC\Int_ADC.inc ; перекачка буферов во включаемом файле.
#endif
#ifdef RTK_ADC_Source
#include Proj_Dir\RTK\Int_RTK_Tmr.inc ; прерывания АЦП - Источник реального времени
#endif
#ifdef PCPWM_Present
dcfsnz PCPWM_AccelCounter,F,ACCESS; Счетчик Делителя частоты для плавного пуска/останова
bsf PCPWM_Flag,5,ACCESS ;;5= Запрос на обработку из 9 375 прерывания АЦП, при обнулении делителя
#endif
#ifdef PCPWM_Present
Extern PCPWM_Task
#ifndef __DEBUG_;******* Разгрузка отладчика
call PCPWM_Task ; сабпрога, длинная и долгая.
#endif
#endif
#endif
; bsf PCPWM_Flag,0,ACCESS ; Данные PCPWM надо готовить
; Обработка вычислителей из фона переедет сюда
btfss PIR1,ADIF,ACCESS ; ADC
bra ExitLoInt
bcf PIR1,ADIF,ACCESS ; ADC Flag Clear
#ifdef PCPWM_Present
incf PCPWM_Err,F,ACCESS ; Счетчик ошибок увеличиваем
#endif
bra AdcIntNest ;
;; rcall IntAdc
ExitLoInt
; movff FSR0L_Temp,FSR0L ;variable used for context saving
; movff FSR0H_Temp,FSR0H ;variable used for context saving
movff TBLPTRL_Temp,TBLPTRL ;
movff TBLPTRH_Temp,TBLPTRH ;
; movff TBLPTRU_Temp,TBLPTRU ;
; movff EECON1_Temp,EECON1 ; Проверяю Глюку с сохранением
movff TABLAT_Temp,TABLAT ;
movff PRODH_Temp,PRODH ;
movff PRODL_Temp,PRODL ;
movff BSR_TEMP,BSR ;restore BSR register
movff WREG_TEMP,WREG ;restore working register
movff STATUS_TEMP,STATUS ;restore STATUS register
retfie
Вс янв 27, 2019 20:54:00
Вс янв 27, 2019 22:02:38
#Lang "fblite"
'WindowTitle "http://www.FREEBASIC.net/index.php/download"
'1613*255 Count *18750 Hz/16 777 216 Count =459 Hz
'
Const MaxData=5000,MaxUlong=4294967293'18446744073709551613
'Const MaxRPM=100000 ' Rev Per Minutes
dim shared TestData(MaxData) As ULongInt
dim As Integer I,J,K,i1,i2
Dim As Double MaxDelta,DeltaStep,MaxRPM,IntFreq
Dim As Integer DeltaCur,DeltaOut
Dim As String a, FileName
Dim i3% :
Input "Interrupt Freq, Hz:";IntFreq
Input "Maximum RPM:";MaxRPM
'Input "Interrupt Freq:";MaxRPM
MaxDelta=16777216/IntFreq
Print MaxDelta,IntFreq', '
MaxDelta=MaxDelta*MaxRPM/(60*255) '
'MaxDelta=MaxDelta/60
'MaxDelta=MaxDelta/18750
'MaxDelta=MaxDelta/255
DeltaStep=MaxDelta/256 '
FileName="c:\s2.inc"
Open FileName for Output As 1
Print #1,"; MAX Delta=";MaxDelta;", Delta Step=";DeltaStep;", MAX RPM=";MaxRPM;", Interrupt Frequency=";IntFreq '
Print MaxDelta,DeltaStep', '
'Input "MaxDelta,DeltaStep",a$
i=1:K=0
'Print #1," db low(d'";i;"'), high(d'";i;"');";K;"=";i', upper(d'";i;"')
' Print #1,i
i=2:K=1
' Print #1," db low(d'";i;"'), high(d'";i;"');";K;"=";i', upper(d'";i;"')
'Print #1,i
I=3:K=1:i1=1:TestData(1)=2:'
For i=3 to 10000000:'
for j=1 to K:'
i2= i mod TestData(j)
if i2=0 then goto NextNumber'
next j
K=K+1:if K>MaxData goto EndTest
TestData(K)=i:i3%=i3%+1'
'Print #1," db low(d'";i;"'), high(d'";i;"');";K;"=";i', upper(d'";i;"')
'Print i,
NextNumber:
next i
EndTest:
Print K', '
'Input "K",a$
For i=1 To 256
DeltaCur=i*DeltaStep
For j=1 to K
If TestData(j) > DeltaCur Then'
if TestData(j)-DeltaCur <= DeltaCur - TestData(j-1) Then
DeltaOut=TestData(j)
Else
DeltaOut=TestData(j-1)
EndIf
'Print #1," db low(d'"; DeltaOut; "'), high(d'"; DeltaOut; "');"; i; "="; DeltaOut', upper(d'";i;"')
a$=" db low(d'"+Trim$(Str$(DeltaOut))
a$=a$+"'), high(d'"+Trim$(Str$(DeltaOut))
a$=a$+"');"+Str$(i)+"="+Str$(DeltaOut)
Print #1,a$
'Print DeltaOut,
GoTo NextStep
EndIf
Next j
NextStep:
Next i
Print #1,";Simple256:;; Tab Simple first 0-255"
For i=1 To 256
a$="; db low(d'"+Trim$(Str$(TestData(i)))
a$=a$+"');"
Print #1,a$; i; "="; TestData(i)', upper(d'";i;"')
Next i
Close #1
Print "Output data in ";FileName;
input ", End Prog, Any Key 2 Exit",a$
end
Пн янв 28, 2019 03:26:35
Пн янв 28, 2019 19:36:52
Пн янв 28, 2019 21:23:46
The PWM module has the following features:
• Up to eight PWM I/O pins with four duty cycle
generators. Pins can be paired to get a complete
half-bridge control.
• Up to 14-bit resolution, depending upon the PWM
period.
• “On-the-fly” PWM frequency changes.
• Edge and Center-Aligned Output modes.
• Single-Pulse Generation mode.
• Programmable dead-time control between paired
PWMs.
• Interrupt support for asymmetrical updates in
Center-Aligned mode.
• Output override for Electrically Commutated
Motor (ECM) operation; for example, BLDC.
• Special Event Trigger comparator for scheduling
other peripheral events.
• PWM outputs disable feature sets PWM outputs
to their inactive state when in Debug mode.
Пн янв 28, 2019 22:59:04
The PWM module has the following features:
Вт янв 29, 2019 04:17:27